Class: Array
Instance Method Summary collapse
- #consolidate ⇒ Object
- #expand ⇒ Object
- #flip ⇒ Object
- #group_key_value(attribute, &block) ⇒ Object (also: #groupkeyvalue)
- #invert_key_value ⇒ Object
- #keys ⇒ Object
- #map_key_value(key = nil, &block) ⇒ Object (also: #mapkeyvalue)
- #to_hash ⇒ Object
- #values ⇒ Object
Instance Method Details
#consolidate ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/key_value_ext.rb', line 20 def consolidate acts_as_key_value!(:consolidate) keys, index = {}, -1 kv = self.dup kv.delete_if do |pair| index += 1 key_index = keys[pair.first] if key_index kv[key_index][1] = kv[key_index][1].to_a + pair.last.to_a else keys[pair.first] = index end key_index end end |
#expand ⇒ Object
35 36 37 38 39 40 |
# File 'lib/key_value_ext.rb', line 35 def acts_as_key_value!(:expand) self.inject([]) do |result, pair| result + pair.last.to_a.map{|val| [pair.first, val]} end end |
#flip ⇒ Object
42 43 44 45 |
# File 'lib/key_value_ext.rb', line 42 def flip acts_as_key_value!(:swap) self.map{|pair| [pair.last, pair.first]} end |
#group_key_value(attribute, &block) ⇒ Object Also known as: groupkeyvalue
16 17 18 |
# File 'lib/key_value_ext.rb', line 16 def group_key_value(attribute, &block) self.mapkeyvalue(attribute, &block).consolidate end |
#invert_key_value ⇒ Object
47 48 49 50 |
# File 'lib/key_value_ext.rb', line 47 def invert_key_value acts_as_key_value!(:invert) self..flip.consolidate end |
#keys ⇒ Object
52 53 54 55 |
# File 'lib/key_value_ext.rb', line 52 def keys acts_as_key_value!(:keys) self.map{|pair| pair.first } end |
#map_key_value(key = nil, &block) ⇒ Object Also known as: mapkeyvalue
8 9 10 |
# File 'lib/key_value_ext.rb', line 8 def map_key_value(key=nil, &block) self.map{|elem| [(key.nil? ? elem : elem.__send__(key.to_sym)), (block_given? ? block.call(elem) : elem)] } end |
#to_hash ⇒ Object
12 13 14 15 |
# File 'lib/key_value_ext.rb', line 12 def to_hash acts_as_key_value!(:to_hash) Hash[*self.consolidate.inject([]){|array, pair| array << pair.first << pair.last}] end |
#values ⇒ Object
56 57 58 59 |
# File 'lib/key_value_ext.rb', line 56 def values acts_as_key_value!(:values) self.map{|pair| pair.last } end |