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 represntation.
-
#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.
- #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
194 195 196 |
# File 'lib/dry/schema/processor.rb', line 194 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
201 202 203 |
# File 'lib/dry/schema/processor.rb', line 201 def filter_schema @filter_schema ||= schema_dsl.filter_schema end |
#inspect ⇒ String
Return string represntation
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 |
#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 |