document.from_crm = true document.save • Композиция сервисов получалась не всегда, получалось дублирование • Тестирование не стало проще из-за невозможности управлять зависимостями • Не получалось сделать композицию объектов (Domain)
attr_reader :convert_document_to_pdf attr_reader :create_affiliations attr_reader :update_cpl_records attr_reader :update_application_status # hundreds of other stuff here … end
do Document::CreateDocument.new( self[‘forms.create_document_form_class'] ) end end namespace('forms') do register('create_document_form_class') do Document::DocumentForm end end end
entry) Maybe( # some calculation that may return nil ) end end # fund/calculate_share_price.rb mapping = mapper.fetch_mapping(action, fund, entry) mapping.bind do |m| calculate_price_by_valuation_amount(fund, m)) end.or(issue_price_of_account(account)))
|document| render json: { document: DocumentRepresenter.new.call(document) } end m.failure do |form| render_failure_json( 422, document: form.react_errors_hash ) end end
call(document, params) form = form_class.new(document) if form.validate(params) … document.save! [:success, document] else [:failure, :validation, form] end rescue => e [:failure, e] end end
do |document| … end m.failure :validation do |form| render_failure_json( 422, document: form.react_errors_hash ) end m.failure do |e| render_failure_json(500, document: e.message) end end
типами входных данных • Можно валидировать формы, HTTP параметры, JSON документы, конфигурацию из YAML • Расширяемость • Широко используются в других библиотеках dry-validation & dry-types