Module: Dry::Mutations::Transactions::DSL
- Includes:
- Dry::Monads::Either::Mixin
- Defined in:
- lib/dry/mutations/transactions/dsl.rb
Overview
dry-rb.org/gems/dry-transaction/basic-usage/ save_user = Dry.Transaction(container: Container) do
step :process
step :validate
step :persist
end
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.extended(base) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/dry/mutations/transactions/dsl.rb', line 13 def self.extended base fail Errors::TypeError.new("Extended class [#{base}] should not respond to :call, it is defined by this extension.") if base.respond_to?(:call) base.send :define_method, :initialize do |input| @input = input end unless base.instance_methods(false).include?(:initialize) %i(run run!).each do |meth| base.send :define_method, meth do base.public_send(meth, @input) end unless base.instance_methods(false).include?(meth) end end |
Instance Method Details
#chain(**params) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/dry/mutations/transactions/dsl.rb', line 25 def chain **params return enum_for(:chain) unless block_given? # FIXME: Needed? Works? Remove? λ = Proc.new @transaction = ::Dry.Transaction(container: ::Dry::Mutations::Transactions::Container, step_adapters: StepAdapters) do instance_eval(&λ) end.tap do |transaction| singleton_class.send :define_method, :call do |input| transaction.(input) end singleton_class.send :define_method, :run do |input| ::Dry::Mutations::Extensions::Outcome(transaction.(input)) end singleton_class.send :define_method, :run! do |input| ::Dry::Mutations::Extensions::Outcome!(transaction.(input)) end end end |