csv_to_seed 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a21b6270b552685223434a38b14c2bf1936758c2
4
- data.tar.gz: 641689162f09c2a32c6e234a451bd8565208c3fe
3
+ metadata.gz: ce13d20ba955a635825bd21285b9d61be1d8da7a
4
+ data.tar.gz: 788d1958efd9df6509369cf169e45dc3ae365ec1
5
5
  SHA512:
6
- metadata.gz: 265332d5bb4cf19d7a3fd5a17ae98c5bfadd24679439ee7d319a19c21fa20314a2e3e97a209b6a7c35b8b05849c7b70184ff8b572bcd88255da519ee69b9d4a7
7
- data.tar.gz: eae02af0e9f50e36818ad78c2349b43b7a0cefb6ff72a3e8983b74337d49a3d2193053e03313d96ddad22922f89a52db0cc44d52c482117acef22a2dc8648014
6
+ metadata.gz: a9a2c6c62c10e717b992f3657d31f0222189c61419c12f11927cd1a35643fa8d36e788754cf07fd5bc0217d3700bca4c6d59c1ba21dfccca58700290028d5f4c
7
+ data.tar.gz: 2cc4fae5e7ec3c7fb40ce7ad1ac52813969b754d53052b3c586d3b2d5c7e44ce46a81aee95b283e97ddbc9543d1620bfbbd99fc22d9b91a5d07c05ab744fd538
data/.DS_Store ADDED
Binary file
data/Gemfile CHANGED
@@ -6,7 +6,7 @@ source "http://rubygems.org"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "shoulda", ">= 0"
9
+ gem "minitest"
10
10
  gem "rdoc", "~> 3.12"
11
11
  gem "bundler", "~> 1.0"
12
12
  gem "jeweler", "~> 2.0.1"
data/Gemfile.lock CHANGED
@@ -1,12 +1,6 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (4.1.1)
5
- i18n (~> 0.6, >= 0.6.9)
6
- json (~> 1.7, >= 1.7.7)
7
- minitest (~> 5.1)
8
- thread_safe (~> 0.1)
9
- tzinfo (~> 1.1)
10
4
  addressable (2.3.6)
11
5
  builder (3.2.2)
12
6
  descendants_tracker (0.0.4)
@@ -25,7 +19,6 @@ GEM
25
19
  oauth2
26
20
  hashie (2.1.1)
27
21
  highline (1.6.21)
28
- i18n (0.6.9)
29
22
  jeweler (2.0.1)
30
23
  builder
31
24
  bundler (>= 1.0)
@@ -55,20 +48,12 @@ GEM
55
48
  rake (10.3.1)
56
49
  rdoc (3.12.2)
57
50
  json (~> 1.4)
58
- shoulda (3.5.0)
59
- shoulda-context (~> 1.0, >= 1.0.1)
60
- shoulda-matchers (>= 1.4.1, < 3.0)
61
- shoulda-context (1.2.1)
62
- shoulda-matchers (2.6.1)
63
- activesupport (>= 3.0.0)
64
51
  simplecov (0.8.2)
65
52
  docile (~> 1.1.0)
66
53
  multi_json
67
54
  simplecov-html (~> 0.8.0)
68
55
  simplecov-html (0.8.0)
69
56
  thread_safe (0.3.3)
70
- tzinfo (1.1.0)
71
- thread_safe (~> 0.1)
72
57
 
73
58
  PLATFORMS
74
59
  ruby
@@ -76,6 +61,6 @@ PLATFORMS
76
61
  DEPENDENCIES
77
62
  bundler (~> 1.0)
78
63
  jeweler (~> 2.0.1)
64
+ minitest
79
65
  rdoc (~> 3.12)
80
- shoulda
81
66
  simplecov
@@ -1,9 +1,19 @@
1
1
  = csv_to_seed
2
2
 
3
- Description goes here.
3
+ This gem is a basic tool for those who get annoyed by parsing CSVs file to import them to their DBs,
4
+ instead this script just read the CSV file and write an array based on the file to seed.rb for Rails Apps.
5
+
6
+ ```
7
+ $ csv_to_seed 'path_to_CSV_file' 'name_of_the_array'
8
+ ```
9
+
10
+ @TODO
11
+ - Add testing to the class
12
+ - Unhardcode the structure to insert
13
+ - Update the README
4
14
 
5
15
  == Contributing to csv_to_seed
6
-
16
+
7
17
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
8
18
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
9
19
  * Fork the project.
@@ -16,4 +26,3 @@ Description goes here.
16
26
 
17
27
  Copyright (c) 2014 JoseLuis Torres. See LICENSE.txt for
18
28
  further details.
19
-
data/Rakefile CHANGED
@@ -32,11 +32,11 @@ Rake::TestTask.new(:test) do |test|
32
32
  test.verbose = true
33
33
  end
34
34
 
35
- desc "Code coverage detail"
36
- task :simplecov do
37
- ENV['COVERAGE'] = "true"
38
- Rake::Task['test'].execute
39
- end
35
+ # desc "Code coverage detail"
36
+ # task :simplecov do
37
+ # ENV['COVERAGE'] = "true"
38
+ # Rake::Task['test'].execute
39
+ # end
40
40
 
41
41
  task :default => :test
42
42
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/csv_to_seed.gemspec CHANGED
@@ -2,36 +2,37 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: csv_to_seed 0.1.0 ruby lib
5
+ # stub: csv_to_seed 0.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "csv_to_seed"
9
- s.version = "0.1.0"
9
+ s.version = "0.2.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["JoseLuis Torres"]
14
- s.date = "2014-05-14"
14
+ s.date = "2014-06-02"
15
15
  s.description = "Utility to get a CSV file into seed.rb"
16
16
  s.email = "jl@joseluistorres.me"
17
17
  s.executables = ["csv_to_seed"]
18
18
  s.extra_rdoc_files = [
19
19
  "LICENSE.txt",
20
- "README.rdoc"
20
+ "README.md"
21
21
  ]
22
22
  s.files = [
23
+ ".DS_Store",
23
24
  ".document",
24
25
  "Gemfile",
25
26
  "Gemfile.lock",
26
27
  "LICENSE.txt",
27
- "README.rdoc",
28
+ "README.md",
28
29
  "Rakefile",
29
30
  "VERSION",
30
31
  "bin/csv_to_seed",
31
32
  "csv_to_seed.gemspec",
32
33
  "db/seeds.rb",
33
34
  "lib/csv_to_seed.rb",
34
- "test.csv",
35
+ "test/csv_files/test.csv",
35
36
  "test/helper.rb",
36
37
  "test/test_csv_to_seed.rb"
37
38
  ]
@@ -44,20 +45,20 @@ Gem::Specification.new do |s|
44
45
  s.specification_version = 4
45
46
 
46
47
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
- s.add_development_dependency(%q<shoulda>, [">= 0"])
48
+ s.add_development_dependency(%q<minitest>, [">= 0"])
48
49
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
49
50
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
50
51
  s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
51
52
  s.add_development_dependency(%q<simplecov>, [">= 0"])
52
53
  else
53
- s.add_dependency(%q<shoulda>, [">= 0"])
54
+ s.add_dependency(%q<minitest>, [">= 0"])
54
55
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
55
56
  s.add_dependency(%q<bundler>, ["~> 1.0"])
56
57
  s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
57
58
  s.add_dependency(%q<simplecov>, [">= 0"])
58
59
  end
59
60
  else
60
- s.add_dependency(%q<shoulda>, [">= 0"])
61
+ s.add_dependency(%q<minitest>, [">= 0"])
61
62
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
62
63
  s.add_dependency(%q<bundler>, ["~> 1.0"])
63
64
  s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
data/lib/csv_to_seed.rb CHANGED
@@ -1,16 +1,21 @@
1
1
  require 'csv'
2
2
 
3
3
  class CSVToSeed
4
- attr_accessor :file, :headers
4
+ attr_accessor :file, :headers, :name_of_array
5
5
 
6
6
  def initialize(args)
7
7
  @csv_path_to_file = args[:csv_path_to_file]
8
8
  @name_of_array = args[:name_of_array]
9
+ validate_name_of_array(@name_of_array)
9
10
  end
10
11
 
11
12
  def get_csv_body
12
- @file = File.open(@csv_path_to_file, "rb")
13
- @file.read
13
+ begin
14
+ @file = File.open(@csv_path_to_file, "rb")
15
+ @file.read
16
+ rescue
17
+ raise 'Invalid file path'
18
+ end
14
19
  end
15
20
 
16
21
  def csv_object
@@ -37,22 +42,33 @@ class CSVToSeed
37
42
  .gsub(/\}\,/, "\s},")
38
43
  end
39
44
 
45
+ def validate_name_of_array(value)
46
+ raise 'Must be a valid variable name' if (value =~ /^[a-z_][a-zA-Z_0-9]*$/).nil?
47
+ end
48
+
40
49
  def set_string_to_create_loop
41
- <<-TEXT
42
- #{@name_of_array}.each do |attributes|
43
- Static::SupportPracticeLu.find_or_initialize_by_name(attributes[:name]).tap do |support_practice|
44
- support_practice.name = attributes[:name]
45
- support_practice.support_practice_type_id = attributes[:support_practice_type_id]
46
- support_practice.number = attributes[:number]
47
- support_practice.width = attributes[:width]
48
- support_practice.save!
50
+ if @headers.empty?
51
+ csv_to_hash
49
52
  end
50
- end
51
- TEXT
53
+ inside_vars = ''
54
+ @headers.each do |header|
55
+ inside_vars = inside_vars +
56
+ <<-TEXT
57
+ support_practice.#{header.to_s} = attributes[:#{header.to_s}]
58
+ TEXT
59
+ end
60
+ <<-TEXT
61
+ #{@name_of_array}.each do |attributes|
62
+ Static::SupportPracticeLu.find_or_initialize_by_name(attributes[:name]).tap do |support_practice|
63
+ #{inside_vars}
64
+ support_practice.save!
65
+ end
66
+ end
67
+ TEXT
52
68
  end
53
69
 
54
70
  def write_seedrb_file
55
71
  File.write(Dir.pwd + '/db/seeds.rb', "\n\r#{@name_of_array} = #{csv_to_hash} \n\r #{set_string_to_create_loop}", File.size(Dir.pwd + '/db/seeds.rb'), mode: 'a')
56
72
  @file.close
57
73
  end
58
- end
74
+ end
@@ -0,0 +1,16 @@
1
+ name,path,support_practice_type_id,number,width
2
+ 0.05% grade channel,nuevo path.18,1,null
3
+ 0.05% grade channel-impoundment,nuevo path,18,1,null
4
+ 0.1% grade channel,nuevo path,18,1,null
5
+ 0.1% grade channel-impoundment,nuevo path,18,1,null
6
+ 0.2% grade channel,nuevo path,18,1,null
7
+ 0.2% grade channel-impoundment,nuevo path,18,1,null
8
+ 0.3% grade channel,nuevo path,18,1,null
9
+ 0.3% grade channel-impoundment,nuevo path,18,1,null
10
+ 0.4% grade channel,nuevo path,18,1,null
11
+ 0.4% grade channel-impoundment,nuevo path,18,1,null
12
+ 0.5% grade channel,nuevo path,18,1,null
13
+ 0.5% grade channel-impoundment,nuevo path,18,1,null
14
+ 0.6% grade channel,nuevo path,18,1,null
15
+ 0.6% grade channel-impoundment,nuevo path,18,1,null
16
+ 0.75% grade channel,nuevo path,18,1,null
data/test/helper.rb CHANGED
@@ -1,19 +1,3 @@
1
- require 'simplecov'
2
-
3
- module SimpleCov::Configuration
4
- def clean_filters
5
- @filters = []
6
- end
7
- end
8
-
9
- SimpleCov.configure do
10
- clean_filters
11
- load_adapter 'test_frameworks'
12
- end
13
-
14
- ENV["COVERAGE"] && SimpleCov.start do
15
- add_filter "/.rvm/"
16
- end
17
1
  require 'rubygems'
18
2
  require 'bundler'
19
3
  begin
@@ -23,12 +7,11 @@ rescue Bundler::BundlerError => e
23
7
  $stderr.puts "Run `bundle install` to install missing gems"
24
8
  exit e.status_code
25
9
  end
26
- require 'test/unit'
27
- require 'shoulda'
10
+
11
+ require "minitest"
12
+ require 'minitest/spec'
13
+ require 'minitest/autorun'
28
14
 
29
15
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
30
16
  $LOAD_PATH.unshift(File.dirname(__FILE__))
31
17
  require 'csv_to_seed'
32
-
33
- class Test::Unit::TestCase
34
- end
@@ -1,7 +1,49 @@
1
1
  require 'helper'
2
+ #Dir["test/rules/*.rb"].each {|file| require './' + file }
3
+ #Dir["test/test_classes/*.rb"].each {|file| require './' + file }
2
4
 
3
- class TestCsvToSeed < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
5
+ describe CSVToSeed do
6
+ before do
7
+ @csv_to_seed = CSVToSeed.new({ :csv_path_to_file => 'test/csv_files/test.csv', :name_of_array => 'my_test' })
8
+ @csv_to_seed_broken = CSVToSeed.new({ :csv_path_to_file => 'missing.csv', :name_of_array => 'my_test' })
9
+ end
10
+
11
+ it "should read a CSV file" do
12
+ @csv_to_seed.get_csv_body.must_match /name,path,support_practice_type_id,number,width/
13
+ end
14
+
15
+ it "should show an error when the CSV file is missing" do
16
+ error = -> { @csv_to_seed_broken.get_csv_body }.must_raise RuntimeError
17
+ error.message.must_match /Invalid file path/
18
+ end
19
+
20
+ it "should have a valid CSV object " do
21
+ @csv_to_seed.csv_object.must_be_instance_of CSV
22
+ end
23
+
24
+ it "should have a valid hash object before writing" do
25
+ @csv_to_seed.csv_to_hash.must_be_instance_of String
26
+ @csv_to_seed.csv_to_hash.must_match /\n\r\{\ \:name\=\>\"0.05\%\ grade\ channel\"\,/
27
+ end
28
+
29
+ it "should have a valid name of array" do
30
+ @csv_to_seed.name_of_array.must_match /^[a-z_][a-zA-Z_0-9]*$/
31
+ end
32
+
33
+ it "should raise an error when a name of array is invalid" do
34
+ error =-> { CSVToSeed.new({ :csv_path_to_file => 'test.csv', :name_of_array => '123my_test' }) }.must_raise RuntimeError
35
+ error.message.must_match /Must be a valid variable name/
36
+ end
37
+
38
+ it "should read the first row as headers" do
39
+ # name,support_practice_type_id,number,width
40
+ @csv_to_seed.csv_to_hash
41
+ @csv_to_seed.headers.must_be_instance_of Array
42
+ @csv_to_seed.headers.must_include :support_practice_type_id
43
+ end
44
+
45
+ it "should create a string for the loop with headers" do
46
+ @csv_to_seed.csv_to_hash
47
+ @csv_to_seed.set_string_to_create_loop.must_match /\.path\s\=\sattributes\[\:path\]/
6
48
  end
7
49
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_to_seed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JoseLuis Torres
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-14 00:00:00.000000000 Z
11
+ date: 2014-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: shoulda
14
+ name: minitest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - '>='
@@ -87,20 +87,21 @@ executables:
87
87
  extensions: []
88
88
  extra_rdoc_files:
89
89
  - LICENSE.txt
90
- - README.rdoc
90
+ - README.md
91
91
  files:
92
+ - .DS_Store
92
93
  - .document
93
94
  - Gemfile
94
95
  - Gemfile.lock
95
96
  - LICENSE.txt
96
- - README.rdoc
97
+ - README.md
97
98
  - Rakefile
98
99
  - VERSION
99
100
  - bin/csv_to_seed
100
101
  - csv_to_seed.gemspec
101
102
  - db/seeds.rb
102
103
  - lib/csv_to_seed.rb
103
- - test.csv
104
+ - test/csv_files/test.csv
104
105
  - test/helper.rb
105
106
  - test/test_csv_to_seed.rb
106
107
  homepage: http://github.com/joseluistorres/csv_to_seed
data/test.csv DELETED
@@ -1,16 +0,0 @@
1
- name,support_practice_type_id,number,width
2
- 0.05% grade channel,18,1,null
3
- 0.05% grade channel-impoundment,18,1,null
4
- 0.1% grade channel,18,1,null
5
- 0.1% grade channel-impoundment,18,1,null
6
- 0.2% grade channel,18,1,null
7
- 0.2% grade channel-impoundment,18,1,null
8
- 0.3% grade channel,18,1,null
9
- 0.3% grade channel-impoundment,18,1,null
10
- 0.4% grade channel,18,1,null
11
- 0.4% grade channel-impoundment,18,1,null
12
- 0.5% grade channel,18,1,null
13
- 0.5% grade channel-impoundment,18,1,null
14
- 0.6% grade channel,18,1,null
15
- 0.6% grade channel-impoundment,18,1,null
16
- 0.75% grade channel,18,1,null