Class: MultiKeyHash

Inherits:
Object
  • Object
show all
Defined in:
lib/multi_key_hash.rb,
lib/multi_key_hash/version.rb

Constant Summary collapse

VERSION =
'0.1.1'

Instance Method Summary collapse

Constructor Details

#initialize(values = nil) ⇒ MultiKeyHash



5
6
7
8
9
# File 'lib/multi_key_hash.rb', line 5

def initialize(values = nil)
  @next_key = 1
  @outer = @inner = {}
  order_values(values)
end

Instance Method Details

#[](outer_key) ⇒ Object



11
12
13
# File 'lib/multi_key_hash.rb', line 11

def [](outer_key)
  @outer[outer_key].nil? ? nil : @inner[@outer[outer_key]]
end

#[]=(outer_key, new_value) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/multi_key_hash.rb', line 15

def []=(outer_key, new_value)
if outer_key.is_a?(Array) && !outer_key.empty?
  order_values(outer_key, new_value)
else
  inner_key = @inner.select do |_, existing|
    existing == new_value
  end.map do |key, _|
    key
  end.first

  if inner_key
    @outer[outer_key] = inner_key
  else
    remove_hex_key(outer_key)
    uniq_key = generate_uniq
    @outer[outer_key] = uniq_key
    @inner[uniq_key] = new_value
    @next_key += 1
  end
end
end

#delete(key) ⇒ Object



50
51
52
53
# File 'lib/multi_key_hash.rb', line 50

def delete(key)
  remove_hex_key(key)
  delete_key(key)
end

#to_hObject



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/multi_key_hash.rb', line 37

def to_h
converted = {}
@inner.each do |i_key, i_value|
  @outer.each do |o_key, o_value|
    if i_value == o_key
      converted[i_key] = o_value
    end
  end
end

converted
end