Class: Array

Inherits:
Object show all
Defined in:
lib/key_value_ext.rb

Instance Method Summary collapse

Instance Method Details

#consolidateObject



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

#expandObject



35
36
37
38
39
40
# File 'lib/key_value_ext.rb', line 35

def expand
  acts_as_key_value!(:expand)
  self.inject([]) do |result, pair|
    result + pair.last.to_a.map{|val| [pair.first, val]}
  end
end

#flipObject



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_valueObject



47
48
49
50
# File 'lib/key_value_ext.rb', line 47

def invert_key_value
  acts_as_key_value!(:invert)
  self.expand.flip.consolidate
end

#keysObject



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_hashObject



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

#valuesObject



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