class HashSchema::OrSchema
Public Class Methods
new(*schemas)
click to toggle source
# File lib/hash_schema.rb, line 84 def initialize(*schemas) @chain = schemas end
Public Instance Methods
expectation()
click to toggle source
# File lib/hash_schema.rb, line 104 def expectation *names, name = chain.map(&:expectation) names.join(', ') << " or #{name}" end
validate(data)
click to toggle source
# File lib/hash_schema.rb, line 88 def validate(data) empty_error = true last_error = nil chain.each do |schema| next unless schema_matches_data_type(schema, data) last_error = schema.validate(data) empty_error = recursive_empty_error?(last_error) break if empty_error end if empty_error last_error else error(data) end end
Private Instance Methods
recursive_empty_error?(error)
click to toggle source
# File lib/hash_schema.rb, line 111 def recursive_empty_error?(error) case error when NilClass true when String false when Hash, Array recursive_flat_error_values(error).empty? else false end end
recursive_flat_error_values(error_object)
click to toggle source
# File lib/hash_schema.rb, line 135 def recursive_flat_error_values(error_object) if error_object.is_a? Hash error_object.values.flat_map do |value| recursive_flat_error_values(value) end.compact elsif error_object.is_a? Array error_object.flat_map do |value| recursive_flat_error_values(value) end.compact else error_object end end
schema_matches_data_type(schema, data)
click to toggle source
# File lib/hash_schema.rb, line 124 def schema_matches_data_type(schema, data) case schema when ArraySchema data.is_a? Array when HashSchema data.is_a? Hash else true end end