class Cranium::ImportStrategy::Merge

Public Instance Methods

import_from(source_table) click to toggle source
# File lib/cranium/import_strategy/merge.rb, line 3
def import_from(source_table)
  @source_table = source_table

  update_existing_records
  import_new_records
  database[@source_table].count
end

Private Instance Methods

import_new_records() click to toggle source
# File lib/cranium/import_strategy/merge.rb, line 24
def import_new_records
  database.run database[target_table].insert_sql(target_fields,
                                                 database[@source_table].
                                                   left_outer_join(target_table, merge_fields.invert).
                                                   where(merge_fields_are_empty).
                                                   select(*source_fields).qualify)
end
merge_fields() click to toggle source
# File lib/cranium/import_strategy/merge.rb, line 34
def merge_fields
  Cranium::Sequel::Hash[import_definition.merge_fields]
end
merge_fields_are_empty() click to toggle source
# File lib/cranium/import_strategy/merge.rb, line 46
def merge_fields_are_empty
  Hash[merge_fields.qualified_values(target_table).zip Array.new(merge_fields.count, nil)]
end
not_merge_fields() click to toggle source
# File lib/cranium/import_strategy/merge.rb, line 40
def not_merge_fields
  Cranium::Sequel::Hash[import_definition.field_associations.reject { |key, _| merge_fields.keys.include? key }]
end
update_existing_records() click to toggle source
# File lib/cranium/import_strategy/merge.rb, line 15
def update_existing_records
  database.
    from(Sequel.as(target_table, "target"), Sequel.as(@source_table, "source")).
    where(merge_fields.qualify keys_with: :source, values_with: :target).
    update(not_merge_fields.qualify(keys_with: :source).invert)
end