class Dry::Schema::Processor

@api public
@see JSON
@see Params
4. Apply rules
3. Apply value coercions based on type specifications
2. Apply pre-coercion filtering rules (optional step, used only when ‘filter` was used)
1. Prepare input hash using a key map
Processing is split into 4 main steps:
Processes input data using objects configured within the DSL

def <<(step)

Other tags:
    Api: - private

Returns:
  • (Processor) -
def <<(step)
  steps << step
  self
end

def call(input)

Other tags:
    Api: - public

Returns:
  • (Result) -

Parameters:
  • input (Hash) --
def call(input)
  Result.new(input, message_compiler: message_compiler) do |result|
    steps.each do |step|
      output = step.(result)
      result.replace(output) if output.is_a?(::Hash)
    end
  end
end

def config

Other tags:
    Api: - private

Returns:
  • (Dry::Types::Config) -
def config
  @config ||= rule_applier.config
end

def define(&block)

Other tags:
    Api: - public

Returns:
  • (Class) -

Other tags:
    See: Schema#JSON -
    See: Schema#Params -
    See: Schema#define -
def define(&block)
  @definition ||= DSL.new(
    processor_type: self, parent: superclass.definition, **config, &block
  )
  self
end

def filter_rules?

Other tags:
    Api: - private
def filter_rules?
  @filter_rules_predicate ||= schema_dsl.filter_rules?
end

def filter_schema

Other tags:
    Api: - private
def filter_schema
  @filter_schema ||= schema_dsl.filter_schema
end

def inspect

Other tags:
    Api: - public

Returns:
  • (String) -
def inspect
  <<~STR.strip
    #<#{self.class.name} keys=#{key_map.map(&:dump)} rules=#{rules.map { |k, v| [k, v.to_s] }.to_h}>
  STR
end

def key_map

Other tags:
    Api: - public

Returns:
  • (KeyMap) -
def key_map
  @key_map ||= steps.detect { |s| s.is_a?(KeyCoercer) }.key_map
end

def message_compiler

Other tags:
    Api: - private

Returns:
  • (MessageCompiler) -
def message_compiler
  rule_applier.message_compiler
end

def new(options = nil, &block)

Other tags:
    Api: - public

Returns:
  • (Processor) -
def new(options = nil, &block)
  if options || block
    processor = super
    yield(processor) if block
    processor
  elsif definition
    definition.call
  else
    raise ArgumentError, 'Cannot create a schema without a definition'
  end
end

def rule_applier

Other tags:
    Api: - private
def rule_applier
  @rule_applier ||= steps.last
end

def rules

Other tags:
    Api: - private

Returns:
  • (MessageCompiler) -
def rules
  rule_applier.rules
end

def to_ast

Other tags:
    Api: - private
def to_ast
  rule_applier.to_ast
end

def to_proc

Other tags:
    Api: - public

Returns:
  • (Proc) -
def to_proc
  ->(input) { call(input) }
end

def type_schema

Other tags:
    Api: - private

Returns:
  • (Dry::Types::Safe) -
def type_schema
  @type_schema ||= steps.detect { |s| s.is_a?(ValueCoercer) }.type_schema
end