Class: Dry::Schema::Predicate
- Inherits:
-
Object
- Object
- Dry::Schema::Predicate
- 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
- #args ⇒ Object readonly private
- #arity ⇒ Object readonly private
- #block ⇒ Object readonly private
- #compiler ⇒ Object readonly private
- #name ⇒ Object readonly private
Instance Method Summary collapse
-
#! ⇒ Negation
Negate a predicate.
- #ensure_valid ⇒ Object private
-
#initialize(compiler, name, args, block) ⇒ Predicate
constructor
private
A new instance of Predicate.
-
#to_ast ⇒ Array
(also: #ast)
private
Dump predicate to an AST.
-
#to_rule ⇒ Object
private
Compile predicate to a rule object.
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.
56 57 58 59 60 61 62 63 |
# File 'lib/dry/schema/predicate.rb', line 56 def initialize(compiler, name, args, block) @compiler = compiler @name = name @args = args @block = block # Cater for optional second argument like in case of `eql?` or `respond_to?` @arity = compiler.predicates[name].arity.abs end |
Instance Attribute Details
#args ⇒ Object (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.
47 48 49 |
# File 'lib/dry/schema/predicate.rb', line 47 def args @args end |
#arity ⇒ Object (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.
50 51 52 |
# File 'lib/dry/schema/predicate.rb', line 50 def arity @arity end |
#block ⇒ Object (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.
53 54 55 |
# File 'lib/dry/schema/predicate.rb', line 53 def block @block end |
#compiler ⇒ Object (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.
41 42 43 |
# File 'lib/dry/schema/predicate.rb', line 41 def compiler @compiler end |
#name ⇒ Object (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.
44 45 46 |
# File 'lib/dry/schema/predicate.rb', line 44 def name @name end |
Instance Method Details
#! ⇒ Negation
Negate a predicate
73 74 75 |
# File 'lib/dry/schema/predicate.rb', line 73 def ! Negation.new(self) end |
#ensure_valid ⇒ Object
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.
78 79 80 81 82 |
# File 'lib/dry/schema/predicate.rb', line 78 def ensure_valid if arity - 1 != args.size raise ArgumentError, "#{name} predicate arity is invalid" end end |
#to_ast ⇒ Array 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
96 97 98 |
# File 'lib/dry/schema/predicate.rb', line 96 def to_ast(*) [:predicate, [name, compiler.predicates.arg_list(name, *args)]] end |
#to_rule ⇒ Object
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
87 88 89 |
# File 'lib/dry/schema/predicate.rb', line 87 def to_rule compiler.visit(to_ast) end |