Module: Gorillib::Hashlike::HashlikeViaAccessors
- Defined in:
- lib/gorillib/hashlike/hashlike_via_accessors.rb
Overview
Makes a Receiver thingie behave mostly like a hash.
By default, the hashlike methods iterate over the receiver attributes: instance #keys delegates to self.class.keys which calls receiver_attr_names. If you want to filter our add to the keys list, you can just override the class-level keys method (and call super, or not):
def self.keys
super + [:firstname, :lastname] - [:fullname]
end
in addition to the below, by including Enumerable, this also adds
:each_cons, :each_entry, :each_slice, :each_with_index, :each_with_object,
:map, :collect, :collect_concat, :entries, :to_a, :flat_map, :inject, :reduce,
:group_by, :chunk, :cycle, :partition, :reverse_each, :slice_before, :drop,
:drop_while, :take, :take_while, :detect, :find, :find_all, :find_index, :grep,
:all?, :any?, :none?, :one?, :first, :count, :zip :max, :max_by, :min, :min_by,
:minmax, :minmax_by, :sort, :sort_by
As opposed to hash, does not define
default, default=, default_proc, default_proc=, shift, flatten, compare_by_identity compare_by_identity? rehash
Instance Method Summary collapse
-
#[](key) ⇒ Object
Hashlike#[].
-
#[]=(key, val) ⇒ Object
Hashlike#[]= Hashlike#store.
-
#delete(key, &block) ⇒ Object
Hashlike#delete.
-
#keys ⇒ Array
Hashlike#keys.
Instance Method Details
#[](key) ⇒ Object
Hashlike#[]
Element Reference -- Retrieves the value stored for +key+.
In a normal hash, a default value can be set; none is provided here.
Delegates to self.send(key)
48 49 50 51 |
# File 'lib/gorillib/hashlike/hashlike_via_accessors.rb', line 48 def [](key) key = convert_key(key) self.send(key) end |
#[]=(key, val) ⇒ Object
Hashlike#[]= Hashlike#store
Element Assignment -- Associates the value given by +val+ with the key given by +key+.
key should not have its value changed while it is in use as a key. In a normal hash, a String passed as a key will be duplicated and frozen. No such guarantee is provided here
Delegates to self.send("key=", val)
78 79 80 81 |
# File 'lib/gorillib/hashlike/hashlike_via_accessors.rb', line 78 def []=(key, val) key = convert_key(key) self.send("#{key}=", val) end |
#hsh.delete(key) ⇒ Object, Nil #hsh.delete(key) {|Object| ... } ⇒ Object, Nil
Hashlike#delete
Deletes and returns the value from +hsh+ whose key is equal to +key+. If the optional code block is given and the key is not found, pass in the key and return the result of +block+.
In a normal hash, a default value can be set; none is provided here.
108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/gorillib/hashlike/hashlike_via_accessors.rb', line 108 def delete(key, &block) key = convert_key(key) if has_key?(key) val = self[key] self.send(:remove_instance_variable, "@#{key}") val elsif block_given? block.call(key) else nil end end |
#keys ⇒ Array
Hashlike#keys
Returns a new array populated with the keys from this hashlike.
157 158 159 |
# File 'lib/gorillib/hashlike/hashlike_via_accessors.rb', line 157 def keys instance_variables.map{|s| convert_key(s[1..-1]) } end |