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
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