Class: Dry::Schema::Processor
- Inherits:
-
Object
- Object
- Dry::Schema::Processor
- 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`.
Class Attribute Summary collapse
-
.definition ⇒ DSL
readonly
private
Return DSL configured via #define.
Class Method Summary collapse
-
.define(&block) ⇒ Class
Define a schema for your processor class.
-
.new(options = nil, &block) ⇒ Processor
Build a new processor object.
Instance Method Summary collapse
-
#call(input) ⇒ Result
(also: #[])
Apply processing steps to the provided input.
-
#config ⇒ Dry::Types::Config
private
Return the rules config.
-
#filter_rules? ⇒ Boolean
private
Check if there are filter rules.
-
#filter_schema ⇒ Object
private
Return filter schema.
-
#inspect ⇒ String
Return string representation.
-
#key_map ⇒ KeyMap
Return the key map.
-
#merge(other) ⇒ Processor, ...
Merge with another schema.
-
#message_compiler ⇒ MessageCompiler
private
Return the message compiler.
-
#rule_applier ⇒ Object
(also: #to_rule)
private
Return the rule applier.
-
#rules ⇒ MessageCompiler
private
Return the rules from rule applier.
-
#to_ast ⇒ Object
(also: #ast)
private
Return AST representation of the rules.
-
#to_proc ⇒ Proc
Return a proc that acts like a schema object.
-
#type_schema ⇒ Dry::Types::Safe
private
Return the type schema.
-
#types ⇒ Object
private
Return the types from the schema DSL.
- #xor(_other) ⇒ Object (also: #^)
Methods included from JSONSchema::SchemaMethods
Methods included from Info::SchemaMethods
Class Attribute Details
.definition ⇒ DSL (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
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
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
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/dry/schema/processor.rb', line 66 def new( = nil, &block) if || block processor = super(**( || 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
86 87 88 89 90 |
# File 'lib/dry/schema/processor.rb', line 86 def call(input) Result.new(input.dup, message_compiler: ) do |result| steps.call(result) end end |
#config ⇒ Dry::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
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
201 202 203 |
# File 'lib/dry/schema/processor.rb', line 201 def filter_rules? @filter_rules_predicate ||= schema_dsl.filter_rules? end |
#filter_schema ⇒ Object
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
208 209 210 |
# File 'lib/dry/schema/processor.rb', line 208 def filter_schema @filter_schema ||= schema_dsl.filter_schema end |
#inspect ⇒ String
Return string representation
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_map ⇒ KeyMap
Return the key map
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
106 107 108 |
# File 'lib/dry/schema/processor.rb', line 106 def merge(other) schema_dsl.merge(other.schema_dsl).() end |
#message_compiler ⇒ MessageCompiler
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
178 179 180 |
# File 'lib/dry/schema/processor.rb', line 178 def rule_applier. end |
#rule_applier ⇒ Object 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 |
#rules ⇒ MessageCompiler
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
187 188 189 |
# File 'lib/dry/schema/processor.rb', line 187 def rules rule_applier.rules end |
#to_ast ⇒ Object 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_proc ⇒ Proc
Return a proc that acts like a schema object
115 116 117 |
# File 'lib/dry/schema/processor.rb', line 115 def to_proc ->(input) { call(input) } end |
#type_schema ⇒ Dry::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
144 145 146 |
# File 'lib/dry/schema/processor.rb', line 144 def type_schema steps.type_schema end |
#types ⇒ Object
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 types from the schema DSL
194 195 196 |
# File 'lib/dry/schema/processor.rb', line 194 def types schema_dsl.types end |
#xor(_other) ⇒ Object Also known as: ^
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 |