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

Direct Known Subclasses

Form

Defined Under Namespace

Modules: Definition Classes: Form, Key, Result, Rule, Value

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Definition

confirmation, key, optional, rule

Constructor Details

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

Returns a new instance of Schema.



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

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

Instance Attribute Details

#error_compilerObject (readonly)

Returns the value of attribute error_compiler.



59
60
61
# File 'lib/dry/validation/schema.rb', line 59

def error_compiler
  @error_compiler
end

#groupsObject (readonly)

Returns the value of attribute groups.



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

def groups
  @groups
end

#rulesObject (readonly)

Returns the value of attribute rules.



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

def rules
  @rules
end

Class Method Details

.error_compilerObject



25
26
27
# File 'lib/dry/validation/schema.rb', line 25

def self.error_compiler
  ErrorCompiler.new(messages)
end

.groupsObject



53
54
55
# File 'lib/dry/validation/schema.rb', line 53

def self.groups
  @__groups__ ||= []
end

.messagesObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/dry/validation/schema.rb', line 29

def self.messages
  default =
    case config.messages
    when :yaml then Messages.default
    when :i18n then Messages::I18n.new
    else
      raise RuntimeError, "+#{config.messages}+ is not a valid messages identifier"
    end

  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



21
22
23
# File 'lib/dry/validation/schema.rb', line 21

def self.predicates
  config.predicates
end

.rulesObject



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

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

Instance Method Details

#[](name) ⇒ Object



82
83
84
85
86
87
88
89
90
# File 'lib/dry/validation/schema.rb', line 82

def [](name)
  if predicates.key?(name)
    predicates[name]
  elsif respond_to?(name)
    Predicate.new(name, &method(name))
  else
    raise ArgumentError, "+#{name}+ is not a valid predicate name"
  end
end

#call(input) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/dry/validation/schema.rb', line 68

def call(input)
  result = Validation::Result.new(rules.map { |rule| rule.(input) })

  groups.each do |group|
    result.with_values(group.rules) do |values|
      result << group.(*values)
    end
  end

  errors = Error::Set.new(result.failures.map { |failure| Error.new(failure) })

  Schema::Result.new(input, result, errors, error_compiler)
end

#predicatesObject



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

def predicates
  self.class.predicates
end