seedbank 0.1.3 → 0.2.0
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.
- data/README.md +16 -4
- data/Rakefile +1 -1
- data/TODO.txt +2 -2
- data/lib/seedbank/dsl.rb +25 -16
- data/lib/seedbank/rename_task.rb +2 -2
- data/lib/seedbank/task_manager.rb +13 -2
- data/lib/seedbank/version.rb +1 -1
- data/lib/tasks/seed.rake +19 -29
- data/test/dummy/db/seeds/development/shared/accounts.seeds.rb +0 -0
- data/test/dummy/db/seeds/development/users.seeds.rb +1 -0
- data/test/dummy/lib/tasks/dsl.rake +4 -0
- data/test/lib/seedbank/dsl_test.rb +146 -0
- data/test/lib/seedbank/rename_task_test.rb +19 -0
- data/test/lib/seedbank/task_manager_test.rb +104 -0
- data/test/lib/tasks/seed_rake_test.rb +126 -0
- data/test/test_helper.rb +3 -2
- metadata +18 -4
- /data/test/{seedbank → lib/seedbank}/runner_test.rb +0 -0
data/README.md
CHANGED
|
@@ -81,14 +81,14 @@ Usage
|
|
|
81
81
|
|
|
82
82
|
Seeds files are just plain old Ruby executed in your rails application environment so anything you could type into the rails console will work in your seeds.
|
|
83
83
|
|
|
84
|
-
The seed files under db/seeds are run first in alphanumeric order followed by the ones in the db/seeds/RAILS_ENV. You can add dependencies to your seed files
|
|
85
|
-
to enforce the run order. for example;
|
|
86
|
-
|
|
87
84
|
db/seeds/companies.seeds.rb
|
|
88
85
|
```ruby
|
|
89
|
-
Company.find_or_create_by_name('Hatch', :url => 'http://thisishatch.co.uk' )
|
|
86
|
+
Company.find_or_create_by_name('Hatch', :url => 'http://thisishatch.co.uk' )
|
|
90
87
|
```
|
|
91
88
|
|
|
89
|
+
The seed files under db/seeds are run first in alphanumeric order followed by the ones in the db/seeds/RAILS_ENV. You can add dependencies to your seed files
|
|
90
|
+
to enforce the run order. for example;
|
|
91
|
+
|
|
92
92
|
db/seeds/users.seeds.rb
|
|
93
93
|
```ruby
|
|
94
94
|
after :companies do
|
|
@@ -114,6 +114,16 @@ after :projects, :users do
|
|
|
114
114
|
end
|
|
115
115
|
```
|
|
116
116
|
|
|
117
|
+
If the dependencies are in one of the environment folders, you need to namespace the parent task:
|
|
118
|
+
|
|
119
|
+
db/seeds/development/users.seeds.rb
|
|
120
|
+
```ruby
|
|
121
|
+
after "development:companies" do
|
|
122
|
+
company = Company.find_by_name('Hatch')
|
|
123
|
+
company.users.create(:first_name => 'James', :last_name => 'McCarthy')
|
|
124
|
+
end
|
|
125
|
+
```
|
|
126
|
+
|
|
117
127
|
Contributors
|
|
118
128
|
============
|
|
119
129
|
```shell
|
|
@@ -123,6 +133,8 @@ git log | grep Author | sort | uniq
|
|
|
123
133
|
* James McCarthy
|
|
124
134
|
* Andy Triggs
|
|
125
135
|
* Philip Arndt
|
|
136
|
+
* Peter Suschlik
|
|
137
|
+
* Joost Baaij
|
|
126
138
|
|
|
127
139
|
Note on Patches/Pull Request
|
|
128
140
|
============================
|
data/Rakefile
CHANGED
data/TODO.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
* Add generator for seeds directories
|
|
2
2
|
* Add generator for seeds data
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Add ability to add or update records in place
|
|
4
|
+
* Make framework agnostic
|
data/lib/seedbank/dsl.rb
CHANGED
|
@@ -2,35 +2,44 @@ module Seedbank
|
|
|
2
2
|
module DSL
|
|
3
3
|
|
|
4
4
|
def self.included(base)
|
|
5
|
-
Rake::Task.
|
|
5
|
+
Rake::Task.send(:include, Seedbank::RenameTask)
|
|
6
6
|
Rake::Application.send(:include, Seedbank::TaskManager)
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
def
|
|
10
|
-
|
|
11
|
-
fq_name = Rake.application.instance_variable_get(:@scope).dup.push(name).join(':')
|
|
12
|
-
new_name = "#{fq_name}:original"
|
|
13
|
-
Rake::Task.rename_task(fq_name, new_name)
|
|
14
|
-
Rake::Task.define_task(*args, &block)
|
|
9
|
+
def override_seed_task(*args, &block)
|
|
10
|
+
Rake.application.override_task(*args, &block)
|
|
15
11
|
end
|
|
16
12
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
relative_root = seed_file.sub(seeds_root + '/', '')
|
|
20
|
-
scopes = File.dirname(relative_root).gsub(/^\./, '').split('/').unshift('seed')
|
|
13
|
+
def seed_task_from_file(seed_file)
|
|
14
|
+
scopes = scope_from_seed_file(seed_file)
|
|
21
15
|
fq_name = scopes.push(File.basename(seed_file, '.seeds.rb')).join(':')
|
|
16
|
+
args = Rake::Task.task_defined?('db:abort_if_pending_migrations') ? { fq_name => 'db:abort_if_pending_migrations' } : fq_name
|
|
22
17
|
|
|
23
|
-
args
|
|
24
|
-
|
|
18
|
+
define_seed_task(seed_file, args)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def glob_seed_files_matching(*args, &block)
|
|
22
|
+
Dir.glob(File.join(seeds_root, *args), &block)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def define_seed_task(seed_file, *args)
|
|
26
|
+
task = Rake::Task.define_task(*args) do |seed_task|
|
|
25
27
|
Seedbank::Runner.new(seed_task).module_eval(File.read(seed_file)) if File.exist?(seed_file)
|
|
26
28
|
end
|
|
27
29
|
task.add_description "Load the seed data from #{seed_file}"
|
|
28
|
-
|
|
30
|
+
task.name
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def scope_from_seed_file(seed_file)
|
|
34
|
+
dirname = Pathname.new(seed_file).dirname
|
|
35
|
+
return [] if dirname == seeds_root
|
|
36
|
+
relative = dirname.relative_path_from(seeds_root)
|
|
37
|
+
relative.to_s.split(File::Separator)
|
|
29
38
|
end
|
|
30
39
|
|
|
31
40
|
def seeds_root
|
|
32
|
-
Seedbank.seeds_root
|
|
41
|
+
Pathname.new Seedbank.seeds_root
|
|
33
42
|
end
|
|
34
43
|
|
|
35
44
|
end
|
|
36
|
-
end
|
|
45
|
+
end
|
data/lib/seedbank/rename_task.rb
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
module Seedbank
|
|
2
2
|
module TaskManager
|
|
3
3
|
|
|
4
|
+
def override_task(*args, &block)
|
|
5
|
+
name, params, deps = resolve_args(args.dup)
|
|
6
|
+
fq_name = current_scope.push(name).join(':')
|
|
7
|
+
new_name = "#{fq_name}:original"
|
|
8
|
+
unless Rake::Task.task_defined?(new_name)
|
|
9
|
+
rename_task(fq_name, new_name)
|
|
10
|
+
define_task(Rake::Task, *args, &block)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
4
14
|
def rename_task(fq_name, new_name)
|
|
5
|
-
|
|
6
|
-
|
|
15
|
+
task = @tasks.delete(fq_name)
|
|
16
|
+
task.rename(new_name)
|
|
17
|
+
@tasks[new_name] = task
|
|
7
18
|
end
|
|
8
19
|
|
|
9
20
|
end
|
data/lib/seedbank/version.rb
CHANGED
data/lib/tasks/seed.rake
CHANGED
|
@@ -3,42 +3,32 @@ namespace :db do
|
|
|
3
3
|
include Seedbank::DSL
|
|
4
4
|
|
|
5
5
|
base_dependencies = ['db:seed:original']
|
|
6
|
-
override_dependency = []
|
|
7
|
-
common_dependencies = []
|
|
6
|
+
override_dependency = ['db:seed:common']
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
common_dependencies
|
|
13
|
-
end
|
|
8
|
+
namespace :seed do
|
|
9
|
+
# Create seed tasks for all the seeds in seeds_path and add them to the dependency
|
|
10
|
+
# list along with the original db/seeds.rb.
|
|
11
|
+
common_dependencies = glob_seed_files_matching('*.seeds.rb').map { |seed_file| seed_task_from_file(seed_file) }
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
desc "Load the seed data from db/seeds.rb and db/seeds/*.seeds.rb."
|
|
14
|
+
task 'common' => base_dependencies + common_dependencies
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
environment = File.basename(e)
|
|
16
|
+
# Glob through the directories under seeds_path and create a task for each adding it to the dependency list.
|
|
17
|
+
# Then create a task for the environment
|
|
18
|
+
glob_seed_files_matching('/*/').each do |directory|
|
|
19
|
+
environment = File.basename(directory)
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
Dir.glob(File.join(seeds_root, environment, '*.seeds.rb')).sort.each do |seed_file|
|
|
26
|
-
environment_dependencies << define_seed_task(seed_file)
|
|
27
|
-
end
|
|
21
|
+
environment_dependencies = glob_seed_files_matching(environment, '*.seeds.rb').sort.map { |seed_file| seed_task_from_file(seed_file) }
|
|
28
22
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
EOT
|
|
32
|
-
task ['seed', environment] => ['db:seed:common'] + environment_dependencies
|
|
23
|
+
desc "Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/#{environment}/*.seeds.rb."
|
|
24
|
+
task environment => ['db:seed:common'] + environment_dependencies
|
|
33
25
|
|
|
34
|
-
|
|
26
|
+
override_dependency << "db:seed:#{environment}" if defined?(Rails) && Rails.env == environment
|
|
27
|
+
end
|
|
35
28
|
end
|
|
36
29
|
|
|
37
|
-
#
|
|
38
|
-
desc
|
|
39
|
-
|
|
40
|
-
ENVIRONMENT is the current environment in Rails.env.
|
|
41
|
-
EOT
|
|
42
|
-
override_task :seed => ['db:seed:common'] + override_dependency
|
|
30
|
+
# Override db:seed to run all the common and environments seeds plus the original db:seed.
|
|
31
|
+
desc "Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/ENVIRONMENT/*.seeds.rb. ENVIRONMENT is the current environment in Rails.env."
|
|
32
|
+
override_seed_task :seed => override_dependency
|
|
43
33
|
|
|
44
34
|
end
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
FakeModel.seed('development:users')
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe Seedbank::DSL do
|
|
4
|
+
|
|
5
|
+
describe "scope_from_seed_file" do
|
|
6
|
+
|
|
7
|
+
it "is added to the namesapce" do
|
|
8
|
+
ns = Rake.application.in_namespace(:seedy) { self }
|
|
9
|
+
|
|
10
|
+
ns.must_respond_to :scope_from_seed_file
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "in an environment directory" do
|
|
14
|
+
|
|
15
|
+
let(:seed_file) { File.expand_path('development/users.seeds.rb', Seedbank.seeds_root) }
|
|
16
|
+
let(:seed_namespace) { %w(development) }
|
|
17
|
+
|
|
18
|
+
subject { Seedbank::DSL.scope_from_seed_file seed_file }
|
|
19
|
+
|
|
20
|
+
it "returns the enviroment scope" do
|
|
21
|
+
subject.must_equal seed_namespace
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "in a nested directory" do
|
|
26
|
+
|
|
27
|
+
let(:seed_file) { File.expand_path('development/shared/accounts.seeds.rb', Seedbank.seeds_root) }
|
|
28
|
+
let(:seed_namespace) { %w(development shared) }
|
|
29
|
+
|
|
30
|
+
subject { Seedbank::DSL.scope_from_seed_file seed_file }
|
|
31
|
+
|
|
32
|
+
it "returns the nested scope" do
|
|
33
|
+
subject.must_equal seed_namespace
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "in seeds root" do
|
|
38
|
+
|
|
39
|
+
let(:seed_file) { File.expand_path('no_block.seeds.rb', Seedbank.seeds_root) }
|
|
40
|
+
|
|
41
|
+
subject { Seedbank::DSL.scope_from_seed_file seed_file }
|
|
42
|
+
|
|
43
|
+
it "returns an array" do
|
|
44
|
+
subject.must_be_instance_of Array
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "must be empty" do
|
|
48
|
+
subject.must_be_empty
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe "seeds_root" do
|
|
54
|
+
|
|
55
|
+
let(:seeds_root) { '/my/seeds/directory' }
|
|
56
|
+
|
|
57
|
+
subject { Seedbank::DSL.seeds_root }
|
|
58
|
+
|
|
59
|
+
it "returns a Pathname" do
|
|
60
|
+
flexmock(Seedbank).should_receive(:seeds_root).and_return(seeds_root).by_default
|
|
61
|
+
|
|
62
|
+
subject.must_equal Pathname.new(seeds_root)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe "glob_seed_files_matching" do
|
|
68
|
+
|
|
69
|
+
describe "with no namespace" do
|
|
70
|
+
|
|
71
|
+
let(:pattern) { '*.seeds.rb' }
|
|
72
|
+
|
|
73
|
+
it "returns all the files matching the pattern in seeds_root" do
|
|
74
|
+
expected_files = Dir.glob(File.join(Seedbank.seeds_root, pattern))
|
|
75
|
+
|
|
76
|
+
Seedbank::DSL.glob_seed_files_matching(pattern).must_equal expected_files
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe "with a namespace" do
|
|
82
|
+
|
|
83
|
+
let(:pattern) { '*.seeds.rb' }
|
|
84
|
+
let(:namespace) { 'development' }
|
|
85
|
+
|
|
86
|
+
it "returns all the files matching the pattern in seeds_root" do
|
|
87
|
+
expected_files = Dir.glob(File.join(Seedbank.seeds_root, namespace, pattern))
|
|
88
|
+
|
|
89
|
+
Seedbank::DSL.glob_seed_files_matching(namespace, pattern).must_equal expected_files
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe "define_seed_task" do
|
|
97
|
+
|
|
98
|
+
let(:name) { 'scoped:my_seed' }
|
|
99
|
+
let(:dependencies) { ['environment'] }
|
|
100
|
+
let(:seed_file) { File.expand_path('development/users.seeds.rb', Seedbank.seeds_root) }
|
|
101
|
+
|
|
102
|
+
it "returns a fully qualified task name" do
|
|
103
|
+
returned_name = Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
|
|
104
|
+
|
|
105
|
+
returned_name.must_equal name
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "creates a Rake Task" do
|
|
109
|
+
Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
|
|
110
|
+
|
|
111
|
+
Rake::Task[name].wont_be_nil
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "sets Rake Task dependencies" do
|
|
115
|
+
Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
|
|
116
|
+
|
|
117
|
+
Rake::Task[name].prerequisite_tasks.must_equal dependencies.map { |dependency| Rake::Task[dependency] }
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "sets Rake Task description" do
|
|
121
|
+
Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
|
|
122
|
+
|
|
123
|
+
Rake::Task[name].comment.must_equal "Load the seed data from #{seed_file}"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "sets Rake Task action to the seed_file contents" do
|
|
127
|
+
Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
|
|
128
|
+
|
|
129
|
+
flexmock(FakeModel).should_receive(:seed).with('development:users').once.ordered
|
|
130
|
+
|
|
131
|
+
Rake::Task[name].invoke
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
describe "override_seed_task" do
|
|
136
|
+
|
|
137
|
+
let(:arguments) { 'my_task' }
|
|
138
|
+
|
|
139
|
+
it "calls Rake::TaskManager#override_task" do
|
|
140
|
+
block = proc {}
|
|
141
|
+
flexmock(Rake.application).should_receive(:override_task).with(arguments, block).once
|
|
142
|
+
|
|
143
|
+
Seedbank::DSL.override_seed_task(arguments, &block)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe Seedbank::RenameTask do
|
|
4
|
+
|
|
5
|
+
describe "rename" do
|
|
6
|
+
|
|
7
|
+
let(:original_name) { 'original_name' }
|
|
8
|
+
let(:new_name) { 'new_name' }
|
|
9
|
+
|
|
10
|
+
subject { Rake::Task.define_task(original_name) }
|
|
11
|
+
|
|
12
|
+
before { subject.rename(new_name) }
|
|
13
|
+
|
|
14
|
+
it "changes the tasks name" do
|
|
15
|
+
subject.name.must_equal new_name
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe Seedbank::TaskManager do
|
|
4
|
+
|
|
5
|
+
describe "override_task" do
|
|
6
|
+
|
|
7
|
+
let(:task_name) { 'my_task' }
|
|
8
|
+
|
|
9
|
+
describe "with no original version of the task exists" do
|
|
10
|
+
|
|
11
|
+
it "appends :original to the task name" do
|
|
12
|
+
task = Rake::Task.define_task(task_name)
|
|
13
|
+
|
|
14
|
+
Rake.application.override_task(task_name)
|
|
15
|
+
|
|
16
|
+
task.must_equal Rake.application.lookup('original', [task_name])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "creates a new task in place of the original" do
|
|
20
|
+
Rake::Task.define_task(task_name)
|
|
21
|
+
task = Rake.application.override_task(task_name => [:dependency])
|
|
22
|
+
|
|
23
|
+
task.must_be_instance_of Rake::Task
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "adds the supplied dependencies to the new task" do
|
|
27
|
+
dependency = ['db:seed:dependency']
|
|
28
|
+
|
|
29
|
+
Rake::Task.define_task(task_name)
|
|
30
|
+
task = Rake.application.override_task(task_name => dependency)
|
|
31
|
+
|
|
32
|
+
task.prerequisites.must_equal dependency
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "adds the supplied action to the new task" do
|
|
36
|
+
action = proc {}
|
|
37
|
+
Rake::Task.define_task(task_name)
|
|
38
|
+
task = Rake.application.override_task(task_name, &action)
|
|
39
|
+
|
|
40
|
+
task.actions.must_equal [action]
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "when the original version of the task exists" do
|
|
45
|
+
|
|
46
|
+
let(:original_name) { [task_name, 'original'].join(':') }
|
|
47
|
+
|
|
48
|
+
it "leaves the original task in place" do
|
|
49
|
+
task = Rake::Task.define_task(task_name)
|
|
50
|
+
original = Rake::Task.define_task(original_name)
|
|
51
|
+
new_task = Rake.application.override_task(task_name)
|
|
52
|
+
|
|
53
|
+
Rake::Task[task_name].must_equal task
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "leaves the task:original task in place" do
|
|
57
|
+
task = Rake::Task.define_task(task_name)
|
|
58
|
+
original = Rake::Task.define_task(original_name)
|
|
59
|
+
new_task = Rake.application.override_task(task_name)
|
|
60
|
+
|
|
61
|
+
Rake::Task[original].must_equal original
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "does not create a new task" do
|
|
65
|
+
task = Rake::Task.define_task(task_name)
|
|
66
|
+
original = Rake::Task.define_task(original_name)
|
|
67
|
+
new_task = Rake.application.override_task(task_name)
|
|
68
|
+
|
|
69
|
+
new_task.must_be_nil
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "rename_task" do
|
|
75
|
+
|
|
76
|
+
let(:original_name) { 'original_name' }
|
|
77
|
+
let(:new_name) { 'new_name' }
|
|
78
|
+
|
|
79
|
+
before do
|
|
80
|
+
Rake::Task.define_task(original_name)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "changes the tasks name" do
|
|
84
|
+
task = Rake::Task[original_name]
|
|
85
|
+
flexmock(task).should_receive(:rename).with(new_name).once
|
|
86
|
+
|
|
87
|
+
Rake.application.rename_task(original_name, new_name)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "removes the original task name" do
|
|
91
|
+
Rake.application.rename_task(original_name, new_name)
|
|
92
|
+
|
|
93
|
+
Rake.application.lookup(original_name).must_be_nil
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "give the original task the new name" do
|
|
97
|
+
original_task = Rake::Task[original_name]
|
|
98
|
+
|
|
99
|
+
Rake.application.rename_task(original_name, new_name)
|
|
100
|
+
|
|
101
|
+
Rake.application.lookup(new_name).must_equal original_task
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'Seedbank rake.task' do
|
|
4
|
+
|
|
5
|
+
describe "seeds with dependency" do
|
|
6
|
+
|
|
7
|
+
subject { Rake.application.tasks_in_scope %w[db seed] }
|
|
8
|
+
|
|
9
|
+
it "creates all the seed tasks" do
|
|
10
|
+
seeds = %w(db:seed:circular1 db:seed:circular2 db:seed:common db:seed:dependency db:seed:dependency2
|
|
11
|
+
db:seed:dependent db:seed:dependent_on_nested db:seed:dependent_on_several db:seed:development
|
|
12
|
+
db:seed:development:users db:seed:no_block db:seed:original)
|
|
13
|
+
|
|
14
|
+
subject.map(&:to_s).must_equal seeds
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "common seeds in the root directory" do
|
|
19
|
+
|
|
20
|
+
Dir[File.expand_path('../../../dummy/db/seeds/*.seeds.rb', __FILE__)].each do |seed_file|
|
|
21
|
+
seed = File.basename(seed_file, '.seeds.rb')
|
|
22
|
+
|
|
23
|
+
describe seed do
|
|
24
|
+
|
|
25
|
+
subject { Rake.application.lookup(seed, %w[db seed]) }
|
|
26
|
+
|
|
27
|
+
it "is dependent on db:abort_if_pending_migrations" do
|
|
28
|
+
subject.prerequisites.must_equal %w[db:abort_if_pending_migrations]
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "db:seed:common" do
|
|
35
|
+
|
|
36
|
+
subject { Rake::Task['db:seed:common'] }
|
|
37
|
+
|
|
38
|
+
it "is dependent on the common seeds and db:seed:original" do
|
|
39
|
+
prerequisite_seeds = Dir[File.expand_path('../../../dummy/db/seeds/*.seeds.rb', __FILE__)].map do |seed_file|
|
|
40
|
+
['db', 'seed', File.basename(seed_file, '.seeds.rb')].join(':')
|
|
41
|
+
end.unshift('db:seed:original')
|
|
42
|
+
|
|
43
|
+
subject.prerequisites.must_equal prerequisite_seeds
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe "db:seed:original" do
|
|
48
|
+
|
|
49
|
+
subject { Rake::Task['db:seed:original'] }
|
|
50
|
+
|
|
51
|
+
it "has no dependencies" do
|
|
52
|
+
subject.prerequisites.must_be_empty
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe "when seeds are reloaded" do
|
|
56
|
+
|
|
57
|
+
before do
|
|
58
|
+
Dummy::Application.load_tasks
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "still has no dependencies" do
|
|
62
|
+
subject.prerequisites.must_be_empty
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe "environment seeds" do
|
|
68
|
+
|
|
69
|
+
Dir[File.expand_path('../../../dummy/db/seeds', __FILE__) + '/*/'].each do |environment_directory|
|
|
70
|
+
environment = File.basename(environment_directory)
|
|
71
|
+
|
|
72
|
+
describe "seeds in the #{environment} environment" do
|
|
73
|
+
|
|
74
|
+
Dir[File.expand_path("../../../dummy/db/seeds/#{environment}/*.seeds.rb", __FILE__)].each do |seed_file|
|
|
75
|
+
seed = File.basename(seed_file, '.seeds.rb')
|
|
76
|
+
|
|
77
|
+
describe seed do
|
|
78
|
+
|
|
79
|
+
subject { Rake.application.lookup(seed, ['db', 'seed', environment]) }
|
|
80
|
+
|
|
81
|
+
it "is dependent on db:abort_if_pending_migrations" do
|
|
82
|
+
subject.prerequisites.must_equal %w[db:abort_if_pending_migrations]
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
describe "db:seed:#{environment}" do
|
|
89
|
+
|
|
90
|
+
subject { Rake.application.lookup(environment, %w[db seed]) }
|
|
91
|
+
|
|
92
|
+
it "is dependent on the seeds in the environment directory" do
|
|
93
|
+
prerequisite_seeds = Dir[File.expand_path("../../../dummy/db/seeds/#{environment}/*.seeds.rb", __FILE__)].map do |seed_file|
|
|
94
|
+
['db', 'seed', environment, File.basename(seed_file, '.seeds.rb')].join(':')
|
|
95
|
+
end.unshift('db:seed:common')
|
|
96
|
+
|
|
97
|
+
subject.prerequisites.must_equal prerequisite_seeds
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe "db:seed task" do
|
|
104
|
+
|
|
105
|
+
subject { Rake::Task['db:seed'] }
|
|
106
|
+
|
|
107
|
+
describe "when no environment seeds are defined" do
|
|
108
|
+
|
|
109
|
+
it "is dependent on db:seed:common" do
|
|
110
|
+
subject.prerequisites.must_equal %w[db:seed:common]
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe "when environment seeds are defined" do
|
|
115
|
+
|
|
116
|
+
it "is dependent on db:seed:common" do
|
|
117
|
+
flexmock(Rails).should_receive(:env).and_return('development').once
|
|
118
|
+
|
|
119
|
+
Rake.application.clear
|
|
120
|
+
Dummy::Application.load_tasks
|
|
121
|
+
|
|
122
|
+
subject.prerequisites.must_equal %w[db:seed:common db:seed:development]
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
data/test/test_helper.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'rubygems'
|
|
2
2
|
require "flexmock"
|
|
3
|
-
require 'minitest/
|
|
3
|
+
require 'minitest/spec'
|
|
4
4
|
|
|
5
5
|
# Configure Rails Environment
|
|
6
6
|
environment = ENV["RAILS_ENV"] = 'test'
|
|
@@ -24,4 +24,5 @@ class Seedbank::Spec < MiniTest::Spec
|
|
|
24
24
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
MiniTest::Spec.register_spec_type(/^Seedbank
|
|
27
|
+
MiniTest::Spec.register_spec_type(/^Seedbank/i, Seedbank::Spec)
|
|
28
|
+
MiniTest::Unit.autorun
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: seedbank
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-
|
|
12
|
+
date: 2012-08-10 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: minitest
|
|
@@ -107,9 +107,16 @@ files:
|
|
|
107
107
|
- test/dummy/db/seeds/dependent.seeds.rb
|
|
108
108
|
- test/dummy/db/seeds/dependent_on_nested.seeds.rb
|
|
109
109
|
- test/dummy/db/seeds/dependent_on_several.seeds.rb
|
|
110
|
+
- test/dummy/db/seeds/development/shared/accounts.seeds.rb
|
|
111
|
+
- test/dummy/db/seeds/development/users.seeds.rb
|
|
110
112
|
- test/dummy/db/seeds/no_block.seeds.rb
|
|
113
|
+
- test/dummy/lib/tasks/dsl.rake
|
|
111
114
|
- test/dummy/script/rails
|
|
112
|
-
- test/seedbank/
|
|
115
|
+
- test/lib/seedbank/dsl_test.rb
|
|
116
|
+
- test/lib/seedbank/rename_task_test.rb
|
|
117
|
+
- test/lib/seedbank/runner_test.rb
|
|
118
|
+
- test/lib/seedbank/task_manager_test.rb
|
|
119
|
+
- test/lib/tasks/seed_rake_test.rb
|
|
113
120
|
- test/test_helper.rb
|
|
114
121
|
homepage: http://github.com/james2m/seedbank
|
|
115
122
|
licenses: []
|
|
@@ -166,7 +173,14 @@ test_files:
|
|
|
166
173
|
- test/dummy/db/seeds/dependent.seeds.rb
|
|
167
174
|
- test/dummy/db/seeds/dependent_on_nested.seeds.rb
|
|
168
175
|
- test/dummy/db/seeds/dependent_on_several.seeds.rb
|
|
176
|
+
- test/dummy/db/seeds/development/shared/accounts.seeds.rb
|
|
177
|
+
- test/dummy/db/seeds/development/users.seeds.rb
|
|
169
178
|
- test/dummy/db/seeds/no_block.seeds.rb
|
|
179
|
+
- test/dummy/lib/tasks/dsl.rake
|
|
170
180
|
- test/dummy/script/rails
|
|
171
|
-
- test/seedbank/
|
|
181
|
+
- test/lib/seedbank/dsl_test.rb
|
|
182
|
+
- test/lib/seedbank/rename_task_test.rb
|
|
183
|
+
- test/lib/seedbank/runner_test.rb
|
|
184
|
+
- test/lib/seedbank/task_manager_test.rb
|
|
185
|
+
- test/lib/tasks/seed_rake_test.rb
|
|
172
186
|
- test/test_helper.rb
|
|
File without changes
|