data_seeder 0.0.1

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 (52) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +256 -0
  3. data/Rakefile +34 -0
  4. data/app/models/data_seeder/seed_file.rb +34 -0
  5. data/db/migrate/20150306195118_create_data_seeder_seed_files.rb +9 -0
  6. data/lib/data_seeder.rb +68 -0
  7. data/lib/data_seeder/config.rb +41 -0
  8. data/lib/data_seeder/engine.rb +5 -0
  9. data/lib/data_seeder/loader.rb +122 -0
  10. data/lib/data_seeder/loader/csv.rb +15 -0
  11. data/lib/data_seeder/loader/json.rb +20 -0
  12. data/lib/data_seeder/loader/txt.rb +23 -0
  13. data/lib/data_seeder/loader/yaml.rb +23 -0
  14. data/lib/data_seeder/logger.rb +15 -0
  15. data/lib/data_seeder/version.rb +3 -0
  16. data/test/dummy/Rakefile +6 -0
  17. data/test/dummy/app/models/app.rb +3 -0
  18. data/test/dummy/app/models/app_error.rb +3 -0
  19. data/test/dummy/app/models/app_error_data_seeder.rb +52 -0
  20. data/test/dummy/app/models/country.rb +14 -0
  21. data/test/dummy/app/models/state.rb +2 -0
  22. data/test/dummy/bin/bundle +3 -0
  23. data/test/dummy/bin/rails +4 -0
  24. data/test/dummy/bin/rake +4 -0
  25. data/test/dummy/config.ru +4 -0
  26. data/test/dummy/config/application.rb +26 -0
  27. data/test/dummy/config/boot.rb +5 -0
  28. data/test/dummy/config/database.yml +12 -0
  29. data/test/dummy/config/environment.rb +5 -0
  30. data/test/dummy/config/environments/development.rb +37 -0
  31. data/test/dummy/config/environments/test.rb +42 -0
  32. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  33. data/test/dummy/config/initializers/inflections.rb +16 -0
  34. data/test/dummy/db/migrate/20150313022149_create_countries.rb +8 -0
  35. data/test/dummy/db/migrate/20150313022228_create_states.rb +8 -0
  36. data/test/dummy/db/migrate/20150313172634_create_apps.rb +7 -0
  37. data/test/dummy/db/migrate/20150313172719_create_app_errors.rb +10 -0
  38. data/test/dummy/db/schema.rb +45 -0
  39. data/test/dummy/db/seed.test/bar.err +3 -0
  40. data/test/dummy/db/seed.test/countries.txt +249 -0
  41. data/test/dummy/db/seed.test/foo.err +3 -0
  42. data/test/dummy/db/seed.test/states.csv +51 -0
  43. data/test/dummy/db/seed.test/states.json +153 -0
  44. data/test/dummy/db/seed.test/states.txt +51 -0
  45. data/test/dummy/db/seed.test/states.yml +101 -0
  46. data/test/dummy/db/seed.test/zulu.err +2 -0
  47. data/test/dummy/db/test.sqlite3 +0 -0
  48. data/test/dummy/log/development.log +39 -0
  49. data/test/dummy/log/test.log +68768 -0
  50. data/test/models/data_seeder_test.rb +147 -0
  51. data/test/test_helper.rb +12 -0
  52. metadata +159 -0
@@ -0,0 +1,147 @@
1
+ require 'test_helper'
2
+
3
+ describe DataSeeder, :model do
4
+ describe 'when run with txt files' do
5
+ before do
6
+ @name = 'test.txt'
7
+ @seed_dir = setup_seed_dir(@name, 'countries.txt', 'states.txt')
8
+ end
9
+
10
+ after do
11
+ cleanup_seed_dir(@name)
12
+ end
13
+
14
+ it 'should load seed files' do
15
+ modify_seed_file(@name, 'states.txt') do |body|
16
+ body.sub('KY Kentucky', 'KV Kentucky').sub('VT Vermont', 'VT Vermount')
17
+ end
18
+ DataSeeder.run(seed_dir: @seed_dir)
19
+ assert_equal 50, State.count
20
+ assert_equal 'United States', Country.find_by(code: 'US').try(:name)
21
+ assert_equal 'Kentucky', State.find_by(code: 'KV').try(:name)
22
+ assert_equal 'Vermount', State.find_by(code: 'VT').try(:name)
23
+ modify_seed_file(@name, 'states.txt') do |body|
24
+ body.sub('KV Kentucky', 'KY Kentucky').sub('VT Vermount', 'VT Vermont')
25
+ end
26
+ DataSeeder.run(seed_dir: @seed_dir)
27
+ assert_equal 50, State.count
28
+ assert_equal 'Kentucky', State.find_by(code: 'KY').try(:name)
29
+ assert_equal 'Vermont', State.find_by(code: 'VT').try(:name)
30
+ assert_nil State.find_by(code: 'KV')
31
+ end
32
+ end
33
+
34
+ %w(csv json yml).each do |loader_type|
35
+ describe "when run with #{loader_type} files" do
36
+ before do
37
+ @name = "test.#{loader_type}"
38
+ @file = "states.#{loader_type}"
39
+ @seed_dir = setup_seed_dir(@name, @file)
40
+ end
41
+
42
+ after do
43
+ cleanup_seed_dir(@name)
44
+ end
45
+
46
+ it 'should load seed files' do
47
+ modify_seed_file(@name, @file) do |body|
48
+ body.sub('Alaska', 'Alaskaska')
49
+ end
50
+ DataSeeder.run(seed_dir: @seed_dir)
51
+ assert_equal 50, State.count
52
+ assert_equal 'Alaskaska', State.find_by(code: 'AK').try(:name)
53
+ modify_seed_file(@name, @file) do |body|
54
+ body.sub('Alaskaska', 'Alaska')
55
+ end
56
+ DataSeeder.run(seed_dir: @seed_dir)
57
+ assert_equal 50, State.count
58
+ assert_equal 'Alaska', State.find_by(code: 'AK').try(:name)
59
+ end
60
+ end
61
+ end
62
+
63
+ describe 'when run with a custom loader' do
64
+ before do
65
+ @name = 'test.custom'
66
+ @seed_dir = setup_seed_dir(@name, 'states.txt', 'foo.err', 'bar.err')
67
+ end
68
+
69
+ after do
70
+ cleanup_seed_dir(@name)
71
+ end
72
+
73
+ it 'should load seed files' do
74
+ modify_seed_file(@name, 'states.txt') do |body|
75
+ body.sub('KY Kentucky', 'KV Kentucky').sub('VT Vermont', 'VT Vermount')
76
+ end
77
+ DataSeeder.run(seed_dir: @seed_dir, loaders: {'err' => AppErrorDataSeeder.new})
78
+ assert_equal 50, State.count
79
+ assert_equal 'Kentucky', State.find_by(code: 'KV').try(:name)
80
+ assert_equal 'Vermount', State.find_by(code: 'VT').try(:name)
81
+ assert_equal 2, App.count
82
+ assert App.find_by(name: 'foo')
83
+ bar = App.find_by(name: 'bar')
84
+ assert bar
85
+ assert 3, bar.app_errors.count
86
+ assert_equal 'Error message for B1', bar.app_errors.find_by(code: 'B1').try(:message)
87
+
88
+ modify_seed_file(@name, 'states.txt') do |body|
89
+ body.sub('KV Kentucky', 'KY Kentucky').sub('VT Vermount', 'VT Vermont')
90
+ end
91
+ modify_seed_file(@name, 'bar.err') do |body|
92
+ body.sub('B1 Error message for B1', 'C1 Error message for C1')
93
+ end
94
+ DataSeeder.run(seed_dir: @seed_dir, loaders: {'err' => AppErrorDataSeeder.new})
95
+ assert_equal 50, State.count
96
+ assert_equal 'Kentucky', State.find_by(code: 'KY').try(:name)
97
+ assert_equal 'Vermont', State.find_by(code: 'VT').try(:name)
98
+ assert_nil State.find_by(code: 'KV')
99
+ assert_equal 2, App.count
100
+ assert App.find_by(name: 'foo')
101
+ bar = App.find_by(name: 'bar')
102
+ assert bar
103
+ assert 3, bar.app_errors.count
104
+ assert_nil bar.app_errors.find_by(code: 'B1')
105
+ assert_equal 'Error message for C1', bar.app_errors.find_by(code: 'C1').try(:message)
106
+
107
+ FileUtils.cp(Rails.root.join('db', 'seed.test', 'zulu.err'), @seed_dir)
108
+ DataSeeder.run(seed_dir: @seed_dir, loaders: {'err' => AppErrorDataSeeder.new})
109
+ assert_equal 50, State.count
110
+ assert_equal 3, App.count
111
+ zulu = App.find_by(name: 'zulu')
112
+ assert zulu
113
+ assert_equal 2, zulu.app_errors.count
114
+ assert zulu.app_errors.find_by(code: 'Z1')
115
+ end
116
+ end
117
+
118
+
119
+ def setup_seed_dir(name, *files)
120
+ dir_name = seed_dir_name(name)
121
+ FileUtils.mkdir_p(dir_name)
122
+ files.each do |file|
123
+ FileUtils.cp(Rails.root.join('db', 'seed.test', file), dir_name)
124
+ end
125
+ return dir_name
126
+ end
127
+
128
+ def cleanup_seed_dir(name)
129
+ FileUtils.rm_rf(seed_dir_name(name))
130
+ end
131
+
132
+ def modify_seed_file(name, file, &block)
133
+ file_name = seed_file_name(name, file)
134
+ body = File.read(file_name)
135
+ File.open(file_name, 'w') do |f|
136
+ f.write yield(body)
137
+ end
138
+ end
139
+
140
+ def seed_dir_name(name)
141
+ Rails.root.join('tmp', "db.seed.#{name}.#{$$}")
142
+ end
143
+
144
+ def seed_file_name(name, file)
145
+ File.join(seed_dir_name(name), file)
146
+ end
147
+ end
@@ -0,0 +1,12 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+
3
+ require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
4
+ #ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
5
+ #ActiveRecord::Migrator.migrations_paths << File.expand_path('../../db/migrate', __FILE__)
6
+ require "rails/test_help"
7
+ require "minitest/rails"
8
+
9
+ # Filter out Minitest backtrace while allowing backtrace from other libraries
10
+ # to be shown.
11
+ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
12
+ ActiveRecord::Migration.maintain_test_schema!
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: data_seeder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Brad Pardee
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
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: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Provides a simple methodology for seeding your Rails database
42
+ email:
43
+ - bradpardee@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - README.md
49
+ - Rakefile
50
+ - app/models/data_seeder/seed_file.rb
51
+ - db/migrate/20150306195118_create_data_seeder_seed_files.rb
52
+ - lib/data_seeder.rb
53
+ - lib/data_seeder/config.rb
54
+ - lib/data_seeder/engine.rb
55
+ - lib/data_seeder/loader.rb
56
+ - lib/data_seeder/loader/csv.rb
57
+ - lib/data_seeder/loader/json.rb
58
+ - lib/data_seeder/loader/txt.rb
59
+ - lib/data_seeder/loader/yaml.rb
60
+ - lib/data_seeder/logger.rb
61
+ - lib/data_seeder/version.rb
62
+ - test/dummy/Rakefile
63
+ - test/dummy/app/models/app.rb
64
+ - test/dummy/app/models/app_error.rb
65
+ - test/dummy/app/models/app_error_data_seeder.rb
66
+ - test/dummy/app/models/country.rb
67
+ - test/dummy/app/models/state.rb
68
+ - test/dummy/bin/bundle
69
+ - test/dummy/bin/rails
70
+ - test/dummy/bin/rake
71
+ - test/dummy/config.ru
72
+ - test/dummy/config/application.rb
73
+ - test/dummy/config/boot.rb
74
+ - test/dummy/config/database.yml
75
+ - test/dummy/config/environment.rb
76
+ - test/dummy/config/environments/development.rb
77
+ - test/dummy/config/environments/test.rb
78
+ - test/dummy/config/initializers/backtrace_silencers.rb
79
+ - test/dummy/config/initializers/inflections.rb
80
+ - test/dummy/db/migrate/20150313022149_create_countries.rb
81
+ - test/dummy/db/migrate/20150313022228_create_states.rb
82
+ - test/dummy/db/migrate/20150313172634_create_apps.rb
83
+ - test/dummy/db/migrate/20150313172719_create_app_errors.rb
84
+ - test/dummy/db/schema.rb
85
+ - test/dummy/db/seed.test/bar.err
86
+ - test/dummy/db/seed.test/countries.txt
87
+ - test/dummy/db/seed.test/foo.err
88
+ - test/dummy/db/seed.test/states.csv
89
+ - test/dummy/db/seed.test/states.json
90
+ - test/dummy/db/seed.test/states.txt
91
+ - test/dummy/db/seed.test/states.yml
92
+ - test/dummy/db/seed.test/zulu.err
93
+ - test/dummy/db/test.sqlite3
94
+ - test/dummy/log/development.log
95
+ - test/dummy/log/test.log
96
+ - test/models/data_seeder_test.rb
97
+ - test/test_helper.rb
98
+ homepage: http://github.com/bpardee/data_seeder
99
+ licenses:
100
+ - Apache License V2.0
101
+ metadata: {}
102
+ post_install_message:
103
+ rdoc_options: []
104
+ require_paths:
105
+ - lib
106
+ required_ruby_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 2.4.5
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: Seed your Rails database
122
+ test_files:
123
+ - test/dummy/app/models/app.rb
124
+ - test/dummy/app/models/app_error.rb
125
+ - test/dummy/app/models/app_error_data_seeder.rb
126
+ - test/dummy/app/models/country.rb
127
+ - test/dummy/app/models/state.rb
128
+ - test/dummy/bin/bundle
129
+ - test/dummy/bin/rails
130
+ - test/dummy/bin/rake
131
+ - test/dummy/config/application.rb
132
+ - test/dummy/config/boot.rb
133
+ - test/dummy/config/database.yml
134
+ - test/dummy/config/environment.rb
135
+ - test/dummy/config/environments/development.rb
136
+ - test/dummy/config/environments/test.rb
137
+ - test/dummy/config/initializers/backtrace_silencers.rb
138
+ - test/dummy/config/initializers/inflections.rb
139
+ - test/dummy/config.ru
140
+ - test/dummy/db/migrate/20150313022149_create_countries.rb
141
+ - test/dummy/db/migrate/20150313022228_create_states.rb
142
+ - test/dummy/db/migrate/20150313172634_create_apps.rb
143
+ - test/dummy/db/migrate/20150313172719_create_app_errors.rb
144
+ - test/dummy/db/schema.rb
145
+ - test/dummy/db/seed.test/bar.err
146
+ - test/dummy/db/seed.test/countries.txt
147
+ - test/dummy/db/seed.test/foo.err
148
+ - test/dummy/db/seed.test/states.csv
149
+ - test/dummy/db/seed.test/states.json
150
+ - test/dummy/db/seed.test/states.txt
151
+ - test/dummy/db/seed.test/states.yml
152
+ - test/dummy/db/seed.test/zulu.err
153
+ - test/dummy/db/test.sqlite3
154
+ - test/dummy/log/development.log
155
+ - test/dummy/log/test.log
156
+ - test/dummy/Rakefile
157
+ - test/models/data_seeder_test.rb
158
+ - test/test_helper.rb
159
+ has_rdoc: