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