Class: Dry::Schema::Processor

Inherits:
Object
  • Object
show all
Extended by:
Configurable, Initializer
Includes:
Logic::Operators, Info::SchemaMethods, JSONSchema::SchemaMethods
Defined in:
lib/dry/schema/processor.rb

Overview

Processes input data using objects configured within the DSL Processing is split into steps represented by `ProcessorSteps`.

Direct Known Subclasses

JSON, Params

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from JSONSchema::SchemaMethods

#json_schema

Methods included from Info::SchemaMethods

#info

Class Attribute Details

.definitionDSL (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return DSL configured via #define

Returns:



43
44
45
# File 'lib/dry/schema/processor.rb', line 43

def definition
  @definition
end

Class Method Details

.define(&block) ⇒ Class

Define a schema for your processor class

Returns:

  • (Class)

See Also:

  • Schema#define
  • Schema#Params
  • Schema#JSON


54
55
56
57
58
59
# File 'lib/dry/schema/processor.rb', line 54

def define(&block)
  @definition ||= DSL.new(
    processor_type: self, parent: superclass.definition, **config.to_h, &block
  )
  self
end

.new(options = nil, &block) ⇒ Processor

Build a new processor object

Returns:



66
67
68
69
70
71
72
73
74
75
76
# File 'lib/dry/schema/processor.rb', line 66

def new(options = nil, &block)
  if options || block
    processor = super(**(options || EMPTY_HASH))
    yield(processor) if block
    processor
  elsif definition
    definition.call
  else
    raise ArgumentError, "Cannot create a schema without a definition"
  end
end

Instance Method Details

#call(input) ⇒ Result Also known as: []

Apply processing steps to the provided input

Parameters:

  • input (Hash)

Returns:



86
87
88
89
90
# File 'lib/dry/schema/processor.rb', line 86

def call(input)
  Result.new(input.dup, message_compiler: message_compiler) do |result|
    steps.call(result)
  end
end

#configDry::Types::Config

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the rules config

Returns:

  • (Dry::Types::Config)


161
162
163
# File 'lib/dry/schema/processor.rb', line 161

def config
  @config ||= rule_applier.config
end

#filter_rules?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Check if there are filter rules

Returns:

  • (Boolean)


194
195
196
# File 'lib/dry/schema/processor.rb', line 194

def filter_rules?
  @filter_rules_predicate ||= schema_dsl.filter_rules?
end

#filter_schemaObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return filter schema



201
202
203
# File 'lib/dry/schema/processor.rb', line 201

def filter_schema
  @filter_schema ||= schema_dsl.filter_schema
end

#inspectString

Return string representation

Returns:

  • (String)


124
125
126
127
128
# File 'lib/dry/schema/processor.rb', line 124

def inspect
  <<~STR.strip
    #<#{self.class.name} keys=#{key_map.map(&:dump)} rules=#{rules.transform_values(&:to_s)}>
  STR
end

#key_mapKeyMap

Return the key map

Returns:



135
136
137
# File 'lib/dry/schema/processor.rb', line 135

def key_map
  steps.key_map
end

#merge(other) ⇒ Processor, ...

Merge with another schema

Parameters:

Returns:



106
107
108
# File 'lib/dry/schema/processor.rb', line 106

def merge(other)
  schema_dsl.merge(other.schema_dsl).()
end

#message_compilerMessageCompiler

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the message compiler

Returns:



178
179
180
# File 'lib/dry/schema/processor.rb', line 178

def message_compiler
  rule_applier.message_compiler
end

#rule_applierObject Also known as: to_rule

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the rule applier



151
152
153
# File 'lib/dry/schema/processor.rb', line 151

def rule_applier
  steps.rule_applier
end

#rulesMessageCompiler

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the rules from rule applier

Returns:



187
188
189
# File 'lib/dry/schema/processor.rb', line 187

def rules
  rule_applier.rules
end

#to_astObject Also known as: ast

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return AST representation of the rules



168
169
170
# File 'lib/dry/schema/processor.rb', line 168

def to_ast(*)
  rule_applier.to_ast
end

#to_procProc

Return a proc that acts like a schema object

Returns:

  • (Proc)


115
116
117
# File 'lib/dry/schema/processor.rb', line 115

def to_proc
  ->(input) { call(input) }
end

#type_schemaDry::Types::Safe

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the type schema

Returns:

  • (Dry::Types::Safe)


144
145
146
# File 'lib/dry/schema/processor.rb', line 144

def type_schema
  steps.type_schema
end

#xor(_other) ⇒ Object Also known as: ^

Raises:

  • (NotImplementedError)


94
95
96
# File 'lib/dry/schema/processor.rb', line 94

def xor(_other)
  raise NotImplementedError, "composing schemas using `xor` operator is not supported yet"
end