Module: E621::CsvImportable

Extended by:
T::Sig
Included in:
Artist, BulkUpdateRequest, Pool, Post, PostReplacement, PostVersion, Tag, TagAlias, TagImplication, WikiPage
Defined in:
lib/e621/csv_importable.rb

Instance Method Summary collapse

Instance Method Details

#import_from_csv(csv_path) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/e621/csv_importable.rb', line 21

def import_from_csv(csv_path)
  model = T.unsafe(self)
  csv_headers = File.open(csv_path, "rb", &:readline).chomp.split(",").map(&:strip)
  columns = csv_headers.map { |h| model.connection.quote_column_name(h) }.join(", ")

  count = 0
  raw = model.connection.raw_connection
  raw.copy_data("COPY #{model.quoted_table_name} (#{columns}) FROM STDIN WITH (FORMAT CSV)") do
    CSV.foreach(csv_path, headers: true) do |row|
      raw.put_copy_data(CSV.generate_line(T.cast(row, CSV::Row).fields))
      count += 1
    end
  end
  self.row_count = count
  count
end

#row_countObject



11
12
13
# File 'lib/e621/csv_importable.rb', line 11

def row_count
  E621::RowCount[T.unsafe(self).table_name.split(".").last]
end

#row_count=(count) ⇒ Object



16
17
18
# File 'lib/e621/csv_importable.rb', line 16

def row_count=(count)
  E621::RowCount.set(T.unsafe(self).table_name.split(".").last, count)
end