module Struct::Validatable::SubclassInstanceMethods

Public Class Methods

new(*values, **kw_args) click to toggle source
Calls superclass method
# File lib/struct/validatable/subclass_instance_methods.rb, line 9
def initialize(*values, **kw_args)
  super
  if kw_args.empty?
    values.each_with_index do |val, idx|
      self[idx] = val
    end
  else
    kw_args.each_pair do |kw, value|
      self[kw] = value
    end
  end
end

Public Instance Methods

[]=(key, value) click to toggle source

@param [Symbol, String, to_sym, Integer, to_int] key

Calls superclass method
# File lib/struct/validatable/subclass_instance_methods.rb, line 23
def []=(key, value)
  autonym = __class__.autonym_for_key(key)

  if __class__.with_adjuster?(autonym)
    begin
      value = instance_exec(value, &__class__.adjuster_for(autonym))
    rescue Exception
      raise Struct::Validatable::InvalidAdjustingError
    end
  end

  if __class__.with_condition?(autonym)
    unless _valid?(__class__.condition_for(autonym), value)
      raise Struct::Validatable::InvalidWritingError,
            "#{value.inspect} is deficient for #{key}(#{autonym})"
    end
  end

  super
end
valid?(key, value=self[key]) click to toggle source

@param [Symbol, String, to_sym, Integer, to_int] key

# File lib/struct/validatable/subclass_instance_methods.rb, line 45
def valid?(key, value=self[key])
  return true unless __class__.restrict?(key)

  begin
    _valid?(__class__.condition_for(key), value)
  rescue Exception
    false
  end
end

Private Instance Methods

_valid?(condition, value) click to toggle source

@param [Proc, Method, ===] condition

# File lib/struct/validatable/subclass_instance_methods.rb, line 58
def _valid?(condition, value)
  if case condition
     when Proc
       instance_exec(value, &condition)
     when Method
       condition.call(value)
     else
       condition === value
     end
    true
  else
    false
  end
end