Sha256: 72112abe9c6f918342f25f608a3a5315dbc17a9342d1bfe8246ce9bd934f4947

Contents?: true

Size: 1.21 KB

Versions: 27

Compression:

Stored size: 1.21 KB

Contents

require 'csv'

module BridgeCache::Plugins
  class CSVDump

    MAX_ROW_INTERVAL = 5000

    def self.dump_to_table(clazz, file_path)
      count = 1
      total = 0
      rows = []
      CSV.foreach(file_path, headers: true) do |row|
        total += 1
      end
      CSV.foreach(file_path, headers: true) do |row|
        if count < MAX_ROW_INTERVAL
          rows << initialze_row(clazz, row)
        end
        if count % MAX_ROW_INTERVAL == 0 || count == total
          dump_rows(clazz, rows)
          count = 0
          rows = []
        end
        count += 1
      end
    end

    def self.dump_row(clazz, row)
      instance = initialze_row(clazz, row)
      dump_rows(clazz, [instance])
    end

    private

    def self.initialze_row(clazz, row)
      instance = clazz.find_or_create_by(bridge_id: row['id'])
      instance.assign_attributes(remove_bad_columns(clazz, BridgeCache::Plugins::DataTransform::set_bridge_id(row).to_h))
      instance
    end

    def self.dump_rows(clazz, rows)
      rows.each do |row|
        row.save! if row.changed?
      end
    end

    def self.remove_bad_columns(clazz, row)
      row = row.delete_if {|key, value| !clazz.column_names.include?(key)}
      row
    end

  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
bridge_cache-0.2.8 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.2.7 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.2.6 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.2.5 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.2.4 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.2.3 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.2.2 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.2.1 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.2.0 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.1.0 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.23 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.22 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.21 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.20 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.19 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.18 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.17 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.16 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.14 app/lib/bridge_cache/plugins/csv_dump.rb
bridge_cache-0.0.13 app/lib/bridge_cache/plugins/csv_dump.rb