Module: Dry::Validation::Schema::Definition

Included in:
Dry::Validation::Schema, Value
Defined in:
lib/dry/validation/schema/definition.rb

Instance Method Summary collapse

Instance Method Details

#attr(name, &block) ⇒ Object



16
17
18
# File 'lib/dry/validation/schema/definition.rb', line 16

def attr(name, &block)
  Attr.new(name, rules).attr?(&block)
end

#confirmation(name, options = {}) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/dry/validation/schema/definition.rb', line 43

def confirmation(name, options = {})
  conf_name = :"#{name}_confirmation"

  unless rule_by_name(name)
    if options.any?
      key(name) do |value|
        options.map { |p, args| value.__send__(:"#{p}?", *args) }.reduce(:&)
      end
    else
      key(name, &:filled?)
    end
  end

  key(conf_name, &:filled?)

  rule(conf_name, eql?: [name, conf_name])
end

#key(name, &block) ⇒ Object



12
13
14
# File 'lib/dry/validation/schema/definition.rb', line 12

def key(name, &block)
  Key.new(name, rules).key?(&block)
end

#optional(name, &block) ⇒ Object



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

def optional(name, &block)
  Key.new(name, rules).optional(&block)
end

#rule(name, **options, &block) ⇒ Object



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

def rule(name, **options, &block)
  if options.any?
    predicate, rule_names = options.to_a.first
    identifier = { name => rule_names }

    groups << [:group, [identifier, [:predicate, predicate]]]
  else
    if block
      checks << Schema::Rule.new(name, [:check, [name, yield.to_ary]])
    else
      rule_by_name(name).to_check
    end
  end
end

#schema(name, &block) ⇒ Object



5
6
7
8
9
10
# File 'lib/dry/validation/schema/definition.rb', line 5

def schema(name, &block)
  schema = Class.new(superclass)
  schema.key(name, &block)
  schemas << schema
  self
end

#value(name) ⇒ Object



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

def value(name)
  Schema::Rule::Result.new(name, [])
end