class Stronger::PropertySet

Attributes

config_props[R]
values[R]

Public Class Methods

new(given_values, config_props) click to toggle source

TODO: given_props should be called values

# File lib/stronger/property_set.rb, line 13
def initialize(given_values, config_props)
  @config_props = config_props
  @values = Hash.new

  given_values.each {|k,v| set(k, v) }
  validate_required_present!
end

Public Instance Methods

[](key) click to toggle source
# File lib/stronger/property_set.rb, line 29
def [](key)
  get_property(key)
  values[key] || (raise MissingProperty,
    "#{key} is not required and has not been set!")
end
[]=(key, value) click to toggle source
# File lib/stronger/property_set.rb, line 22
def []=(key, value)
  property = get_property(key)
  validate_type!(value, property)
  values[key] = value
end
Also aliased as: set
delete(name) click to toggle source
# File lib/stronger/property_set.rb, line 35
def delete(name)
  unless get_property(name).required?
    values.delete(name)
  else
    raise MissingProperty, "You can't delete required property #{name}!"
  end
end
set(key, value)
Alias for: []=

Protected Instance Methods

extra_property_message(extra_property_names) click to toggle source
# File lib/stronger/property_set.rb, line 71
def extra_property_message(extra_property_names)
  if extra_property_names.length > 1
    "#{extra_property_names} are not recognized property names!"
  else
    "#{extra_property_names.first} is not a valid property name!"
  end
end
get_property(name) click to toggle source
# File lib/stronger/property_set.rb, line 57
def get_property(name)
  property = config_props.find{|p| p.name == name}
  return property ||
    (raise UndefinedProperty, "#{name} is not a valid property!")
end
validate_required_present!() click to toggle source
# File lib/stronger/property_set.rb, line 63
def validate_required_present!
  config_props.select{|p| p.required?}.each do |property|
    values.fetch(property.name) do
      raise MissingProperty, "Property #{property.name} is required!"
    end
  end
end
validate_type!(value, property) click to toggle source
# File lib/stronger/property_set.rb, line 50
def validate_type!(value, property)
  unless value.is_a?(property.type)
    raise InvalidProperty,
      "Property #{property.name} should be a #{property.type}"
  end
end