idata 0.0.5 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/iload +20 -25
  3. data/lib/idata/version.rb +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b369eb5215e497e66d4364240f9fb7de6da8c62
4
- data.tar.gz: 37d2fdc825b364a26f48df4172f1546be61ce301
3
+ metadata.gz: 819b2d2fdfbb0c55e7e0fad65c6bbdb28c5e5b5d
4
+ data.tar.gz: 553beaa45ad12795547c87902c18d6d44da58a34
5
5
  SHA512:
6
- metadata.gz: 2ee2a70707b45a9d1e163fd735ad88b47bc37c117039e4b1686b669352a75b420569a8b3f72977c567e13ecc5e301f0addb5c3b694f592dc072e194a249e95b3
7
- data.tar.gz: e0ce31954906f7c468ce945e83165ab6091fe77eb657dc4c0cc11b0b443cf5e089ae46a762b19321328abdf8540b4650d4e742a3d435b41d000f499513ee53e3
6
+ metadata.gz: c3e289852ac767f0948e5f835cb0bf937309699c9e6d04ac50386888327de5abc1cfe8465a8ff403f5695bced3ad45e7b5e06f4bbdf91b16a4f4fc2d55c0133f
7
+ data.tar.gz: 5fad9fdd602ad71e584e98b0dea174dfa74f9027be7d3d7cac00be55f7f6c231218a7480bcfdbfb948e7b9fdc228db5bb083e13be193b974b8392f2d73d010ed
data/bin/iload CHANGED
@@ -19,14 +19,6 @@ POSTGRESQL_PORT = 5432
19
19
  CSV_DEFAULT_DELIMITER = ','
20
20
  CSV_DEFAULT_QUOTE = '"'
21
21
 
22
- PG_TAB = "E'\t'"
23
- PG_BACKSPACE = "E'\b'"
24
-
25
- PG_CHAR_MAP = {
26
- "\t" => PG_TAB,
27
- "\b" => PG_BACKSPACE
28
- }
29
-
30
22
  $options = {}
31
23
  parser = OptionParser.new("", 24) do |opts|
32
24
  opts.banner = "\nProgram: Data Loader\nAuthor: MCKI\n\n"
@@ -195,8 +187,20 @@ class MyParser
195
187
  end
196
188
 
197
189
  def load_csv
198
- # Copy file to /tmp/ folder to prevent Permission Error
199
- FileUtils.cp $options[:input], $tmpfile
190
+ # Load CSV data from input file to a temp array
191
+ csv_data = []
192
+ CSV.foreach($options[:input], :col_sep => $options[:delim], :quote_char => $options[:quote]) do |csv|
193
+ csv_data << csv
194
+ end
195
+
196
+ # Serialize array into a new CSV (with standard delimiter, quote) for later use with PostgreSQL
197
+ CSV.open($tmpfile, "wb", :col_sep => CSV_DEFAULT_DELIMITER, :quote_char => CSV_DEFAULT_QUOTE) do |writer|
198
+ csv_data.each do |csv|
199
+ writer << csv
200
+ end
201
+ end
202
+
203
+ # Send to PostgreSQL
200
204
  create_table_from_csv($tmpfile)
201
205
  end
202
206
 
@@ -211,21 +215,21 @@ class MyParser
211
215
  headers.map!{|s| s.downcase.strip }
212
216
 
213
217
  # Write
214
- CSV.open($tmpfile, "wb", :col_sep => CSV_DEFAULT_DELIMITER) do |csv|
218
+ CSV.open($tmpfile, "wb", :col_sep => CSV_DEFAULT_DELIMITER, :quote_char => CSV_DEFAULT_QUOTE) do |csv|
215
219
  csv << headers
216
-
217
220
  data.each_with_index{|s, index|
218
221
  record = s.unpack(ranges).map{|e| e.strip}
219
222
  csv << record
220
223
  }
221
224
  end
222
-
225
+
226
+ # Send to PostgreSQL
223
227
  create_table_from_csv($tmpfile)
224
228
  end
225
229
 
226
230
  def create_table_from_csv(csv_path)
227
231
  # Get headers
228
- csv = CSV.open(csv_path, :headers => true, :col_sep => $options[:delim], quote_char: "\b")
232
+ csv = CSV.open(csv_path, :headers => true, :col_sep => CSV_DEFAULT_DELIMITER, :quote_char => CSV_DEFAULT_QUOTE)
229
233
 
230
234
  first = csv.first
231
235
  unless first
@@ -256,19 +260,10 @@ class MyParser
256
260
  create_table_sql = headers.map{|e| "\"#{e}\" text"}.join(",")
257
261
  create_table_sql = "create table if not exists #{$options[:table]}( id serial not null, #{create_table_sql} );"
258
262
  query(drop_table_sql, create_table_sql)
259
-
260
- # Dump data
261
- #pg_tab = "E'\t'" if $options[:delim] == "\t"
262
-
263
- tab = PG_CHAR_MAP[$options[:delim]]
264
- tab ||= "'#{$options[:delim]}'"
265
-
266
- quote = PG_CHAR_MAP[$options[:quote]]
267
- quote = "'#{$options[:quote]}'"
268
263
 
269
264
  insert_data_sql = headers.map{|e| "\"#{e}\""}.join(",")
270
- insert_data_sql = "COPY #{$options[:table]}( #{insert_data_sql} ) FROM '#{csv_path}' DELIMITER #{tab} CSV HEADER QUOTE #{quote};"
271
-
265
+ insert_data_sql = "COPY #{$options[:table]}( #{insert_data_sql} ) FROM '#{csv_path}' DELIMITER ',' CSV HEADER"
266
+
272
267
  # Change output file permission so that postgres user can read it
273
268
  begin
274
269
  FileUtils.chmod 0755, csv_path
data/lib/idata/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Idata
2
- VERSION = "0.0.5"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nghi Pham