A Dash is a ‘defined’ or ‘discrete’ Hash, that is, a Hash that has a set of defined keys that are accessible (with optional defaults) and only those keys may be set or read.
Dashes are useful when you need to create a very simple lightweight data object that needs even fewer options and resources than something like a DataMapper resource.
It is preferrable to a Struct because of the in-class API for defining properties as well as per-property defaults.
The default values that have been set for this Dash
# File lib/hashie/dash.rb, line 63
63: def self.defaults
64: properties = {}
65: ancestors.each do |elder|
66: if elder.instance_variable_defined?("@defaults")
67: properties.merge! elder.instance_variable_get("@defaults")
68: end
69: end
70:
71: properties
72: end
You may initialize a Dash with an attributes hash just like you would many other kinds of data objects.
# File lib/hashie/dash.rb, line 76
76: def initialize(attributes = {})
77: self.class.properties.each do |prop|
78: self.send("#{prop}=", self.class.defaults[prop.to_sym])
79: end
80:
81: attributes.each_pair do |att, value|
82: self.send("#{att}=", value)
83: end
84: end
Get a String array of the currently defined properties on this Dash.
# File lib/hashie/dash.rb, line 45
45: def self.properties
46: properties = []
47: ancestors.each do |elder|
48: if elder.instance_variable_defined?("@properties")
49: properties << elder.instance_variable_get("@properties")
50: end
51: end
52:
53: properties.flatten.map{|p| p.to_s}
54: end
Defines a property on the Dash. Options are as follows:
:default - Specify a default value for this property, to be returned before a value is set on the property in a new Dash.
# File lib/hashie/dash.rb, line 26
26: def self.property(property_name, options = {})
27: property_name = property_name.to_sym
28:
29: (@properties ||= []) << property_name
30: (@defaults ||= {})[property_name] = options.delete(:default)
31:
32: class_eval def #{property_name} self[:#{property_name}] end def #{property_name}=(val) self[:#{property_name}] = val end
33: end
Retrieve a value from the Dash (will return the property’s default value if it hasn’t been set).
# File lib/hashie/dash.rb, line 88
88: def [](property)
89: super(property.to_sym) if property_exists? property
90: end
Set a value on the Dash in a Hash-like way. Only works on pre-existing properties.
# File lib/hashie/dash.rb, line 94
94: def []=(property, value)
95: super if property_exists? property
96: end
Raises an NoMethodError if the property doesn’t exist
# File lib/hashie/dash.rb, line 101
101: def property_exists?(property)
102: unless self.class.property?(property.to_sym)
103: raise NoMethodError, "The property '#{property}' is not defined for this Dash."
104: end
105: true
106: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.