Class: InjectiveMap

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/injective_map.rb

Instance Method Summary collapse

Constructor Details

#initializeInjectiveMap

Returns a new instance of InjectiveMap.



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

def initialize
  @forward_map = {}
  @inverse_map = {}
end

Instance Method Details

#add(from, to) ⇒ Object



10
11
12
13
14
# File 'lib/injective_map.rb', line 10

def add(from, to)
  raise 'Mapping is not one-to-one' if @forward_map.has_key?(from) || @inverse_map.has_key?(to)
  @forward_map[from] = to
  @inverse_map[to] = from
end

#each(&block) ⇒ Object



16
17
18
19
# File 'lib/injective_map.rb', line 16

def each(&block)
  return enum_for(:each) unless block_given?
  @forward_map.to_a.each(&block)
end

#forward(attr) ⇒ Object



25
26
27
# File 'lib/injective_map.rb', line 25

def forward(attr)
  @forward_map[attr]
end

#forward_image(attrs) ⇒ Object



21
22
23
# File 'lib/injective_map.rb', line 21

def forward_image(attrs)
  @forward_map.values_at(*attrs).compact
end

#inverse(attr) ⇒ Object



33
34
35
# File 'lib/injective_map.rb', line 33

def inverse(attr)
  @inverse_map[attr]
end

#inverse_image(attrs) ⇒ Object



29
30
31
# File 'lib/injective_map.rb', line 29

def inverse_image(attrs)
  @inverse_map.values_at(*attrs).compact
end