data_seeder 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: