Class: Dry::Schema::Predicate

Inherits:
Object
  • Object
show all
Includes:
Logic::Operators
Defined in:
lib/dry/schema/predicate.rb

Overview

Predicate objects used within the DSL

Defined Under Namespace

Classes: Negation

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(compiler, name, args, block) ⇒ Predicate

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.

Returns a new instance of Predicate.



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

def initialize(compiler, name, args, block)
  @compiler = compiler
  @name = name
  @args = args
  @block = block
end

Instance Attribute Details

#argsObject (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.



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

def args
  @args
end

#blockObject (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.



48
49
50
# File 'lib/dry/schema/predicate.rb', line 48

def block
  @block
end

#compilerObject (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.



39
40
41
# File 'lib/dry/schema/predicate.rb', line 39

def compiler
  @compiler
end

#nameObject (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.



42
43
44
# File 'lib/dry/schema/predicate.rb', line 42

def name
  @name
end

Instance Method Details

#!Negation

Negate a predicate

Examples:

required(:name).value(:string) { !empty? }

Returns:



66
67
68
# File 'lib/dry/schema/predicate.rb', line 66

def !
  Negation.new(self)
end

#ensure_validObject

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.



71
72
73
74
75
# File 'lib/dry/schema/predicate.rb', line 71

def ensure_valid
  if compiler.predicates[name].arity - 1 != args.size
    raise ArgumentError, "#{name} predicate arity is invalid"
  end
end

#to_astArray 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.

Dump predicate to an AST

Returns:

  • (Array)


89
90
91
# File 'lib/dry/schema/predicate.rb', line 89

def to_ast(*)
  [:predicate, [name, compiler.predicates.arg_list(name, *args)]]
end

#to_ruleObject

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.

Compile predicate to a rule object



80
81
82
# File 'lib/dry/schema/predicate.rb', line 80

def to_rule
  compiler.visit(to_ast)
end