class HashSchema::HashSchema
Public Class Methods
new(strict: false, schema_hash: {}, **keywords)
click to toggle source
# File lib/hash_schema.rb, line 199 def initialize(strict: false, schema_hash: {}, **keywords) @chain = schema_hash.merge(keywords) @strict = strict end
Public Instance Methods
unexpected(key)
click to toggle source
# File lib/hash_schema.rb, line 220 def unexpected(key) "Unexpected key: #{key.to_s.inspect}" end
validate(hash)
click to toggle source
# File lib/hash_schema.rb, line 204 def validate(hash) return error(hash) unless hash.is_a?(Hash) {}.tap do |output| chain.each do |key, schema| val = hash.fetch(key, hash.fetch(key.to_s, Void.new)) output[key] = if schema.kind_of?(Schema) schema.validate(val) else schema == val ? nil : expect(schema.inspect, val) end end output.merge!((hash.keys - chain.keys).map { |k| [k, unexpected(k)] }.to_h) if @strict end end