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)


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

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)


199
200
201
# File 'lib/dry/schema/processor.rb', line 199

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



206
207
208
# File 'lib/dry/schema/processor.rb', line 206

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:



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

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



149
150
151
# File 'lib/dry/schema/processor.rb', line 149

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:



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

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



166
167
168
# File 'lib/dry/schema/processor.rb', line 166

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


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



192
193
194
# File 'lib/dry/schema/processor.rb', line 192

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