Sha256: b2bb60a2d03b6748c65a2c0b4d08afe66c57f634768ffb97c65578208c2b992f
Contents?: true
Size: 1.22 KB
Versions: 1
Compression:
Stored size: 1.22 KB
Contents
require "dry/transaction/result_matcher" require "dry/transaction/step" require "dry/transaction/step_adapters" require "dry/transaction/sequence" module Dry module Transaction # @api private class DSL < BasicObject attr_reader :container attr_reader :step_adapters attr_reader :steps attr_reader :matcher def initialize(options, &block) @container = options.fetch(:container) @step_adapters = options.fetch(:step_adapters) { StepAdapters } @steps = [] @matcher = options.fetch(:matcher) { ResultMatcher } instance_eval(&block) end def respond_to_missing?(method_name) step_adapters.key?(method_name) end def method_missing(method_name, *args) return super unless step_adapters.key?(method_name) step_adapter = step_adapters[method_name] step_name = args.first options = args.last.is_a?(::Hash) ? args.last : {} operation_name = options.delete(:with) || step_name operation = container[operation_name] steps << Step.new(step_adapter, step_name, operation_name, operation, options) end def call Sequence.new(steps, matcher) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dry-transaction-0.8.0 | lib/dry/transaction/dsl.rb |