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