class Dry::Schema::ProcessorSteps

@api public
@see Processor
4. ‘rule_applier` - Apply rules
3. `value_coercer` - Apply value coercions based on type specifications
(optional step, used only when `filter` was used)
2. `filter_schema` - Apply pre-coercion filtering rules
1. `key_coercer` - Prepare input hash using a key map
There are 4 main steps:
Steps for the Dry::Schema::Processor

def [](name)

Other tags:
    Api: - public

Parameters:
  • name (Symbol) -- The step name
def [](name)
  steps[name]
end

def []=(name, value)

Other tags:
    Api: - public

Parameters:
  • name (Symbol) -- The step name
def []=(name, value)
  steps[name] = Step.new(type: :core, name: name, executor: value)
end

def after(name, &block)

Other tags:
    Api: - public

Returns:
  • (ProcessorSteps) -

Parameters:
  • name (Symbol) -- The step name
def after(name, &block)
  after_steps[name] ||= EMPTY_ARRAY.dup
  after_steps[name] << Step.new(type: :after, name: name, executor: block)
  after_steps[name].sort_by!(&:path)
  self
end

def before(name, &block)

Other tags:
    Api: - public

Returns:
  • (ProcessorSteps) -

Parameters:
  • name (Symbol) -- The step name
def before(name, &block)
  before_steps[name] ||= EMPTY_ARRAY.dup
  before_steps[name] << Step.new(type: :before, name: name, executor: block)
  before_steps[name].sort_by!(&:path)
  self
end

def call(result)

Other tags:
    Api: - public

Returns:
  • (Result) -

Parameters:
  • result (Result) --
def call(result)
  STEPS_IN_ORDER.each do |name|
    before_steps[name]&.each { |step| step&.(result) }
    steps[name]&.(result)
    after_steps[name]&.each { |step| step&.(result) }
  end
  result
end

def import_callbacks(path, other)

Other tags:
    Api: - private
def import_callbacks(path, other)
  other.before_steps.each do |name, steps|
    before_steps[name] ||= []
    before_steps[name].concat(steps.map { |step| step.scoped(path) }).sort_by!(&:path)
  end
  other.after_steps.each do |name, steps|
    after_steps[name] ||= []
    after_steps[name].concat(steps.map { |step| step.scoped(path) }).sort_by!(&:path)
  end
end

def key_map

Other tags:
    Api: - private
def key_map
  @key_map ||= self[:key_coercer].executor.key_map
end

def merge(other)

Other tags:
    Api: - public

Returns:
  • (ProcessorSteps) -

Parameters:
  • other (ProcessorSteps) --
def merge(other)
  ProcessorSteps.new(
    before_steps: merge_callbacks(before_steps, other.before_steps),
    after_steps: merge_callbacks(after_steps, other.after_steps)
  )
end

def merge_callbacks(left, right)

Other tags:
    Api: - private
def merge_callbacks(left, right)
  left.merge(right) do |_key, oldval, newval|
    (oldval + newval).sort_by(&:path)
  end
end

def rule_applier

Other tags:
    Api: - private
def rule_applier
  @rule_applier ||= steps[:rule_applier].executor
end

def type_schema

Other tags:
    Api: - private
def type_schema
  @type_schema ||= steps[:value_coercer].executor.type_schema
end