Class: Dry::Validation::Schema

Inherits:
Object
  • Object
show all
Extended by:
Configurable, Definition
Defined in:
lib/dry/validation/schema.rb,
lib/dry/validation/schema/key.rb,
lib/dry/validation/schema/rule.rb,
lib/dry/validation/schema/value.rb,
lib/dry/validation/schema/definition.rb

Defined Under Namespace

Modules: Definition Classes: Key, Value

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Definition

key

Constructor Details

#initialize(error_compiler = self.class.error_compiler) ⇒ Schema

Returns a new instance of Schema.



49
50
51
52
# File 'lib/dry/validation/schema.rb', line 49

def initialize(error_compiler = self.class.error_compiler)
  @rules = RuleCompiler.new(self).(self.class.rules.map(&:to_ary))
  @error_compiler = error_compiler
end

Instance Attribute Details

#error_compilerObject (readonly)

Returns the value of attribute error_compiler.



47
48
49
# File 'lib/dry/validation/schema.rb', line 47

def error_compiler
  @error_compiler
end

#rulesObject (readonly)

Returns the value of attribute rules.



45
46
47
# File 'lib/dry/validation/schema.rb', line 45

def rules
  @rules
end

Class Method Details

.error_compilerObject



23
24
25
# File 'lib/dry/validation/schema.rb', line 23

def self.error_compiler
  ErrorCompiler.new(messages)
end

.messagesObject



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/dry/validation/schema.rb', line 27

def self.messages
  default = config.messages

  if config.messages_file && config.namespace
    default.merge(config.messages_file).namespaced(config.namespace)
  elsif config.messages_file
    default.merge(config.messages_file)
  elsif config.namespace
    default.namespaced(config.namespace)
  else
    default
  end
end

.predicatesObject



19
20
21
# File 'lib/dry/validation/schema.rb', line 19

def self.predicates
  config.predicates
end

.rulesObject



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

def self.rules
  @__rules__ ||= []
end

Instance Method Details

#[](name) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/dry/validation/schema.rb', line 65

def [](name)
  if methods.include?(name)
    Predicate.new(name, &method(name))
  else
    self.class.predicates[name]
  end
end

#call(input) ⇒ Object



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

def call(input)
  rules.each_with_object(Error::Set.new) do |rule, errors|
    result = rule.(input)
    errors << Error.new(result) if result.failure?
  end
end

#messages(input) ⇒ Object



61
62
63
# File 'lib/dry/validation/schema.rb', line 61

def messages(input)
  error_compiler.call(call(input).map(&:to_ary))
end