Class: InjectiveMap
Instance Method Summary collapse
- #add(from, to) ⇒ Object
- #each(&block) ⇒ Object
- #forward(attr) ⇒ Object
- #forward_image(attrs) ⇒ Object
-
#initialize ⇒ InjectiveMap
constructor
A new instance of InjectiveMap.
- #inverse(attr) ⇒ Object
- #inverse_image(attrs) ⇒ Object
Constructor Details
#initialize ⇒ InjectiveMap
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 |