Class: Dry::Validation::Result
- Inherits:
-
Object
- Object
- Dry::Validation::Result
- Includes:
- Monads::Result::Mixin, Hints::ResultExtensions
- Defined in:
- lib/dry/validation/result.rb,
lib/dry/validation/extensions/monads.rb
Overview
Monad extension for contract results
Instance Attribute Summary collapse
-
#context ⇒ Concurrent::Map
readonly
Context that’s shared between rules.
-
#options ⇒ Hash
readonly
private
Result options.
-
#schema_result ⇒ Dry::Schema::Result
readonly
private
Result from contract’s schema.
Class Method Summary collapse
-
.new(schema_result, context = ::Concurrent::Map.new, options = EMPTY_HASH) {|result| ... } ⇒ Object
private
Build a new result.
Instance Method Summary collapse
-
#[](key) ⇒ Object
Read a value under provided key.
-
#add_error(error) ⇒ Object
private
Add a new error for the provided key.
-
#base_error?(key) ⇒ Boolean
private
Check if there’s any error for the provided key.
-
#base_rule_error? ⇒ Boolean
private
Check if the result contains any base rule errors.
-
#deconstruct ⇒ Object
private
Pattern matching.
-
#deconstruct_keys(keys) ⇒ Object
private
Pattern matching.
-
#error?(key) ⇒ Boolean
Check if values include an error for the provided key.
-
#errors(new_options = EMPTY_HASH) ⇒ MessageSet
Get error set.
-
#failure? ⇒ Bool
Check if result is not successful.
-
#freeze ⇒ Object
private
Freeze result and its error set.
-
#hints(new_options = EMPTY_HASH) ⇒ MessageSet
included
from Hints::ResultExtensions
Return hint messages.
-
#initialize(schema_result, context, options) ⇒ Result
constructor
private
Initialize a new result.
-
#inspect ⇒ Object
Return a string representation.
-
#key?(key) ⇒ Bool
Check if a key was set.
-
#messages(new_options = EMPTY_HASH) ⇒ MessageSet
included
from Hints::ResultExtensions
Return errors and hints.
-
#rule_error?(key) ⇒ Boolean
private
Check if the rules includes an error for the provided key.
-
#schema_error?(key) ⇒ Boolean
private
Check if the base schema (without rules) includes an error for the provided key.
-
#success? ⇒ Bool
Check if result is successful.
-
#to_h ⇒ Object
Coerce to a hash.
-
#to_monad ⇒ Dry::Monads::Result
Returns a result monad.
-
#values ⇒ Values
Return values wrapper with the input processed by schema.
Constructor Details
#initialize(schema_result, context, options) ⇒ Result
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.
Initialize a new result
53 54 55 56 57 58 |
# File 'lib/dry/validation/result.rb', line 53 def initialize(schema_result, context, ) @schema_result = schema_result @context = context @options = @errors = initialize_errors end |
Instance Attribute Details
#context ⇒ Concurrent::Map (readonly)
Context that’s shared between rules
34 35 36 |
# File 'lib/dry/validation/result.rb', line 34 def context @context end |
#options ⇒ Hash (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.
Result options
48 49 50 |
# File 'lib/dry/validation/result.rb', line 48 def @options end |
#schema_result ⇒ Dry::Schema::Result (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.
Result from contract’s schema
41 42 43 |
# File 'lib/dry/validation/result.rb', line 41 def schema_result @schema_result end |
Class Method Details
.new(schema_result, context = ::Concurrent::Map.new, options = EMPTY_HASH) {|result| ... } ⇒ 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.
Build a new result
23 24 25 26 27 |
# File 'lib/dry/validation/result.rb', line 23 def self.new(schema_result, context = ::Concurrent::Map.new, = EMPTY_HASH) result = super yield(result) if block_given? result.freeze end |
Instance Method Details
#[](key) ⇒ Object
Read a value under provided key
161 162 163 |
# File 'lib/dry/validation/result.rb', line 161 def [](key) values[key] end |
#add_error(error) ⇒ 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.
Add a new error for the provided key
149 150 151 152 |
# File 'lib/dry/validation/result.rb', line 149 def add_error(error) @errors.add(error) self end |
#base_error?(key) ⇒ 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.
Check if there’s any error for the provided key
This does not consider errors from the nested values
135 136 137 138 139 140 141 142 143 144 |
# File 'lib/dry/validation/result.rb', line 135 def base_error?(key) schema_result.errors.any? { |error| key_path = Schema::Path[key] err_path = Schema::Path[error.path] next unless key_path.same_root?(err_path) key_path == err_path } end |
#base_rule_error? ⇒ 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.
Check if the result contains any base rule errors
126 127 128 |
# File 'lib/dry/validation/result.rb', line 126 def base_rule_error? !errors.filter(:base?).empty? end |
#deconstruct ⇒ 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.
Pattern matching
214 215 216 |
# File 'lib/dry/validation/result.rb', line 214 def deconstruct [values, context.each.to_h] end |
#deconstruct_keys(keys) ⇒ 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.
Pattern matching
207 208 209 |
# File 'lib/dry/validation/result.rb', line 207 def deconstruct_keys(keys) values.deconstruct_keys(keys) end |
#error?(key) ⇒ Boolean
Check if values include an error for the provided key
105 106 107 |
# File 'lib/dry/validation/result.rb', line 105 def error?(key) errors.any? { |msg| Schema::Path[msg.path].include?(Schema::Path[key]) } end |
#errors(new_options = EMPTY_HASH) ⇒ MessageSet
Get error set
80 81 82 |
# File 'lib/dry/validation/result.rb', line 80 def errors( = EMPTY_HASH) .empty? ? @errors : @errors.with(schema_errors(), ) end |
#failure? ⇒ Bool
Check if result is not successful
98 99 100 |
# File 'lib/dry/validation/result.rb', line 98 def failure? !success? end |
#freeze ⇒ 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.
Freeze result and its error set
197 198 199 200 201 |
# File 'lib/dry/validation/result.rb', line 197 def freeze values.freeze errors.freeze super end |
#hints(new_options = EMPTY_HASH) ⇒ MessageSet Originally defined in module Hints::ResultExtensions
Return hint messages
#inspect ⇒ Object
Return a string representation
186 187 188 189 190 191 192 |
# File 'lib/dry/validation/result.rb', line 186 def inspect if context.empty? "#<#{self.class}#{to_h} errors=#{errors.to_h}>" else "#<#{self.class}#{to_h} errors=#{errors.to_h} context=#{context.each.to_h}>" end end |
#key?(key) ⇒ Bool
Check if a key was set
172 173 174 |
# File 'lib/dry/validation/result.rb', line 172 def key?(key) values.key?(key) end |
#messages(new_options = EMPTY_HASH) ⇒ MessageSet Originally defined in module Hints::ResultExtensions
Return errors and hints
#rule_error?(key) ⇒ 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.
Check if the rules includes an error for the provided key
119 120 121 |
# File 'lib/dry/validation/result.rb', line 119 def rule_error?(key) !schema_error?(key) && error?(key) end |
#schema_error?(key) ⇒ 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.
Check if the base schema (without rules) includes an error for the provided key
112 113 114 |
# File 'lib/dry/validation/result.rb', line 112 def schema_error?(key) schema_result.error?(key) end |
#success? ⇒ Bool
Check if result is successful
89 90 91 |
# File 'lib/dry/validation/result.rb', line 89 def success? @errors.empty? end |
#to_h ⇒ Object
Coerce to a hash
179 180 181 |
# File 'lib/dry/validation/result.rb', line 179 def to_h values.to_h end |
#to_monad ⇒ Dry::Monads::Result
Returns a result monad
29 30 31 |
# File 'lib/dry/validation/extensions/monads.rb', line 29 def to_monad success? ? Success(self) : Failure(self) end |