Class: Dry::Schema::Macros::DSL
- Includes:
- Logic::Operators
- Defined in:
- lib/dry/schema/macros/dsl.rb
Overview
Macro specialization used within the DSL
Instance Attribute Summary collapse
-
#chain ⇒ Boolean
readonly
private
Indicate if the macro should append its rules to the provided trace.
-
#predicate_inferrer ⇒ PredicateInferrer
readonly
private
PredicateInferrer is used to infer predicate type-check from a type spec.
-
#primitive_inferrer ⇒ PrimitiveInferrer
readonly
private
PrimitiveInferrer used to get a list of primitive classes from configured type.
Instance Method Summary collapse
-
#array ⇒ Macros::Core
Like ‘each` but sets `array?` type-check.
- #custom_type? ⇒ Boolean private
-
#each ⇒ Macros::Core
Specify predicates that should be applied to each element of an array.
-
#filled(*args, **opts, &block) ⇒ Macros::Core
Prepends ‘:filled?` predicate.
-
#hash ⇒ Object
Specify a nested hash with enforced ‘hash?` type-check.
-
#maybe(*args, **opts, &block) ⇒ Macros::Key
Set type specification and predicates for a maybe value.
-
#schema ⇒ Macros::Core
Specify a nested hash without enforced ‘hash?` type-check.
-
#type(spec) ⇒ Macros::Key
Set type spec.
-
#value(*predicates, **predicate_opts) ⇒ Macros::Core
Set predicates without and with arguments.
Methods inherited from Core
#new, #operation, #path, #to_ast, #to_rule
Instance Attribute Details
#chain ⇒ Boolean (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.
Indicate if the macro should append its rules to the provided trace
20 |
# File 'lib/dry/schema/macros/dsl.rb', line 20 option :chain, default: -> { true } |
#predicate_inferrer ⇒ PredicateInferrer (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.
PredicateInferrer is used to infer predicate type-check from a type spec
26 |
# File 'lib/dry/schema/macros/dsl.rb', line 26 option :predicate_inferrer, default: proc { PredicateInferrer.new(compiler.predicates) } |
#primitive_inferrer ⇒ PrimitiveInferrer (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.
PrimitiveInferrer used to get a list of primitive classes from configured type
32 |
# File 'lib/dry/schema/macros/dsl.rb', line 32 option :primitive_inferrer, default: proc { PrimitiveInferrer.new } |
Instance Method Details
#array ⇒ Macros::Core
Like ‘each` but sets `array?` type-check
176 177 178 179 180 |
# File 'lib/dry/schema/macros/dsl.rb', line 176 def array(...) append_macro(Macros::Array) do |macro| macro.value(...) end end |
#custom_type? ⇒ Boolean
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.
198 199 200 |
# File 'lib/dry/schema/macros/dsl.rb', line 198 def custom_type? schema_dsl.custom_type?(name) end |
#each ⇒ Macros::Core
Specify predicates that should be applied to each element of an array
This is a simpler building block than ‘array` macro, use it when you want to provide `array?` type-check with other rules manually.
157 158 159 160 161 |
# File 'lib/dry/schema/macros/dsl.rb', line 157 def each(...) append_macro(Macros::Each) do |macro| macro.value(...) end end |
#filled(*args, **opts, &block) ⇒ Macros::Core
Prepends ‘:filled?` predicate
80 81 82 83 84 85 86 |
# File 'lib/dry/schema/macros/dsl.rb', line 80 def filled(*args, **opts, &block) extract_type_spec(args) do |*predicates, type_spec:, type_rule:| append_macro(Macros::Filled) do |macro| macro.call(*predicates, type_spec: type_spec, type_rule: type_rule, **opts, &block) end end end |
#hash ⇒ Object
Specify a nested hash with enforced ‘hash?` type-check
134 135 136 137 138 |
# File 'lib/dry/schema/macros/dsl.rb', line 134 def hash(...) append_macro(Macros::Hash) do |macro| macro.call(...) end end |
#maybe(*args, **opts, &block) ⇒ Macros::Key
Set type specification and predicates for a maybe value
98 99 100 101 102 103 104 |
# File 'lib/dry/schema/macros/dsl.rb', line 98 def maybe(*args, **opts, &block) extract_type_spec(args, nullable: true) do |*predicates, type_spec:, type_rule:| append_macro(Macros::Maybe) do |macro| macro.call(*predicates, type_spec: type_spec, type_rule: type_rule, **opts, &block) end end end |
#schema ⇒ Macros::Core
Specify a nested hash without enforced ‘hash?` type-check
This is a simpler building block than ‘hash` macro, use it when you want to provide `hash?` type-check with other rules manually.
120 121 122 123 124 |
# File 'lib/dry/schema/macros/dsl.rb', line 120 def schema(...) append_macro(Macros::Schema) do |macro| macro.call(...) end end |
#type(spec) ⇒ Macros::Key
Set type spec
192 193 194 195 |
# File 'lib/dry/schema/macros/dsl.rb', line 192 def type(spec) schema_dsl.set_type(name, spec) self end |
#value(*predicates, **predicate_opts) ⇒ Macros::Core
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/dry/schema/macros/dsl.rb', line 55 def value(*args, **opts, &block) if (type_spec_from_opts = opts[:type_spec]) append_macro(Macros::Value) do |macro| macro.call(*args, type_spec: type_spec_from_opts, **opts, &block) end else extract_type_spec(args) do |*predicates, type_spec:, type_rule:| append_macro(Macros::Value) do |macro| macro.call(*predicates, type_spec: type_spec, type_rule: type_rule, **opts, &block) end end end end |