Class: AbstractImporter::IdMap

Inherits:
Object
  • Object
show all
Defined in:
lib/abstract_importer/id_map.rb

Defined Under Namespace

Classes: IdNotMappedError

Instance Method Summary collapse

Constructor Details

#initializeIdMap

Returns a new instance of IdMap.



6
7
8
# File 'lib/abstract_importer/id_map.rb', line 6

def initialize
  @id_map = Hash.new { |hash, key| hash[key] = {} }
end

Instance Method Details

#<<(record) ⇒ Object



32
33
34
# File 'lib/abstract_importer/id_map.rb', line 32

def <<(record)
  register(record: record)
end

#apply!(legacy_id, depends_on) ⇒ Object

Raises:



49
50
51
52
53
54
# File 'lib/abstract_importer/id_map.rb', line 49

def apply!(legacy_id, depends_on)
  return nil if legacy_id.blank?
  id_map = @id_map[depends_on]
  raise IdNotMappedError.new unless id_map.key?(legacy_id)
  id_map[legacy_id]
end

#contains?(table_name, id) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/abstract_importer/id_map.rb', line 28

def contains?(table_name, id)
  @id_map[table_name.to_sym].key?(id)
end

#get(table_name) ⇒ Object Also known as: []



23
24
25
# File 'lib/abstract_importer/id_map.rb', line 23

def get(table_name)
  @id_map[table_name.to_sym].dup
end

#init(table_name, query) ⇒ Object



12
13
14
15
16
# File 'lib/abstract_importer/id_map.rb', line 12

def init(table_name, query)
  table_name = table_name.to_sym
  @id_map[table_name] = {}
  merge! table_name, query
end

#merge!(table_name, query) ⇒ Object



18
19
20
21
# File 'lib/abstract_importer/id_map.rb', line 18

def merge!(table_name, query)
  table_name = table_name.to_sym
  @id_map[table_name].merge! Hash[query.pluck(:legacy_id, :id)]
end

#register(options = {}) ⇒ Object



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

def register(options={})
  if options.key?(:record)
    record = options[:record]
    table_name, record_id, legacy_id = record.class.table_name, record.id, record.legacy_id
  end
  table_name = options[:table_name] if options.key?(:table_name)
  legacy_id = options[:legacy_id] if options.key?(:legacy_id)
  record_id = options[:record_id] if options.key?(:record_id)

  table_name = table_name.to_sym
  @id_map[table_name][legacy_id] = record_id
end