class Definition::Types::Keys::Conformer
Attributes
definition[RW]
errors[RW]
value[RW]
Public Class Methods
new(definition, value)
click to toggle source
# File lib/definition/types/keys.rb, line 80 def initialize(definition, value) self.definition = definition self.value = value self.errors = [] end
Public Instance Methods
conform()
click to toggle source
# File lib/definition/types/keys.rb, line 86 def conform add_extra_key_errors unless definition.ignore_extra_keys add_missing_key_errors values = conform_all_keys ConformResult.new(values, errors: errors) end
Private Instance Methods
add_extra_key_errors()
click to toggle source
# File lib/definition/types/keys.rb, line 98 def add_extra_key_errors extra_keys = value.keys - all_keys return if extra_keys.empty? extra_keys.each do |key| errors.push(KeyConformError.new( definition, "#{definition.name} has extra key: #{key.inspect}", key: key, i18n_key: "keys.has_extra_key" )) end end
add_missing_key_errors()
click to toggle source
# File lib/definition/types/keys.rb, line 154 def add_missing_key_errors required_definition = Types::Include.new( definition.name, *required_keys ) result = required_definition.conform(value) return if result.passed? result.errors.each do |error| errors.push(missing_key_error(error.key)) end end
all_keys()
click to toggle source
# File lib/definition/types/keys.rb, line 119 def all_keys required_keys + optional_keys end
conform_all_keys()
click to toggle source
# File lib/definition/types/keys.rb, line 112 def conform_all_keys required_keys_values = conform_definitions(required_definitions) optional_keys_values = conform_definitions(optional_definitions) definition.defaults.merge(required_keys_values.merge!(optional_keys_values)) end
conform_definitions(keys)
click to toggle source
# File lib/definition/types/keys.rb, line 139 def conform_definitions(keys) keys.each_with_object({}) do |(key, key_definition), result_value| next unless value.key?(key) result = key_definition.conform(value[key]) result_value[key] = result.value next if result.passed? errors.push(KeyConformError.new(key_definition, "#{definition.name} fails validation for key #{key}", key: key, sub_errors: result.error_tree)) end end
missing_key_error(key)
click to toggle source
# File lib/definition/types/keys.rb, line 168 def missing_key_error(key) KeyConformError.new(definition, "#{definition.name} is missing key #{key.inspect}", key: key, i18n_key: "keys.has_missing_key") end
optional_definitions()
click to toggle source
# File lib/definition/types/keys.rb, line 131 def optional_definitions definition.optional_definitions end
optional_keys()
click to toggle source
# File lib/definition/types/keys.rb, line 135 def optional_keys optional_definitions.keys end
required_definitions()
click to toggle source
# File lib/definition/types/keys.rb, line 123 def required_definitions definition.required_definitions end
required_keys()
click to toggle source
# File lib/definition/types/keys.rb, line 127 def required_keys required_definitions.keys end