csv_to_sqlite3 0.1.3 → 0.1.4

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
  SHA256:
3
- metadata.gz: 6054545a778a1f66aaf4f1a21d27a649495077eeb57156bc1c997fb35f4da2cd
4
- data.tar.gz: 806c76397accf1f4dd054e690ef033415d4fa8263bc8ca345057c116afdbe8e7
3
+ metadata.gz: 62ec616ffbe5c9315fdc7b3233707c31661a326e8768fea4f91b6328d0ce8b75
4
+ data.tar.gz: 4817fcd045944d23c5e38ba4ef8d0061c508857100361e495224d1ddfc065a67
5
5
  SHA512:
6
- metadata.gz: 82dea9f3753586ba249c11d820644086e44b8303333db6a06c381a02892d1f332c88f1031d084ac93c235757aa24dba8d7ddd72f3ac805a22f2501cb8507a53c
7
- data.tar.gz: 8f6623cb0bea64446b43ddc5421fd1fce24ef0c18413851ccc80c65ae5ca04dd6a734814276cb9b5d5960203cbda59d2306c399fb1a11cac4b732da9b2a9559e
6
+ metadata.gz: 83a35843d741b1b65eccd24a4582fb9591686a0227f6cea5f834595fde24b1574465c1a8c4611d305f06699001a3de23f60524c615e0ddc44e2f9c2c73961bce
7
+ data.tar.gz: d35d14cc2b8a0c0d9e788c49da08cd274a7053057b3b10c56bd6cc9077fc8f21d7623e34e357d3b814fdafe001ab33fb27d08fce9bf58e267422f5c7def2212d
data/Gemfile CHANGED
@@ -3,6 +3,6 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in csv_to_sqlite.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
7
6
  gem 'rspec', '~> 3.9'
8
7
  gem 'sqlite3', '~> 1.4', '>= 1.4.2'
8
+ gem 'tty-progressbar'
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- csv_to_sqlite3 (0.1.2)
4
+ csv_to_sqlite3 (0.1.3.4)
5
+ sqlite3 (~> 1.4, >= 1.4.2)
6
+ tty-progressbar
5
7
 
6
8
  GEM
7
9
  remote: https://rubygems.org/
8
10
  specs:
9
11
  diff-lcs (1.4.4)
10
- rake (12.3.3)
11
12
  rspec (3.9.0)
12
13
  rspec-core (~> 3.9.0)
13
14
  rspec-expectations (~> 3.9.0)
@@ -22,15 +23,24 @@ GEM
22
23
  rspec-support (~> 3.9.0)
23
24
  rspec-support (3.9.3)
24
25
  sqlite3 (1.4.2)
26
+ strings-ansi (0.1.0)
27
+ tty-cursor (0.7.1)
28
+ tty-progressbar (0.17.0)
29
+ strings-ansi (~> 0.1.0)
30
+ tty-cursor (~> 0.7)
31
+ tty-screen (~> 0.7)
32
+ unicode-display_width (~> 1.6)
33
+ tty-screen (0.8.1)
34
+ unicode-display_width (1.7.0)
25
35
 
26
36
  PLATFORMS
27
37
  ruby
28
38
 
29
39
  DEPENDENCIES
30
40
  csv_to_sqlite3!
31
- rake (~> 12.0)
32
41
  rspec (~> 3.9)
33
42
  sqlite3 (~> 1.4, >= 1.4.2)
43
+ tty-progressbar
34
44
 
35
45
  BUNDLED WITH
36
46
  2.1.4
data/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # CsvToSqlite3
2
2
 
3
3
  CsvToSqlite3 is a gem that aims to work as a executable like rake or bundler, it servs as a Sqlite3 database generator from csv files. It is used to create and insert all data from one or more csv files to the same Sqlite3 database.
4
+
4
5
  The ideia comes from a specific cenario when I needed to run complex sql queries on a huge database, and once I was afraid to run it directly in prolduction and it impacts in the operation I chose to run simples selects (select * from some_table when created_at > some_date) from each table used on my query, export to csv files than create a specific ruby script that create a sqlite3 database and run the inserts, thereby i can run any havy query on my local computer without generate any impact in the operation.
6
+
5
7
  Once this cenario is quite common I decided to rewrite the script to work with any csv file exported from any table.
6
8
 
7
9
  ## Installation
@@ -14,6 +16,10 @@ Installed with gem:
14
16
 
15
17
  Once the gem is installed it is aviable the command "csv_to_sqlite", to generate a new database you need to run on terminal "csv_to_sqlite path/to/file.csv'". It will create a file named data.sqlite3 and create a table with name equal to file name, case the table already exists it will only insert all data from this file.
16
18
 
19
+ $ csv_to_sqlite stores.csv
20
+
21
+ By running the command above it will be generated a database data.sqlite3 with a table named stores with all data included.
22
+
17
23
  ## Development
18
24
 
19
25
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,4 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'csv_to_sqlite'
4
- CsvToSqlite::CsvToSqlite.convert(ARGV[0])
@@ -25,4 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
26
  spec.executables << 'csv_to_sqlite'
27
27
  spec.require_paths = ["lib"]
28
+ spec.add_runtime_dependency 'tty-progressbar'
29
+ spec.add_runtime_dependency 'sqlite3', '~> 1.4', '>= 1.4.2'
30
+ spec.add_development_dependency 'rspec', '~> 3.9'
28
31
  end
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'csv_to_sqlite'
4
- CsvToSqlite::CsvToSQLite.new.convert(ARGV[0])
4
+
5
+ CsvToSqlite::CsvToSQLite.new(ARGV).run
6
+
@@ -0,0 +1,30 @@
1
+ module CsvToSqlite
2
+ class ArgumentHandlerService
3
+
4
+ def initialize argv
5
+ @argv = argv
6
+ end
7
+
8
+ def call
9
+ return empty if @argv.empty?
10
+ return help if @argv.include? "-h"
11
+ :convert
12
+ end
13
+
14
+ def help
15
+ puts "Run csv_lto_sqlite3 is easy!"
16
+ puts "To convert a csv file into a sqlite3 database you just need to run the follow command from the same directory of the csv file:"
17
+ puts "csv_to_sqlite your_csv_file.csv"
18
+ puts "==============================="
19
+ puts "-t <table-name> -> parameter used to set wich table will be created/used"
20
+ puts "Some customisations will be aviable on next versions :)"
21
+ nil
22
+ end
23
+
24
+ def empty
25
+ puts "Run 'csv_to_sqlite -h' to receive some help or csv_to_sqlite csv_file.csv to generate a SQLite3 database from a csv file."
26
+ nil
27
+ end
28
+
29
+ end
30
+ end
@@ -3,20 +3,46 @@ require_relative "./database"
3
3
  require_relative "./csv_reader"
4
4
  require_relative "./sql/create_table"
5
5
  require_relative "./sql/insert"
6
+ require_relative "./argument_handler_service"
6
7
 
7
8
  module CsvToSqlite
8
9
  # class Error < StandardError; end
9
10
 
10
11
  class CsvToSQLite
11
12
 
13
+ def initialize argv
14
+ @args = argv
15
+ end
16
+
17
+ def run
18
+ method = CsvToSqlite::ArgumentHandlerService.new(@args).call
19
+ self.convert(@args.first) unless method.nil?
20
+ end
21
+
12
22
  def convert file_path
13
23
  connection = CsvToSqlite::Database.new().connect
14
24
  csv_table = CsvToSqlite::CsvReader.new(file_path).load_file
15
- table_name = file_path.split("/").last.split(".csv").first
16
25
  CsvToSqlite::SQL::CreateTable.new(name: table_name, csv_table: csv_table, connection: connection).run
17
26
  CsvToSqlite::SQL::Insert.new(name: table_name, csv_table: csv_table, connection: connection).run
18
27
  end
19
28
 
29
+ def table_name
30
+ if @args.include? "-t"
31
+ table_name_index = @args.find_index "-t"
32
+ return @args[table_name_index + 1]
33
+ else
34
+ return csv_file_name.split("/").last.split(".csv").first
35
+ end
36
+ end
37
+
38
+ def csv_file_name
39
+ file_name = nil
40
+ @args.each_with_index do |param, index|
41
+ file_name = param if param.include? ".csv"
42
+ end
43
+ file_name
44
+ end
45
+
20
46
  end
21
47
 
22
48
  end
@@ -1,3 +1,3 @@
1
1
  module CsvToSqlite
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -1,3 +1,5 @@
1
+ require "tty-progressbar"
2
+
1
3
  module CsvToSqlite::SQL
2
4
 
3
5
  class Insert
@@ -10,11 +12,14 @@ module CsvToSqlite::SQL
10
12
 
11
13
  def run
12
14
  columns = @csv_table.headers.sort
15
+ bar = TTY::ProgressBar.new("Inserting data [:bar] :percent", total: @csv_table.by_row.count)
13
16
  @csv_table.by_row.each do |row|
14
17
  values = columns.map { |column| row[column] }
15
18
  question_marks = ("?," * columns.size).chop!
16
19
  @connection.execute("INSERT INTO #{@name} (#{columns.join(',')}) VALUES (#{question_marks})", values)
20
+ bar.advance(1)
17
21
  end
22
+ bar.finish
18
23
  end
19
24
 
20
25
  end
metadata CHANGED
@@ -1,15 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_to_sqlite3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - joaofelipelopes
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-22 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2020-10-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tty-progressbar
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.4.2
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '1.4'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.4.2
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.9'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.9'
13
61
  description: Add the executable "csv_to_sqlite" to your terminal, wich is used to
14
62
  create a SQLite3 database with all data from a csv file by running "csv_to_sqlite
15
63
  file.csv". It was developed to be used as a command line.
@@ -28,12 +76,12 @@ files:
28
76
  - Gemfile.lock
29
77
  - LICENSE.txt
30
78
  - README.md
31
- - Rakefile
32
79
  - bin/console
33
80
  - bin/csv_to_sqlite
34
81
  - bin/setup
35
82
  - csv_to_sqlite3.gemspec
36
83
  - exe/csv_to_sqlite
84
+ - lib/argument_handler_service.rb
37
85
  - lib/csv_reader.rb
38
86
  - lib/csv_to_sqlite.rb
39
87
  - lib/csv_to_sqlite/version.rb
data/Rakefile DELETED
@@ -1,21 +0,0 @@
1
- # require "bundler/gem_tasks"
2
- # require "rspec/core/rake_task"
3
- #
4
- # RSpec::Core::RakeTask.new(:spec)
5
- #
6
- # task :default => :spec
7
-
8
-
9
- # require_relative "lib/database"
10
- # require_relative "lib/csv_reader"
11
- # require_relative "lib/sql/create_table"
12
- # require_relative "lib/sql/insert"
13
-
14
- require_relative "lib/csv_to_sqlite"
15
-
16
- task default: :convert
17
-
18
- desc "Create tables used in sqlite"
19
- task :convert do
20
- CsvToSqlite::CsvToSQLite.new.convert(ARGV[1])
21
- end