Class: Hashie::Dash
- Includes:
- PrettyInspect
- Defined in:
- lib/hashie/dash.rb
Overview
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.
Class Method Summary collapse
-
.defaults ⇒ Object
The default values that have been set for this Dash.
-
.properties ⇒ Object
Get a String array of the currently defined properties on this Dash.
-
.property(property_name, options = {}) ⇒ Object
Defines a property on the Dash.
-
.property?(prop) ⇒ Boolean
Check to see if the specified property has already been defined.
Instance Method Summary collapse
-
#[](property) ⇒ Object
Retrieve a value from the Dash (will return the property’s default value if it hasn’t been set).
-
#[]=(property, value) ⇒ Object
Set a value on the Dash in a Hash-like way.
-
#initialize(attributes = {}) ⇒ Dash
constructor
You may initialize a Dash with an attributes hash just like you would many other kinds of data objects.
Methods included from PrettyInspect
Methods included from HashExtensions
#hashie_stringify_keys, #hashie_stringify_keys!, included, #to_mash
Constructor Details
#initialize(attributes = {}) ⇒ Dash
You may initialize a Dash with an attributes hash just like you would many other kinds of data objects.
62 63 64 65 66 67 68 69 70 |
# File 'lib/hashie/dash.rb', line 62 def initialize(attributes = {}) self.class.properties.each do |prop| self.send("#{prop}=", self.class.defaults[prop.to_sym]) end attributes.each_pair do |att, value| self.send("#{att}=", value) end end |
Class Method Details
.defaults ⇒ Object
The default values that have been set for this Dash
56 57 58 |
# File 'lib/hashie/dash.rb', line 56 def self.defaults @defaults end |
.properties ⇒ Object
Get a String array of the currently defined properties on this Dash.
45 46 47 |
# File 'lib/hashie/dash.rb', line 45 def self.properties @properties.collect{|p| p.to_s} end |
.property(property_name, options = {}) ⇒ Object
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.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/hashie/dash.rb', line 26 def self.property(property_name, = {}) property_name = property_name.to_sym (@properties ||= []) << property_name (@defaults ||= {})[property_name] = .delete(:default) class_eval <<-RUBY def #{property_name} self[:#{property_name}] end def #{property_name}=(val) self[:#{property_name}] = val end RUBY end |
.property?(prop) ⇒ Boolean
Check to see if the specified property has already been defined.
51 52 53 |
# File 'lib/hashie/dash.rb', line 51 def self.property?(prop) properties.include?(prop.to_s) end |
Instance Method Details
#[](property) ⇒ Object
Retrieve a value from the Dash (will return the property’s default value if it hasn’t been set).
74 75 76 |
# File 'lib/hashie/dash.rb', line 74 def [](property) super(property.to_sym) if property_exists? property end |
#[]=(property, value) ⇒ Object
Set a value on the Dash in a Hash-like way. Only works on pre-existing properties.
80 81 82 |
# File 'lib/hashie/dash.rb', line 80 def []=(property, value) super if property_exists? property end |