Class: Eco::Data::Mapper

Inherits:
Object
  • Object
show all
Defined in:
lib/eco/data/mapper.rb

Instance Method Summary collapse

Constructor Details

#initialize(array_of_arrays = [], internal: :last) ⇒ Mapper

it expects [[v1a, v1b], [v2a, v2b] ...]



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/eco/data/mapper.rb', line 6

def initialize (array_of_arrays = [], internal: :last)
  @source = array_of_arrays

  if @source
    # internal should be always last in @source

    @source = @source.map { |a| a.reverse } unless internal == :last

    # first declarations take priority

    @by_external = @source.reverse.to_h
    @by_internal = @source.reverse.map do |pair|
      pair.reverse
    end.to_h
  end
end

Instance Method Details

#external?(value) ⇒ Boolean



33
34
35
36
# File 'lib/eco/data/mapper.rb', line 33

def external?(value)
  return true if !@source
  @by_external.key?(value)
end

#include?(value) ⇒ Boolean



38
39
40
41
# File 'lib/eco/data/mapper.rb', line 38

def include?(value)
  return true if !@source
  internal?(value) || external?(value)
end

#internal?(value) ⇒ Boolean



28
29
30
31
# File 'lib/eco/data/mapper.rb', line 28

def internal?(value)
  return true if !@source
  @by_internal.key?(value)
end

#list(type = :internal) ⇒ Object



21
22
23
24
25
26
# File 'lib/eco/data/mapper.rb', line 21

def list(type = :internal)
  return [] if !@source
  @source.map do |pair|
    type == :internal ? pair.last : pair.first
  end.uniq
end

#to_external(value) ⇒ Object



48
49
50
51
# File 'lib/eco/data/mapper.rb', line 48

def to_external(value)
  return value if !@source
  @by_internal[value]
end

#to_internal(value) ⇒ Object



43
44
45
46
# File 'lib/eco/data/mapper.rb', line 43

def to_internal(value)
  return value if !@source
  @by_external[value]
end