Sha256: d4725030c0618132dc75edfacf3fc919bd7962c254fa05a305dd11875994e476

Contents?: true

Size: 1.17 KB

Versions: 10

Compression:

Stored size: 1.17 KB

Contents

module Trailblazer
  module Operation::Wrap
    module Inject
      # Returns an Alteration wirings that, when applied, inserts the {ReverseMergeDefaults} task
      # before the {Wrap::Call} task. This is meant for macros and steps that accept a dependency
      # injection but need a default parameter to be set if not injected.
      # @returns ADDS
      def self.Defaults(default_dependencies)
        Module.new do
          extend Activity::Path::Plan()

          task ReverseMergeDefaults.new( default_dependencies ),
            id:     "ReverseMergeDefaults#{default_dependencies}",
            before: "task_wrap.call_task"
        end
      end

      # @api private
      # @returns Task
      # @param Hash list of key/value that should be set if not already assigned/set before (or injected from the outside).
      class ReverseMergeDefaults
        def initialize(defaults)
          @defaults = defaults
        end

        def call((wrap_ctx, original_args), **circuit_options)
          ctx = original_args[0][0]

          @defaults.each { |k, v| ctx[k] ||= v }

          return Activity::Right, [ wrap_ctx, original_args ]
        end
      end
    end # Inject
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
trailblazer-operation-0.4.1 lib/trailblazer/operation/inject.rb
trailblazer-operation-0.4.0 lib/trailblazer/operation/inject.rb
trailblazer-operation-0.3.1 lib/trailblazer/operation/inject.rb
trailblazer-operation-0.3.0 lib/trailblazer/operation/inject.rb
trailblazer-operation-0.2.5 lib/trailblazer/operation/inject.rb
trailblazer-operation-0.2.4 lib/trailblazer/operation/inject.rb
trailblazer-operation-0.2.3 lib/trailblazer/operation/inject.rb
trailblazer-operation-0.2.2 lib/trailblazer/operation/inject.rb
trailblazer-operation-0.2.1 lib/trailblazer/operation/inject.rb
trailblazer-operation-0.2.0 lib/trailblazer/operation/inject.rb