Class: ActiveRecordGraphExtractor::PrimaryKeyMapper

Inherits:
Object
  • Object
show all
Defined in:
lib/activerecord_graph_extractor/primary_key_mapper.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(strategy = :generate_new) ⇒ PrimaryKeyMapper

Returns a new instance of PrimaryKeyMapper.



7
8
9
10
11
12
13
# File 'lib/activerecord_graph_extractor/primary_key_mapper.rb', line 7

def initialize(strategy = :generate_new)
  unless [:preserve_original, :generate_new].include?(strategy)
    raise ArgumentError, "Invalid strategy: #{strategy}. Must be :preserve_original or :generate_new"
  end
  @strategy = strategy
  @mappings = {}
end

Instance Attribute Details

#strategyObject (readonly)

Returns the value of attribute strategy.



5
6
7
# File 'lib/activerecord_graph_extractor/primary_key_mapper.rb', line 5

def strategy
  @strategy
end

Instance Method Details

#add_mapping(model_name, original_id, new_id) ⇒ Object



15
16
17
18
19
# File 'lib/activerecord_graph_extractor/primary_key_mapper.rb', line 15

def add_mapping(model_name, original_id, new_id)
  model_key = model_name.to_s
  @mappings[model_key] ||= {}
  @mappings[model_key][original_id] = new_id
end

#get_all_mappingsObject



37
38
39
# File 'lib/activerecord_graph_extractor/primary_key_mapper.rb', line 37

def get_all_mappings
  @mappings.dup
end

#get_mapping(model_name, original_id) ⇒ Object



21
22
23
24
# File 'lib/activerecord_graph_extractor/primary_key_mapper.rb', line 21

def get_mapping(model_name, original_id)
  model_key = model_name.to_s
  @mappings.dig(model_key, original_id)
end

#map_foreign_key(column_name, original_value) ⇒ Object



26
27
28
29
30
31
32
33
34
35
# File 'lib/activerecord_graph_extractor/primary_key_mapper.rb', line 26

def map_foreign_key(column_name, original_value)
  return original_value if original_value.nil?

  # Try to infer the model name from the foreign key column
  model_name = infer_model_name(column_name)
  return original_value unless model_name

  # Look up the mapping
  get_mapping(model_name, original_value) || original_value
end

#should_preserve_primary_key?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/activerecord_graph_extractor/primary_key_mapper.rb', line 41

def should_preserve_primary_key?
  @strategy == :preserve_original
end