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:



41
42
43
# File 'lib/dry/schema/processor.rb', line 41

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


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

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:



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

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:



84
85
86
87
88
# File 'lib/dry/schema/processor.rb', line 84

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)


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

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)


208
209
210
# File 'lib/dry/schema/processor.rb', line 208

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



215
216
217
# File 'lib/dry/schema/processor.rb', line 215

def filter_schema
  @filter_schema ||= schema_dsl.filter_schema
end

#inspectString

Return string representation

Returns:

  • (String)


122
123
124
125
126
# File 'lib/dry/schema/processor.rb', line 122

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:



133
134
135
# File 'lib/dry/schema/processor.rb', line 133

def key_map
  steps.key_map
end

#merge(other) ⇒ Processor, ...

Merge with another schema

Parameters:

Returns:



104
105
106
# File 'lib/dry/schema/processor.rb', line 104

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:



185
186
187
# File 'lib/dry/schema/processor.rb', line 185

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



158
159
160
# File 'lib/dry/schema/processor.rb', line 158

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:



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

def rules
  rule_applier.rules
end

#strict_type_schemaDry::Types::Schema

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 type schema used when composing subschemas

Returns:

  • (Dry::Types::Schema)


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

def strict_type_schema
  schema_dsl.strict_type_schema
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



175
176
177
# File 'lib/dry/schema/processor.rb', line 175

def to_ast(*)
  rule_applier.to_ast
end

#to_procProc

Return a proc that acts like a schema object

Returns:

  • (Proc)


113
114
115
# File 'lib/dry/schema/processor.rb', line 113

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

#type_schemaDry::Types::Lax

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::Lax)


142
143
144
# File 'lib/dry/schema/processor.rb', line 142

def type_schema
  steps.type_schema
end

#typesObject

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



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

def types
  schema_dsl.types
end

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

Raises:

  • (NotImplementedError)


92
93
94
# File 'lib/dry/schema/processor.rb', line 92

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