class ActiveOperation::Pipeline::OperationFactory

Public Class Methods

new(operation_class, options = {}) click to toggle source
Calls superclass method
# File lib/active_operation/pipeline.rb, line 4
def initialize(operation_class, options = {})
  super(operation_class)
  @_options = options
end

Public Instance Methods

new(context, *input) click to toggle source
# File lib/active_operation/pipeline.rb, line 9
def new(context, *input)
  keyword_input_names = inputs.select(&:keyword?).map(&:name)
  positional_args = input.shift(inputs.count(&:positional?))

  attributes_from_input = input.last.kind_of?(Hash) ? input.pop.slice(*keyword_input_names) : {}
  attributes_from_input.delete_if { |_, value| value.nil? }

  attributes_from_pipeline = Array(@_options).each_with_object({}) do |(key, value), result|
    result[key] = value.kind_of?(Proc) ? context.instance_exec(&value) : value
  end

  __getobj__.new *positional_args, attributes_from_input.merge(attributes_from_pipeline)
end