Sha256: 8341151cafb5f4eb599daee8920322dc575eb63d7c227e66e6f35ff26cbf700c

Contents?: true

Size: 876 Bytes

Versions: 13

Compression:

Stored size: 876 Bytes

Contents

class Cranium::ImportStrategy::DeleteInsert < Cranium::ImportStrategy::Base

  def import_from(source_table)
    @source_table = source_table

    delete_existing_records
    import_new_records
    database[@source_table].count
  end



  private

  def delete_existing_records
    database.
        from(Sequel.as(target_table, "target"), Sequel.as(@source_table, "source")).
        where(delete_by_fields.qualify keys_with: :source, values_with: :target).
        delete
  end



  def import_new_records
    database.run database[target_table].insert_sql(target_fields, database[@source_table].select(*source_fields))
  end



  def delete_by_fields
    Cranium::Sequel::Hash[delete_field_mapping]
  end



  def delete_field_mapping
    import_definition.field_associations.select { |_, target_field| import_definition.delete_insert_on.include? target_field }
  end

end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
cranium-0.8.1 lib/cranium/import_strategy/delete_insert.rb
cranium-0.8 lib/cranium/import_strategy/delete_insert.rb
cranium-0.7 lib/cranium/import_strategy/delete_insert.rb
cranium-0.6.1 lib/cranium/import_strategy/delete_insert.rb
cranium-0.5 lib/cranium/import_strategy/delete_insert.rb
cranium-0.4.3 lib/cranium/import_strategy/delete_insert.rb
cranium-0.4.2 lib/cranium/import_strategy/delete_insert.rb
cranium-0.4.1 lib/cranium/import_strategy/delete_insert.rb
cranium-0.4 lib/cranium/import_strategy/delete_insert.rb
cranium-0.3.1 lib/cranium/import_strategy/delete_insert.rb
cranium-0.3.0 lib/cranium/import_strategy/delete_insert.rb
cranium-0.2.1 lib/cranium/import_strategy/delete_insert.rb
cranium-0.2.0 lib/cranium/import_strategy/delete_insert.rb