Class: PostgresUpsert::ModelToModelAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/postgres_upsert/model_to_model_adapter.rb

Instance Method Summary collapse

Constructor Details

#initialize(destination_model, source_model, options = {}) ⇒ ModelToModelAdapter

Returns a new instance of ModelToModelAdapter.



5
6
7
8
9
# File 'lib/postgres_upsert/model_to_model_adapter.rb', line 5

def initialize(destination_model, source_model, options = {})
  @destination_model = destination_model
  @source_model = source_model
  @options = options
end

Instance Method Details

#writeObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/postgres_upsert/model_to_model_adapter.rb', line 11

def write
    source_table = @source_model.table_name
    source_conn = @source_model.connection.raw_connection

    to_stdout_sql = "COPY #{source_table} TO STDOUT"
  
    csv_string = CSV.generate do |csv|
      csv << @source_model.column_names # CSV header row
      source_conn.copy_data(to_stdout_sql) do
        while (line = source_conn.get_copy_data) do
          csv << line.split("\t")
        end
      end
    end
    io = StringIO.new(csv_string)
    Writer.new(@destination_model, io, @options).write
end