class HashSchema::Schema
Attributes
chain[R]
Public Class Methods
new(chain = nil)
click to toggle source
# File lib/hash_schema.rb, line 5 def initialize(chain = nil) @chain = chain end
Public Instance Methods
expectation()
click to toggle source
# File lib/hash_schema.rb, line 22 def expectation self.class.name.split('::').last.sub('Schema', '') end
interpret(data)
click to toggle source
# File lib/hash_schema.rb, line 9 def interpret(data) (@interpretations = []).tap do |_| interpret_errors(validate(data), 'root') end end
pretty_validate(data)
click to toggle source
# File lib/hash_schema.rb, line 17 def pretty_validate(data) require 'json' JSON.pretty_generate(validate(data)) end
Protected Instance Methods
error(data)
click to toggle source
# File lib/hash_schema.rb, line 28 def error(data) expect(expectation, data) end
expect(wanted, unwanted)
click to toggle source
# File lib/hash_schema.rb, line 32 def expect(wanted, unwanted) "Expected #{wanted} but got #{unwanted.inspect}" end
Private Instance Methods
format(error, name)
click to toggle source
# File lib/hash_schema.rb, line 58 def format(error, name) if name.kind_of?(Numeric) name = "##{name}" return name if error.is_a?(String) end case error when Hash "#{name}:{}" when Array "#{name}:[]" when String ".#{name}" end end
interpret_errors(errors, *prefixes)
click to toggle source
# File lib/hash_schema.rb, line 38 def interpret_errors(errors, *prefixes) *prefixes, prefix = prefixes prefixes <<= format(errors, prefix) case errors when Hash errors.each do |key, val| next if val.nil? interpret_errors(val, *prefixes, key) end when Array errors.each_with_index do |val, index| next if val.nil? interpret_errors(val, *prefixes, index) end when String @interpretations << (prefixes << errors).join(' > ') end end