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 |