seedbank 0.3.0 → 0.4.0.pre

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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NTE3NWRlOGJlYzUzNDIyYjcyZTU0ZGZhZDllZDE5MmZmODM3NzE5Mw==
5
- data.tar.gz: !binary |-
6
- ODFhMmMxNTNhYTViNDY2NjA1ZGZiYWVmYTU2M2QxMTk0YWQ5ZmU4Mg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MWZkODAzNDBhYTg0MzQ0NDc1MzZkMWI5OTczYzhiZWJjYzAzMjE4MDQxNjU1
10
- NmFhZGIyYTM0MDY0OWQ5NDI5NDMxNTJkM2ZiNDczM2IyYTkxN2I1NmEyZTI4
11
- MDYyYTlkNmNmODU2MWJiMzRmMGZiOTQ1ZDQzNmZmZTU3OGVkMGQ=
12
- data.tar.gz: !binary |-
13
- MmJjZjc4ZjBhNmU0MGFkZGExYjdhYzcxNGE5ZTQ4ZGEzNzMwOGI1NWUwYzE3
14
- OGJiMGI5MDY5NWM1Nzc1ZmRiZDhhYTBmNTdmNWQ1OWNhNGQxYTAyZGVkYTJh
15
- NTk0N2FiZjUwMTU5NTIyNDQ4MjUxZDQ5YzVmZGJkNDkxZGRhNmU=
2
+ SHA1:
3
+ metadata.gz: eb10a690e591a93f925a5a62b4aa641f74117138
4
+ data.tar.gz: 0ce601ae90ec0e75e3a35b61c8960a240cf9113f
5
+ SHA512:
6
+ metadata.gz: fe5ae40e4d059b807059998d066f0b75ad897ed5bd6b664613fd0555c8e550bbdfeac9462dda2083a9d9fa9a432e36454f6e34fbb41a9ce190648f5989a5c3fb
7
+ data.tar.gz: d9062426df7dc228a3a767c1797894669cab812316c4b1ff6d7e226c87c8d00ed8561e53b6ada078e2af31a646a81d298f29b451a6a042ee3b350e627e7095a7
data/.gitignore CHANGED
@@ -22,7 +22,9 @@ pkg
22
22
  *.gem
23
23
  test/dummy/tmp
24
24
  test/dummy/log
25
+ .bundle
25
26
  .rvmrc
26
27
  .ruby-version
27
28
  .ruby-gemset
28
29
  Gemfile.lock
30
+ .bundle
data/.travis.yml CHANGED
@@ -5,10 +5,10 @@ rvm:
5
5
  - 1.8.7
6
6
  - 1.9.3
7
7
  - 2.0.0
8
+ - 2.1.0
8
9
  - jruby-18mode # JRuby in 1.8 mode
9
10
  - jruby-19mode # JRuby in 1.9 mode
10
- - rbx-18mode
11
- - rbx-19mode
11
+ - rbx-2
12
12
 
13
13
  gemfile:
14
14
  - gemfiles/rake0.9.gemfile
data/README.md CHANGED
@@ -1,15 +1,18 @@
1
1
  Seedbank
2
2
  ========
3
3
 
4
- Seedbank allows you to structure your Rails seed data instead of having it all dumped into one large file. I find my seed data tended to fall into two categories. 1. Stuff that the entire application requires. 2. Stuff to populate my development and staging environments.
4
+ Seedbank allows you to structure your Rails seed data instead of having it all dumped into one large file. I find my seed data tended to fall into two categories:
5
5
 
6
- Seedbank assumes common seed data is under db/seeds and any directories under db/seeds/ are specific to an environment, so db/seeds/development is contains all your development only seed data.
6
+ 1. Stuff that the entire application requires.
7
+ 2. Stuff to populate my development and staging environments.
8
+
9
+ Seedbank assumes that your common seed data is kept under db/seeds and any directories under `db/seeds/` are specific to an environment, so `db/seeds/development` contains all your **development-only** seed data.
7
10
 
8
11
  The reason behind Seedbank is laziness. When I checkout or re-visit a project I don't want to mess around getting my environment setup I just want the code and a database loaded with data in a known state. Since the Rails core team were good enough to give us rake db:setup it would be rude not to use it.
9
12
 
10
13
  rake db:setup # Create the database, load the schema, and initialize with the seed data (use db:reset to also drop the db first)
11
14
 
12
- To achieve this slothful aim Seedbank renames the original db:seed rake task to db:seed:original, makes it a dependency for all the Seedbank seeds and adds a new db:seed task that loads all the common seeds in db/seeds plus all the seeds for the current Rails environment.
15
+ To achieve this slothful aim, Seedbank renames the original db:seed rake task to db:seed:original, makes it a dependency for all the Seedbank seeds and adds a new db:seed task that loads all the common seeds in db/seeds plus all the seeds for the current Rails environment.
13
16
 
14
17
  Example
15
18
  =======
@@ -32,20 +35,20 @@ This would generate the following Rake tasks
32
35
  rake db:seed:foo # Load the seed data from db/seeds/foo.seeds.rb
33
36
  rake db:seed:original # Load the seed data from db/seeds.rb
34
37
 
35
- Therefor assuming RAILS_ENV is not set or is 'development'
38
+ Therefore, assuming `RAILS_ENV` is not set or it is "development":
36
39
 
37
40
  $ rake db:seed
38
41
 
39
- would load the seeds in db/seeds.rb, db/seeds/bar.seeds.rb, db/seeds/foo.seeds/rb and db/seeds/development/users.seeds.rb. Whereas
42
+ will load the seeds in `db/seeds.rb`, `db/seeds/bar.seeds.rb`, `db/seeds/foo.seeds.rb` and `db/seeds/development/users.seeds.rb`. Whereas, setting the `RAILS_ENV` variable, like so:
40
43
 
41
44
  $ RAILS_ENV=production db:seed
42
45
 
43
- would load the seeds in db/seeds.rb, db/seeds/bar.seeds.rb and db/seeds/foo.seeds/rb
46
+ will load the seeds in `db/seeds.rb`, `db/seeds/bar.seeds.rb` and `db/seeds/foo.seeds.rb`.
44
47
 
45
48
  Installation
46
49
  ============
47
50
 
48
- ### Rails 3.x
51
+ ### Rails 3.x and 4.x
49
52
 
50
53
  Add the seedbank gem to your Gemfile. In Gemfile:
51
54
 
@@ -63,9 +66,13 @@ Add to your config/environment.rb
63
66
  config.gem 'seedbank'
64
67
  ```
65
68
 
66
- Install the gem;
69
+ Install the gem:
67
70
 
68
71
  $ rake gems:install
72
+
73
+ Or, if you're using Bundler:
74
+
75
+ $ bundle install
69
76
 
70
77
  Then in the bottom of your application's Rakefile:
71
78
 
@@ -124,6 +131,23 @@ after "development:companies" do
124
131
  end
125
132
  ```
126
133
 
134
+ ### Defining and using methods
135
+
136
+ As seed files are evaluated within blocks, methods need to be defined and used as per below:
137
+
138
+ ```ruby
139
+ class << self
140
+ def create_user name
141
+ user = User.where(name: name).first_or_create
142
+ # ...
143
+ end
144
+ end
145
+
146
+ ['Greg', 'Daniel'].each do |name|
147
+ create_user name
148
+ end
149
+ ```
150
+
127
151
  *Note* - If you experience any errors like `Don't know how to build task 'db:seed:users'`. Ensure your specifying `after 'development:companies'` like the above example. This is the usual culprit (YMMV).
128
152
 
129
153
  Contributors
@@ -132,10 +156,10 @@ Contributors
132
156
  git log | grep Author | sort | uniq
133
157
  ```
134
158
 
135
- * James McCarthy
159
+ * Ahmad Sherif
136
160
  * Andy Triggs
137
- * Philip Arndt
138
- * Peter Suschlik
161
+ * Corey Purcell
162
+ * James McCarthy
139
163
  * Joost Baaij
140
164
  * Justin Smestad
141
165
  * Peter Suschlik
@@ -145,6 +169,7 @@ git log | grep Author | sort | uniq
145
169
  * pivotal-cloudplanner
146
170
  * vkill
147
171
 
172
+
148
173
  Note on Patches/Pull Request
149
174
  ============================
150
175
 
data/lib/seedbank/dsl.rb CHANGED
@@ -19,9 +19,13 @@ module Seedbank
19
19
  Dir.glob(File.join(seeds_root, *args), &block)
20
20
  end
21
21
 
22
+ def runner
23
+ @_seedbank_runner ||= Seedbank::Runner.new
24
+ end
25
+
22
26
  def define_seed_task(seed_file, *args)
23
27
  task = Rake::Task.define_task(*args) do |seed_task|
24
- Seedbank::Runner.new(seed_task).module_eval(File.read(seed_file), seed_file) if File.exist?(seed_file)
28
+ runner.evaluate(seed_task, seed_file) if File.exist?(seed_file)
25
29
  end
26
30
 
27
31
  task.add_description "Load the seed data from #{seed_file}"
@@ -1,14 +1,36 @@
1
1
  module Seedbank
2
- class Runner < Module
3
-
4
- def initialize(task)
5
- @task = task
6
- super()
2
+ class Runner
3
+
4
+ def initialize
5
+ @_memoized = {}
6
+ end
7
+
8
+ def let(name, &block)
9
+ name = String(name)
10
+
11
+ raise ArgumentError.new("#{name} is already defined") if respond_to?(name, true)
12
+
13
+ __eigenclass.instance_exec(name) do |name|
14
+ define_method(name) do
15
+ @_memoized.fetch(name) { |key| @_memoized[key] = instance_eval(&block) }
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ def let!(name, &block)
22
+ let(name, &block)
23
+ send name
24
+ end
25
+
26
+ def evaluate(seed_task, seed_file)
27
+ @_seed_task = seed_task
28
+ instance_eval(File.read(seed_file), seed_file)
7
29
  end
8
30
 
9
31
  # Run this seed after the specified dependencies have run
10
32
  # @param dependencies [Array] seeds to run before the block is executed
11
- #
33
+ #
12
34
  # If a block is specified the contents of the block are executed after all the
13
35
  # dependencies have been executed.
14
36
  #
@@ -22,10 +44,24 @@ module Seedbank
22
44
  def after(*dependencies, &block)
23
45
  dependencies.flatten!
24
46
  dependencies.map! { |dep| "db:seed:#{dep}"}
25
- dependent_task_name = @task.name + ':body'
26
- dependent_task = Rake::Task.define_task(dependent_task_name => dependencies, &block)
47
+ dependent_task_name = @_seed_task.name + ':body'
48
+
49
+ if Rake::Task.task_defined?(dependent_task_name)
50
+ dependent_task = Rake::Task[dependent_task_name]
51
+ else
52
+ dependent_task = Rake::Task.define_task(dependent_task_name => dependencies, &block)
53
+ end
54
+
27
55
  dependent_task.invoke
28
56
  end
29
-
57
+
58
+ private
59
+
60
+ def __eigenclass
61
+ class << self
62
+ self
63
+ end
64
+ end
65
+
30
66
  end
31
67
  end
@@ -1,3 +1,3 @@
1
1
  module Seedbank
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0.pre"
3
3
  end
data/lib/tasks/seed.rake CHANGED
@@ -28,7 +28,7 @@ namespace :db do
28
28
 
29
29
  if Rails.version > '4'
30
30
  original_seeds_file = Rails.application.paths["db/seeds.rb"].existent.first
31
- elsif Rails.version > '3'
31
+ elsif Rails.version > '3.1'
32
32
  original_seeds_file = Rails.application.paths["db/seeds"].existent.first
33
33
  else
34
34
  original_seeds_file = Rails.root.join("db","seeds").children.first.to_s
data/seedbank.gemspec CHANGED
@@ -35,26 +35,25 @@ Gem::Specification.new do |s|
35
35
  "README.md"
36
36
  ]
37
37
 
38
- s.add_development_dependency "minitest", "~> 3.2"
39
- s.add_development_dependency "flexmock"
40
- s.add_development_dependency "rails", "~> 3.2.6"
41
-
38
+ s.add_development_dependency "minitest", "~> 5.0"
39
+ s.add_development_dependency "rails", "~> 3.2"
40
+
42
41
  s.post_install_message = %q{
43
42
  ================================================================================
44
43
 
45
44
  Rails 2.x
46
45
  ---------
47
- If you are using Seedbank with Rails 2.x you will need to place the following at
46
+ If you are using Seedbank with Rails 2.x you will need to place the following at
48
47
  the end of your Rakefile so Rubygems can load the seedbank tasks;
49
48
 
50
49
  require 'seedbank'
51
50
  Seedbank.load_tasks if defined?(Seedbank)
52
51
 
53
- Rails 3.x
52
+ Rails 3.x and 4.x
54
53
  ---------
55
54
  Your work here is done!
56
55
 
57
56
  ================================================================================
58
- }
57
+ }
59
58
  end
60
59
 
@@ -0,0 +1,5 @@
1
+ after('with_block_memo') do
2
+ block_let
3
+ inline_let
4
+ inline_method
5
+ end
@@ -0,0 +1,5 @@
1
+ after('with_inline_memo') do
2
+ FakeModel.seed 'with_block_memo'
3
+ let(:block_let) { FakeModel.calling_let 'BLOCK_LET' }
4
+ let!(:block_let!) { FakeModel.calling_let! 'BLOCK_LET!' }
5
+ end
@@ -0,0 +1,7 @@
1
+ def inline_method
2
+ FakeModel.calling_method 'inline_method'
3
+ end
4
+
5
+ FakeModel.seed 'with_inline_memo'
6
+ let(:inline_let) { FakeModel.calling_let 'INLINE_LET' }
7
+ let!(:inline_let!) { FakeModel.calling_let! 'INLINE_LET!' }
@@ -57,9 +57,11 @@ describe Seedbank::DSL do
57
57
  subject { Seedbank::DSL.send(:seeds_root) }
58
58
 
59
59
  it "returns a Pathname" do
60
- flexmock(Seedbank).should_receive(:seeds_root).and_return(seeds_root).by_default
60
+ Seedbank.stub(:seeds_root, seeds_root) do
61
61
 
62
- subject.must_equal Pathname.new(seeds_root)
62
+ subject.must_equal Pathname.new(seeds_root)
63
+
64
+ end
63
65
  end
64
66
 
65
67
  end
@@ -95,53 +97,54 @@ describe Seedbank::DSL do
95
97
 
96
98
  describe "define_seed_task" do
97
99
 
98
- let(:name) { 'scoped:my_seed' }
100
+ let(:task_name) { 'scoped:my_seed' }
99
101
  let(:dependencies) { ['environment'] }
100
102
  let(:seed_file) { File.expand_path('development/users.seeds.rb', Seedbank.seeds_root) }
101
103
 
102
104
  it "returns a fully qualified task name" do
103
- returned_name = Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
105
+ returned_name = Seedbank::DSL.define_seed_task(seed_file, task_name => dependencies)
104
106
 
105
- returned_name.must_equal name
107
+ returned_name.must_equal task_name
106
108
  end
107
109
 
108
110
  it "creates a Rake Task" do
109
- Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
111
+ Seedbank::DSL.define_seed_task(seed_file, task_name => dependencies)
110
112
 
111
- Rake::Task[name].wont_be_nil
113
+ Rake::Task[task_name].wont_be_nil
112
114
  end
113
115
 
114
116
  it "sets Rake Task description" do
115
- Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
117
+ Seedbank::DSL.define_seed_task(seed_file, task_name => dependencies)
116
118
 
117
- Rake::Task[name].comment.must_equal "Load the seed data from #{seed_file}"
119
+ Rake::Task[task_name].comment.must_equal "Load the seed data from #{seed_file}"
118
120
  end
119
121
 
120
122
  it "sets Rake Task action to the seed_file contents" do
121
- Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
123
+ Seedbank::DSL.define_seed_task(seed_file, task_name => dependencies)
122
124
 
123
- flexmock(FakeModel).should_receive(:seed).with('development:users').once.ordered
125
+ FakeModel.expect :seed, true, ['development:users']
124
126
 
125
- Rake::Task[name].invoke
127
+ Rake::Task[task_name].invoke
126
128
  end
127
129
 
128
130
  describe "when db:abort_if_pending_migrations exists" do
129
131
  it "sets Rake Task dependencies" do
130
- Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
132
+ Seedbank::DSL.define_seed_task(seed_file, task_name => dependencies)
131
133
  expected_dependencies = dependencies.map { |dependency| Rake::Task[dependency] }
132
134
  expected_dependencies << Rake::Task['db:abort_if_pending_migrations']
133
135
 
134
- Rake::Task[name].prerequisite_tasks.must_equal expected_dependencies
136
+ Rake::Task[task_name].prerequisite_tasks.must_equal expected_dependencies
135
137
  end
136
138
  end
137
139
 
138
140
  describe "when db:abort_if_pending_migrations does not exist" do
139
141
  it "sets Rake Task dependencies" do
140
- flexmock(Rake::Task).should_receive(:task_defined?).and_return(false).by_default
142
+ Rake.application.clear
143
+ Rake::Task.define_task 'environment'
141
144
 
142
- Seedbank::DSL.define_seed_task(seed_file, name => dependencies)
145
+ Seedbank::DSL.define_seed_task(seed_file, task_name => dependencies)
143
146
 
144
- Rake::Task[name].prerequisite_tasks.must_equal dependencies.map { |dependency| Rake::Task[dependency] }
147
+ Rake::Task[task_name].prerequisite_tasks.must_equal dependencies.map { |dependency| Rake::Task[dependency] }
145
148
  end
146
149
  end
147
150
  end
@@ -150,29 +153,29 @@ describe Seedbank::DSL do
150
153
 
151
154
  describe "when no task exists to override" do
152
155
 
153
- let(:name) { 'my_task' }
156
+ let(:task_name) { 'my_task' }
154
157
  let(:dependencies) { ['seedy:users'] }
155
158
 
156
159
  it "creates a new task" do
157
- Seedbank::DSL.override_seed_task(name => dependencies)
160
+ Seedbank::DSL.override_seed_task(task_name => dependencies)
158
161
 
159
- Rake::Task[name].wont_be_nil
162
+ Rake::Task[task_name].wont_be_nil
160
163
  end
161
164
 
162
165
  it "applies the dependencies" do
163
166
  expected_dependencies = dependencies.map { |dependency| Rake::Task[dependency] }
164
- Seedbank::DSL.override_seed_task(name => dependencies)
167
+ Seedbank::DSL.override_seed_task(task_name => dependencies)
165
168
 
166
- Rake::Task[name].prerequisite_tasks.must_equal expected_dependencies
169
+ Rake::Task[task_name].prerequisite_tasks.must_equal expected_dependencies
167
170
  end
168
171
 
169
172
  it "applies the description" do
170
173
  description = 'Expected Description'
171
174
  Rake.application.last_description = description
172
175
 
173
- Seedbank::DSL.override_seed_task(name => dependencies)
176
+ Seedbank::DSL.override_seed_task(task_name => dependencies)
174
177
 
175
- Rake::Task[name].full_comment.must_equal description
178
+ Rake::Task[task_name].full_comment.must_equal description
176
179
  end
177
180
  end
178
181
 
@@ -2,19 +2,33 @@ require 'test_helper'
2
2
 
3
3
  describe Seedbank::Runner do
4
4
 
5
- before do
6
- flexmock(FakeModel)
7
- end
8
-
9
5
  describe "seeds with dependency" do
10
6
 
11
7
  subject { Rake::Task['db:seed:dependent'] }
12
8
 
13
9
  it "runs the dependencies in order" do
14
- FakeModel.should_receive(:seed).with('dependency').once.ordered
15
- FakeModel.should_receive(:seed).with('dependent').once.ordered
10
+ FakeModel.expect :seed, true, ['dependency']
11
+ FakeModel.expect :seed, true, ['dependent']
16
12
 
17
13
  subject.invoke
14
+
15
+ FakeModel.verify
16
+ end
17
+
18
+ it "executes the body of the dependencies exactly once per invocation" do
19
+ FakeModel.expect :seed, true, ['dependency']
20
+ FakeModel.expect :seed, true, ['dependent']
21
+ FakeModel.expect :seed, true, ['dependency']
22
+ FakeModel.expect :seed, true, ['dependent']
23
+
24
+ subject.invoke
25
+
26
+ # Allow all tasks to be re-executed, including dependencies
27
+ Rake.application.tasks.each { |t| t.reenable }
28
+
29
+ subject.invoke
30
+
31
+ FakeModel.verify
18
32
  end
19
33
  end
20
34
 
@@ -23,11 +37,13 @@ describe Seedbank::Runner do
23
37
  subject { Rake::Task['db:seed:dependent_on_several'] }
24
38
 
25
39
  it "runs the dependencies in order" do
26
- FakeModel.should_receive(:seed).with('dependency').once.ordered
27
- FakeModel.should_receive(:seed).with('dependency2').once.ordered
28
- FakeModel.should_receive(:seed).with('dependent on several').once.ordered
40
+ FakeModel.expect :seed, true, ['dependency']
41
+ FakeModel.expect :seed, true, ['dependency2']
42
+ FakeModel.expect :seed, true, ['dependent on several']
29
43
 
30
44
  subject.invoke
45
+
46
+ FakeModel.verify
31
47
  end
32
48
  end
33
49
 
@@ -36,12 +52,14 @@ describe Seedbank::Runner do
36
52
  subject { Rake::Task['db:seed:dependent_on_nested'] }
37
53
 
38
54
  it "runs all dependencies in order" do
39
- FakeModel.should_receive(:seed).with('dependency').once.ordered
40
- FakeModel.should_receive(:seed).with('dependent').once.ordered
41
- FakeModel.should_receive(:seed).with('dependency2').once.ordered
42
- FakeModel.should_receive(:seed).with('dependent on nested').once.ordered
55
+ FakeModel.expect :seed, true, ['dependency']
56
+ FakeModel.expect :seed, true, ['dependent']
57
+ FakeModel.expect :seed, true, ['dependency2']
58
+ FakeModel.expect :seed, true, ['dependent on nested']
43
59
 
44
60
  subject.invoke
61
+
62
+ FakeModel.verify
45
63
  end
46
64
 
47
65
  end
@@ -51,16 +69,92 @@ describe Seedbank::Runner do
51
69
  subject { Rake::Task['db:seed:no_block'] }
52
70
 
53
71
  it "runs the dependencies" do
54
- FakeModel.should_receive(:seed).with('dependency').once.ordered
72
+ FakeModel.expect :seed, true, ['dependency']
55
73
 
56
74
  subject.invoke
75
+
76
+ FakeModel.verify
57
77
  end
58
78
  end
59
79
 
60
80
  describe "let" do
61
81
 
62
- it "does something" do
82
+ describe "evaluates dependencies in order" do
83
+
84
+ subject { Rake::Task['db:seed:reference_memos'] }
85
+
86
+ it "runs the dependencies in order" do
87
+ FakeModel.expect :seed, true, ['with_inline_memo']
88
+ FakeModel.expect :seed, true, ['with_block_memo']
89
+ FakeModel.expect :calling_let, true, ['BLOCK_LET']
90
+ FakeModel.expect :calling_let, true, ['INLINE_LET']
91
+
92
+ def FakeModel.calling_let!(*args); end
93
+ def FakeModel.calling_method(*args); end
94
+
95
+ subject.invoke
96
+
97
+ FakeModel.verify
98
+ end
99
+ end
100
+
101
+ describe "a previously defined method" do
102
+
103
+ let(:runner) { Seedbank::Runner.new }
63
104
 
105
+ before { runner.let(:existing) {} }
106
+
107
+ %w(__eigenclass existing let let evaluate after).each do |name|
108
+ it 'raises ArgumentError' do
109
+ assert_raises(ArgumentError, Regexp.new(name)) do
110
+ runner.let(name)
111
+ end
112
+ end
113
+ end
114
+ end
115
+
116
+ end
117
+
118
+ describe "let!" do
119
+
120
+ describe "evaluates dependencies in order" do
121
+
122
+ subject { Rake::Task['db:seed:reference_memos'] }
123
+
124
+ it "runs the dependencies in order" do
125
+ FakeModel.expect :calling_let!, true, ['INLINE_LET!']
126
+ FakeModel.expect :calling_let!, true, ['BLOCK_LET!']
127
+
128
+ def FakeModel.seed(*args); end
129
+ def FakeModel.calling_let(*args); end
130
+ def FakeModel.calling_method(*args); end
131
+
132
+ subject.invoke
133
+
134
+ FakeModel.verify
135
+ end
64
136
  end
137
+
65
138
  end
139
+
140
+ describe "defining an inline method" do
141
+
142
+ describe "evaluates dependencies in order" do
143
+
144
+ subject { Rake::Task['db:seed:reference_memos'] }
145
+
146
+ it "runs the dependencies in order" do
147
+ FakeModel.expect :calling_method, true, ['inline_method']
148
+
149
+ def FakeModel.seed(*args); end
150
+ def FakeModel.calling_let(*args); end
151
+ def FakeModel.calling_let!(*args); end
152
+
153
+ subject.invoke
154
+
155
+ FakeModel.verify
156
+ end
157
+ end
158
+ end
159
+
66
160
  end
@@ -9,7 +9,7 @@ describe 'Seedbank rake.task' do
9
9
  it "creates all the seed tasks" do
10
10
  seeds = %w(db:seed:circular1 db:seed:circular2 db:seed:common db:seed:dependency db:seed:dependency2
11
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)
12
+ db:seed:development:users db:seed:no_block db:seed:original db:seed:reference_memos db:seed:with_block_memo db:seed:with_inline_memo)
13
13
 
14
14
  subject.map(&:to_s).must_equal seeds
15
15
  end
@@ -114,12 +114,14 @@ describe 'Seedbank rake.task' do
114
114
  describe "when environment seeds are defined" do
115
115
 
116
116
  it "is dependent on db:seed:common" do
117
- flexmock(Rails).should_receive(:env).and_return('development').once
117
+ Rails.stub(:env, 'development') do
118
118
 
119
- Rake.application.clear
120
- Dummy::Application.load_tasks
119
+ Rake.application.clear
120
+ Dummy::Application.load_tasks
121
+
122
+ subject.prerequisites.must_equal %w[db:seed:common db:seed:development]
121
123
 
122
- subject.prerequisites.must_equal %w[db:seed:common db:seed:development]
124
+ end
123
125
  end
124
126
  end
125
127
  end
data/test/test_helper.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
- require "flexmock"
3
- require 'minitest/spec'
2
+ require 'minitest/autorun'
4
3
 
5
4
  # Configure Rails Environment
6
5
  environment = ENV["RAILS_ENV"] = 'test'
@@ -14,15 +13,15 @@ Seedbank.seeds_root = File.expand_path('dummy/db/seeds', __FILE__)
14
13
 
15
14
  class Seedbank::Spec < MiniTest::Spec
16
15
 
17
- include FlexMock::TestCase
18
-
19
16
  def setup
20
17
  Rake.application = Rake::Application.new
21
18
  Dummy::Application.load_tasks
19
+ Object.const_set :FakeModel, MiniTest::Mock.new
20
+ TOPLEVEL_BINDING.eval('self').send(:instance_variable_set, :@_seedbank_runner, Seedbank::Runner.new)
22
21
  super
23
22
  end
24
23
 
25
24
  end
26
25
 
27
26
  MiniTest::Spec.register_spec_type(/^Seedbank/i, Seedbank::Spec)
28
- MiniTest::Unit.autorun
27
+ MiniTest.autorun
metadata CHANGED
@@ -1,58 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seedbank
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - James McCarthy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-03 00:00:00.000000000 Z
11
+ date: 2013-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: '5.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.2'
27
- - !ruby/object:Gem::Dependency
28
- name: flexmock
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'
26
+ version: '5.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rails
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - ~>
31
+ - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: 3.2.6
33
+ version: '3.2'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - ~>
38
+ - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: 3.2.6
55
- description: ! "\n Extends Rails seeds to split out complex seeds into multiple\n
40
+ version: '3.2'
41
+ description: "\n Extends Rails seeds to split out complex seeds into multiple\n
56
42
  \ files and lets each environment have it's own seeds.\n "
57
43
  email: james2mccarthy@gmail.com
58
44
  executables: []
@@ -61,8 +47,8 @@ extra_rdoc_files:
61
47
  - MIT-LICENSE
62
48
  - README.md
63
49
  files:
64
- - .gitignore
65
- - .travis.yml
50
+ - ".gitignore"
51
+ - ".travis.yml"
66
52
  - Gemfile
67
53
  - MIT-LICENSE
68
54
  - README.md
@@ -79,7 +65,6 @@ files:
79
65
  - seedbank.gemspec
80
66
  - test/dummy/Rakefile
81
67
  - test/dummy/app/controllers/application_controller.rb
82
- - test/dummy/app/models/fake_model.rb
83
68
  - test/dummy/config.ru
84
69
  - test/dummy/config/application.rb
85
70
  - test/dummy/config/boot.rb
@@ -103,6 +88,9 @@ files:
103
88
  - test/dummy/db/seeds/development/shared/accounts.seeds.rb
104
89
  - test/dummy/db/seeds/development/users.seeds.rb
105
90
  - test/dummy/db/seeds/no_block.seeds.rb
91
+ - test/dummy/db/seeds/reference_memos.seeds.rb
92
+ - test/dummy/db/seeds/with_block_memo.seeds.rb
93
+ - test/dummy/db/seeds/with_inline_memo.seeds.rb
106
94
  - test/dummy/lib/tasks/dsl.rake
107
95
  - test/dummy/script/rails
108
96
  - test/lib/seedbank/dsl_test.rb
@@ -113,29 +101,29 @@ homepage: http://github.com/james2m/seedbank
113
101
  licenses:
114
102
  - MIT
115
103
  metadata: {}
116
- post_install_message: ! "\n ================================================================================\n\n
104
+ post_install_message: "\n ================================================================================\n\n
117
105
  \ Rails 2.x\n ---------\n If you are using Seedbank with Rails 2.x you will need
118
- to place the following at \n the end of your Rakefile so Rubygems can load the
119
- seedbank tasks;\n\n require 'seedbank'\n Seedbank.load_tasks if defined?(Seedbank)\n\n
120
- \ Rails 3.x\n ---------\n Your work here is done!\n\n ================================================================================\n
106
+ to place the following at\n the end of your Rakefile so Rubygems can load the seedbank
107
+ tasks;\n\n require 'seedbank'\n Seedbank.load_tasks if defined?(Seedbank)\n\n
108
+ \ Rails 3.x and 4.x\n ---------\n Your work here is done!\n\n ================================================================================\n
121
109
  \ "
122
110
  rdoc_options:
123
- - --charset=UTF-8
111
+ - "--charset=UTF-8"
124
112
  require_paths:
125
113
  - lib
126
114
  required_ruby_version: !ruby/object:Gem::Requirement
127
115
  requirements:
128
- - - ! '>='
116
+ - - ">="
129
117
  - !ruby/object:Gem::Version
130
118
  version: '0'
131
119
  required_rubygems_version: !ruby/object:Gem::Requirement
132
120
  requirements:
133
- - - ! '>='
121
+ - - ">="
134
122
  - !ruby/object:Gem::Version
135
123
  version: 1.2.0
136
124
  requirements: []
137
125
  rubyforge_project:
138
- rubygems_version: 2.0.5
126
+ rubygems_version: 2.2.2
139
127
  signing_key:
140
128
  specification_version: 4
141
129
  summary: Extends Rails seeds to split out complex seeds into their own file and have
@@ -143,7 +131,6 @@ summary: Extends Rails seeds to split out complex seeds into their own file and
143
131
  test_files:
144
132
  - test/dummy/Rakefile
145
133
  - test/dummy/app/controllers/application_controller.rb
146
- - test/dummy/app/models/fake_model.rb
147
134
  - test/dummy/config.ru
148
135
  - test/dummy/config/application.rb
149
136
  - test/dummy/config/boot.rb
@@ -167,6 +154,9 @@ test_files:
167
154
  - test/dummy/db/seeds/development/shared/accounts.seeds.rb
168
155
  - test/dummy/db/seeds/development/users.seeds.rb
169
156
  - test/dummy/db/seeds/no_block.seeds.rb
157
+ - test/dummy/db/seeds/reference_memos.seeds.rb
158
+ - test/dummy/db/seeds/with_block_memo.seeds.rb
159
+ - test/dummy/db/seeds/with_inline_memo.seeds.rb
170
160
  - test/dummy/lib/tasks/dsl.rake
171
161
  - test/dummy/script/rails
172
162
  - test/lib/seedbank/dsl_test.rb
@@ -1,7 +0,0 @@
1
- class FakeModel
2
-
3
- def self.seed(seed)
4
- puts "Running seed: #{seed}"
5
- end
6
-
7
- end