Sha256: 22c010988e2b8c465c348ffa45878737cea0067f87d1aec03b14fcc73776e881

Contents?: true

Size: 1.01 KB

Versions: 8

Compression:

Stored size: 1.01 KB

Contents

module Dry
  module Transaction
    class DSL < Module
      def initialize(step_adapters:)
        @step_adapters = step_adapters

        define_steps
        define_dsl
      end

      def inspect
        "Dry::Transaction::DSL(#{@step_adapters.keys.sort.join(', ')})"
      end

      private

      def define_steps
        module_eval do
          define_method(:steps) do
            @steps ||= []
          end
        end
      end

      def define_dsl
        module_exec(@step_adapters) do |step_adapters|
          step_adapters.keys.each do |adapter_name|
            define_method(adapter_name) do |step_name, with: nil, **options|
              operation_name = with || step_name

              steps << Step.new(
                step_adapters[adapter_name],
                step_name,
                operation_name,
                nil, # operations are resolved only when transactions are instantiated
                options,
              )
            end
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
dry-transaction-0.12.1 lib/dry/transaction/dsl.rb
dry-transaction-0.12.0 lib/dry/transaction/dsl.rb
dry-transaction-0.11.2 lib/dry/transaction/dsl.rb
dry-transaction-0.11.1 lib/dry/transaction/dsl.rb
dry-transaction-0.11.0 lib/dry/transaction/dsl.rb
dry-transaction-0.10.2 lib/dry/transaction/dsl.rb
dry-transaction-0.10.1 lib/dry/transaction/dsl.rb
dry-transaction-0.10.0 lib/dry/transaction/dsl.rb