csv_to_sqlite3 0.1.0 → 0.1.3.2

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: 146ef624bc9e0172c1ebdb287b6d906b51e9b34826b85d50937c244210148c50
4
- data.tar.gz: 1353a3721872dbfe61334bf5bc4d6869799d5ab9439b955b421710a366d73ae1
3
+ metadata.gz: 709acaceea756a2fab95c45bc156de01f41050fa6ec82461659a2779728e50f4
4
+ data.tar.gz: 16d5d03ec204d8f1f4fc2fe51a629be1333f60cc788187ac01c966de674c8b52
5
5
  SHA512:
6
- metadata.gz: affe7184ffd215d3279735dfb3218253a271278eb36e8edb2173cae2afc892d486eb8fdf94cefca3eae291cb8739b06258217e581dac991851da3fe13dcfd1c2
7
- data.tar.gz: 9bd61eab0dfe28211d5e5ce970627a029c9fa0209f70f1e03483e3c3a9d04cdfa2ecb68383bd622733b9fd96020d9a29b53a50df7d1503687aa8ddc51e99e0a2
6
+ metadata.gz: f69c8c7f24386a62b21cc6c21a775b335b86312cb81bb8ddb58bf171036a87f5e08799b2a7e42c6043ba50dd836edae20e96c278a501ce7c072d0ba9ff78e8f5
7
+ data.tar.gz: 07053a0b2a2d559ea7cf2e276c2372b3517557e1174b13d6f2ad17c09aa86f7bf18f090021db3b1647e6442a1b5730eabc5b82fc8ad77421359b1428af95d6bc
Binary file
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  *.gem
14
14
 
15
15
  *.sqlite3
16
+ examples/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- csv_to_sqlite3 (0.1.0)
4
+ csv_to_sqlite3 (0.1.3.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,28 +1,24 @@
1
- # CsvToSqlite
1
+ # CsvToSqlite3
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/csv_to_sqlite`. To experiment with that code, run `bin/console` for an interactive prompt.
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
- TODO: Delete this and the text above, and describe your gem
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
6
 
7
- ## Installation
8
-
9
- Add this line to your application's Gemfile:
7
+ Once this cenario is quite common I decided to rewrite the script to work with any csv file exported from any table.
10
8
 
11
- ```ruby
12
- gem 'csv_to_sqlite'
13
- ```
9
+ ## Installation
14
10
 
15
- And then execute:
11
+ Installed with gem:
16
12
 
17
- $ bundle install
13
+ $ gem install csv_to_sqlite3
18
14
 
19
- Or install it yourself as:
15
+ ## Usage
20
16
 
21
- $ gem install csv_to_sqlite
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.
22
18
 
23
- ## Usage
19
+ $ csv_to_sqlite stores.csv
24
20
 
25
- TODO: Write usage instructions here
21
+ By running the command above it will be generated a database data.sqlite3 with a table named stores with all data included.
26
22
 
27
23
  ## Development
28
24
 
@@ -32,7 +28,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
28
 
33
29
  ## Contributing
34
30
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/csv_to_sqlite.
31
+ Bug reports and pull requests are welcome on GitHub at https://github.com/joaofelipe1294/csv_to_sqlite3.
36
32
 
37
33
 
38
34
  ## License
data/Rakefile CHANGED
@@ -6,17 +6,16 @@
6
6
  # task :default => :spec
7
7
 
8
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"
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
13
 
14
- task default: :setup
14
+ require_relative "lib/csv_to_sqlite"
15
+
16
+ task default: :convert
15
17
 
16
18
  desc "Create tables used in sqlite"
17
- task :setup do
18
- connection = CsvToSQLite::Database.new().connect
19
- csv_table = CsvToSQLite::CsvReader.load_file './spec/test_files/test_file.csv'
20
- CsvToSQLite::SQL::CreateTable.new(name: 'persons', csv_table: csv_table, connection: connection).run
21
- CsvToSQLite::SQL::Insert.new(name: 'persons', csv_table: csv_table, connection: connection).run
19
+ task :convert do
20
+ CsvToSqlite::CsvToSQLite.new.convert(ARGV[1])
22
21
  end
@@ -1,4 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'csv_to_sqlite'
4
- CsvToSqlite::CsvToSqlite.convert(ARGV[0])
@@ -6,14 +6,14 @@ Gem::Specification.new do |spec|
6
6
  spec.authors = ["joaofelipelopes"]
7
7
  spec.email = ["joaofelipe1294@gmail.com"]
8
8
 
9
- spec.summary = %q{An easy way to convert a csv file into SQLite database.}
10
- spec.description = %q{Add a better description.}
11
- spec.homepage = "https://github.com/joaofelipe1294/csv_to_sqlite"
9
+ spec.summary = %q{An easy way to convert a csv file into SQLite3 database.}
10
+ spec.description = %q{Add the executable "csv_to_sqlite" to your terminal, wich is used to create a SQLite3 database with all data from a csv file by running "csv_to_sqlite file.csv". It was developed to be used as a command line.}
11
+ spec.homepage = "https://github.com/joaofelipe1294/csv_to_sqlite3"
12
12
  spec.license = "MIT"
13
13
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
14
 
15
15
  spec.metadata["homepage_uri"] = spec.homepage
16
- spec.metadata["source_code_uri"] = "https://github.com/joaofelipe1294/csv_to_sqlite"
16
+ spec.metadata["source_code_uri"] = "https://github.com/joaofelipe1294/csv_to_sqlite3"
17
17
  # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
18
18
 
19
19
  # Specify which files should be added to the gem when it is released.
@@ -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,29 @@
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 "Some customisations will be aviable on next versions :)"
20
+ nil
21
+ end
22
+
23
+ def empty
24
+ 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."
25
+ nil
26
+ end
27
+
28
+ end
29
+ end
@@ -4,8 +4,20 @@ module CsvToSqlite
4
4
 
5
5
  class CsvReader
6
6
 
7
- def self.load_file file_path
8
- CSV.parse(File.read(file_path), headers: true, col_sep: ';')
7
+ def initialize file_path
8
+ @file_path = file_path
9
+ end
10
+
11
+ def load_file
12
+ CSV.parse(File.read(@file_path), headers: true, col_sep: separator)
13
+ end
14
+
15
+ def separator
16
+ first_line = File.open(@file_path) do |file|
17
+ line = file.readline
18
+ return ";" if line.include? ";"
19
+ return "," if line.include? ","
20
+ end
9
21
  end
10
22
 
11
23
  end
@@ -3,17 +3,44 @@ 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
- csv_table = CsvToSqlite::CsvReader.load_file file_path
15
- CsvToSqlite::SQL::CreateTable.new(name: 'persons', csv_table: csv_table, connection: connection).run
16
- CsvToSqlite::SQL::Insert.new(name: 'persons', csv_table: csv_table, connection: connection).run
24
+ csv_table = CsvToSqlite::CsvReader.new(file_path).load_file
25
+ CsvToSqlite::SQL::CreateTable.new(name: table_name, csv_table: csv_table, connection: connection).run
26
+ CsvToSqlite::SQL::Insert.new(name: table_name, csv_table: csv_table, connection: connection).run
27
+ end
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
17
44
  end
18
45
 
19
46
  end
@@ -1,3 +1,3 @@
1
1
  module CsvToSqlite
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.3.2"
3
3
  end
@@ -8,7 +8,9 @@ module CsvToSqlite::SQL
8
8
 
9
9
  def sql_for column
10
10
  @data = @csv_table[column][0..2]
11
- if int?
11
+ if null?
12
+ type = "TEXT DEFAULT NULL"
13
+ elsif int?
12
14
  type = "INTEGER"
13
15
  elsif float?
14
16
  type = "FLOAT"
@@ -24,6 +26,11 @@ module CsvToSqlite::SQL
24
26
  "#{column} #{type},"
25
27
  end
26
28
 
29
+ def null?
30
+ match_cases = @data.map { |value| value == nil }
31
+ match_cases.any? { |value| value == true }
32
+ end
33
+
27
34
  def int?
28
35
  meta_comparing :Integer
29
36
  end
metadata CHANGED
@@ -1,16 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_to_sqlite3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3.2
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-20 00:00:00.000000000 Z
11
+ date: 2020-10-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Add a better description.
13
+ description: Add the executable "csv_to_sqlite" to your terminal, wich is used to
14
+ create a SQLite3 database with all data from a csv file by running "csv_to_sqlite
15
+ file.csv". It was developed to be used as a command line.
14
16
  email:
15
17
  - joaofelipe1294@gmail.com
16
18
  executables:
@@ -18,6 +20,7 @@ executables:
18
20
  extensions: []
19
21
  extra_rdoc_files: []
20
22
  files:
23
+ - ".DS_Store"
21
24
  - ".gitignore"
22
25
  - ".rspec"
23
26
  - ".travis.yml"
@@ -31,6 +34,7 @@ files:
31
34
  - bin/setup
32
35
  - csv_to_sqlite3.gemspec
33
36
  - exe/csv_to_sqlite
37
+ - lib/argument_handler_service.rb
34
38
  - lib/csv_reader.rb
35
39
  - lib/csv_to_sqlite.rb
36
40
  - lib/csv_to_sqlite/version.rb
@@ -38,12 +42,12 @@ files:
38
42
  - lib/sql/column.rb
39
43
  - lib/sql/create_table.rb
40
44
  - lib/sql/insert.rb
41
- homepage: https://github.com/joaofelipe1294/csv_to_sqlite
45
+ homepage: https://github.com/joaofelipe1294/csv_to_sqlite3
42
46
  licenses:
43
47
  - MIT
44
48
  metadata:
45
- homepage_uri: https://github.com/joaofelipe1294/csv_to_sqlite
46
- source_code_uri: https://github.com/joaofelipe1294/csv_to_sqlite
49
+ homepage_uri: https://github.com/joaofelipe1294/csv_to_sqlite3
50
+ source_code_uri: https://github.com/joaofelipe1294/csv_to_sqlite3
47
51
  post_install_message:
48
52
  rdoc_options: []
49
53
  require_paths:
@@ -59,8 +63,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
63
  - !ruby/object:Gem::Version
60
64
  version: '0'
61
65
  requirements: []
62
- rubygems_version: 3.1.2
66
+ rubygems_version: 3.0.3
63
67
  signing_key:
64
68
  specification_version: 4
65
- summary: An easy way to convert a csv file into SQLite database.
69
+ summary: An easy way to convert a csv file into SQLite3 database.
66
70
  test_files: []