csv2psql 0.0.4 → 0.0.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9f2aaa26746a4f627968755685e09b4de8eca7f
4
- data.tar.gz: 511b57240f7c0588d6c3d366e5f807229b0a6664
3
+ metadata.gz: fc32b319264dee9105efb40ad0091403d8ecd6e3
4
+ data.tar.gz: 6e20b3c108466bf8c171d417156cd25e17afe267
5
5
  SHA512:
6
- metadata.gz: 169542faf9dadeef826a4205cb2cc7f59d836cbd71b5bb9930d58e7e14d641c8bb2b5b77dd540854e2dbcf67bc4a9f9945e21df1c92fbdb937e81116d7e7762d
7
- data.tar.gz: eb29f050adcceace67b611cd6c65649b4e775a1e6a0ae921734922aad5fd752dbc79c31489709c8606fc32afa7d9ae1780e251ebe7a11ebeb75c8fe84d90e52c
6
+ metadata.gz: 8784cbe3de9285e9d78b81b8e69d628488839cafe6557cc8a0602d9c321f49b4fbd36037d01652e2fcceb5ac687bfc428005c34c76232850c61269a60728237f
7
+ data.tar.gz: 6657977d8372f140ee242be56889840ef97969d8a043244be4d721b8de3da2ac5d04e357fb913f20377d4eab121027c0af9cfe64984142eedad9951ace6880a0
data/README.md CHANGED
@@ -114,6 +114,18 @@ INSERT INTO pokus(id, firstname, lastname, address_street, address_city, address
114
114
  COMMIT;
115
115
  ```
116
116
 
117
+ **Convert CSV - Stream directly to Postgre client (psql)**
118
+
119
+ ```
120
+ csv2psql convert --create-table -t hokus data/sample.csv | psql -h apollocrawler.com -U datathon
121
+
122
+ BEGIN
123
+ CREATE TABLE
124
+ INSERT 0 1
125
+ INSERT 0 1
126
+ COMMIT
127
+ ```
128
+
117
129
  ## Contributing to csv2psql
118
130
 
119
131
  - Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
@@ -46,6 +46,16 @@ cmds = {
46
46
  'create-table' => {
47
47
  desc: 'Crate SQL Table before inserts',
48
48
  default_value: Csv2Psql::Processor::DEFAULT_OPTIONS['create-table']
49
+ },
50
+
51
+ 'drop-table' => {
52
+ desc: 'Drop SQL Table before inserts',
53
+ default_value: Csv2Psql::Processor::DEFAULT_OPTIONS['drop-table']
54
+ },
55
+
56
+ 'truncate-table' => {
57
+ desc: 'Truncate SQL Table before inserts',
58
+ default_value: Csv2Psql::Processor::DEFAULT_OPTIONS['truncate-table']
49
59
  }
50
60
  }
51
61
 
@@ -58,6 +68,8 @@ command :convert do |c|
58
68
  c.flag [:s, :separator], cmds[:s]
59
69
  c.switch [:transaction], cmds[:transaction]
60
70
  c.switch ['create-table'], cmds['create-table']
71
+ c.switch ['drop-table'], cmds['drop-table']
72
+ c.switch ['truncate-table'], cmds['truncate-table']
61
73
 
62
74
  c.action do |global_options, options, args|
63
75
  fail ArgumentError, 'No file to convert specified' if args.empty?
@@ -10,11 +10,12 @@ require_relative '../helpers/erb_helper'
10
10
 
11
11
  module Csv2Psql
12
12
  # Csv2Psql processor class
13
- class Processor
13
+ class Processor # rubocop:disable Metrics/ClassLength
14
14
  attr_reader :path
15
15
 
16
16
  DEFAULT_OPTIONS = {
17
17
  'create-table' => false,
18
+ 'drop-table' => false,
18
19
  delimiter: ',',
19
20
  header: true,
20
21
  separator: :auto,
@@ -23,9 +24,17 @@ module Csv2Psql
23
24
  quote: '"'
24
25
  }
25
26
 
27
+ TABLE_FUNCTIONS = {
28
+ 'drop-table' => :drop_table,
29
+ 'create-table' => :create_table,
30
+ 'truncate-table' => :truncate_table
31
+ }
32
+
26
33
  BASE_DIR = File.join(File.dirname(__FILE__), '..', '..', '..')
27
34
  TEMPLATE_DIR = File.join(BASE_DIR, 'templates')
28
35
  CREATE_TABLE_TEMPLATE = File.join(TEMPLATE_DIR, 'create_table.sql.erb')
36
+ DROP_TABLE_TEMPLATE = File.join(TEMPLATE_DIR, 'drop_table.sql.erb')
37
+ TRUNCATE_TABLE_TEMPLATE = File.join(TEMPLATE_DIR, 'truncate_table.sql.erb')
29
38
 
30
39
  def convert(paths, opts = {})
31
40
  with_paths(paths, opts) do |data|
@@ -33,19 +42,41 @@ module Csv2Psql
33
42
  end
34
43
  end
35
44
 
36
- def create_table(path, row, opts = {})
45
+ def create_erb_context(path, row, opts = {})
37
46
  header = get_header(row, opts)
38
47
  columns = get_columns(row, opts, header)
39
- erb = ErbHelper.new
40
- ctx = {
48
+ {
41
49
  path: path,
42
50
  header: header,
43
51
  columns: columns,
44
52
  table: opts[:table] || DEFAULT_OPTIONS[:table]
45
53
  }
54
+ end
55
+
56
+ def create_header(path, row, opts = {})
57
+ return unless @first_row
58
+
59
+ TABLE_FUNCTIONS.each do |k, v|
60
+ t = DEFAULT_OPTIONS[k]
61
+ t = opts[k] unless opts[k].nil?
62
+ puts send(v, path, row, opts) if t
63
+ end
64
+
65
+ @first_row = false
66
+ end
67
+
68
+ def create_table(path, row, opts = {})
69
+ ctx = create_erb_context(path, row, opts)
70
+ erb = ErbHelper.new
46
71
  erb.process(CREATE_TABLE_TEMPLATE, ctx)
47
72
  end
48
73
 
74
+ def drop_table(path, row, opts = {})
75
+ ctx = create_erb_context(path, row, opts)
76
+ erb = ErbHelper.new
77
+ erb.process(DROP_TABLE_TEMPLATE, ctx)
78
+ end
79
+
49
80
  def format_row(row, opts = {})
50
81
  header = get_header(row, opts)
51
82
  columns = get_columns(row, opts, header).join(', ')
@@ -91,6 +122,12 @@ module Csv2Psql
91
122
  header_column.downcase.gsub(/[^0-9a-z ]/i, '_')
92
123
  end
93
124
 
125
+ def truncate_table(path, row, opts = {})
126
+ ctx = create_erb_context(path, row, opts)
127
+ erb = ErbHelper.new
128
+ erb.process(TRUNCATE_TABLE_TEMPLATE, ctx)
129
+ end
130
+
94
131
  def with_path(path, opts = {}, &block)
95
132
  puts 'BEGIN;' if opts[:transaction]
96
133
  csv_opts = merge_csv_options(opts)
@@ -111,13 +148,9 @@ module Csv2Psql
111
148
  end
112
149
 
113
150
  def with_row(path, row, opts = {}, &block)
151
+ create_header(path, row, opts)
152
+
114
153
  args = { path: path, row: row }
115
- if @first_row
116
- ct = DEFAULT_OPTIONS['create-table']
117
- ct = opts['create-table'] unless opts['create-table'].nil?
118
- puts create_table(path, row, opts) if ct
119
- @first_row = false
120
- end
121
154
  block.call(args) if block_given?
122
155
  end
123
156
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Csv2Psql module
4
4
  module Csv2Psql
5
- VERSION = '0.0.4'
5
+ VERSION = '0.0.5'
6
6
  end
@@ -1,7 +1,3 @@
1
- -- Table: <%= ctx[:table] %>
2
-
3
- -- DROP TABLE <%= ctx[:table] %>;
4
-
5
1
  CREATE TABLE <%= ctx[:table] %>
6
2
  (
7
3
  <% ctx[:columns].each_with_index do |item, index| %>
@@ -0,0 +1,2 @@
1
+ DROP TABLE IF EXISTS <%= ctx[:table] %>;
2
+
@@ -0,0 +1,2 @@
1
+ TRUNCATE <%= ctx[:table] %>;
2
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv2psql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Korcak
@@ -207,6 +207,8 @@ files:
207
207
  - lib/csv2psql/version.rb
208
208
  - spec/spec_helper.rb
209
209
  - templates/create_table.sql.erb
210
+ - templates/drop_table.sql.erb
211
+ - templates/truncate_table.sql.erb
210
212
  homepage: https://github.com/korczis/csv2psql
211
213
  licenses:
212
214
  - MIT