class Mementus::Model::Validator

Checks values plugged into each slot and runs any required validations (validations not yet implemented).

Current design raises errors rather than returns a boolean result.

Public Class Methods

new(fields_spec) click to toggle source

@param fields_spec [Hash] defines the slots in the schema to validate against

# File lib/mementus/model/validator.rb, line 9
def initialize(fields_spec)
  @spec = fields_spec
end

Public Instance Methods

check(fields) click to toggle source

Checks a given set of fields to see if they match the specification.

Raises an error when the given fields are invalid.

# File lib/mementus/model/validator.rb, line 16
def check(fields)
  missing_fields = @spec.keys.difference(fields.keys)

  if missing_fields.any?
    missing_fields.each do |field|
      raise "wrong number of args" unless @spec[field].eql?(Type::Any)
    end
  end

  mismatching_fields = fields.keys.difference(@spec.keys)

  raise "key does not exist" if mismatching_fields.any?

  fields.each do |(field, value)|
    raise "wrong data type" unless value.is_a?(@spec[field]) || @spec[field].eql?(Type::Any)
  end

  true
end