sequel-seed 0.1.4 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG +9 -0
- data/README.md +2 -2
- data/lib/sequel/extensions/seed.rb +98 -67
- data/spec/extensions/seed_spec.rb +135 -76
- data/spec/spec_helper.rb +29 -33
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5a1af2b07c026c54b028ea8b4153e4523a44faa
|
4
|
+
data.tar.gz: 1e1a6ed02f2cf6b09f9f7e30c54e8eb36e2004e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c10ccb47562c8bb4b6436a81220ebb9f8f88d6abca4388e6c6aa2350eb6f86a83feb97e20c7272817ca43479abf6c1086a7c2db476b8c02487ba5ccce85dcca
|
7
|
+
data.tar.gz: ba11dee2ccb4b7ccb28b05a0e79897462764e5701a33adc7430e886fe9f664992ae7c6c031034d40fbea2cba9f1f8def3d11159fb4ad462190889e01ae46b62f
|
data/CHANGELOG
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
## Changelog
|
2
2
|
|
3
|
+
### 0.2.1
|
4
|
+
- API changes to protect Sequel's namespace
|
5
|
+
- `Sequel::Seed.environment = :env` is also `Sequel::Seed.setup(:env)`
|
6
|
+
- `Sequel::Seed` class is now `Sequel::Seed::Base`; `Sequel::Seed` is now a module;
|
7
|
+
thus, there's no way to proxy the old `Sequel::Seed.apply` to the new `Sequel::Seed::Base.apply`
|
8
|
+
- `Sequel::Seeder` and `Sequel::TimestampSeeder` are still the same (no changes in interface as well)
|
9
|
+
- Improve test coverage to guarantee backward compatibility
|
10
|
+
- Minor hotfixes
|
11
|
+
|
3
12
|
### 0.1.4
|
4
13
|
- Environment references could be a Symbol or String
|
5
14
|
- Improve test coverage
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Sequel::Seed [](http://badge.fury.io/rb/sequel-seed)
|
1
|
+
# Sequel::Seed [](http://badge.fury.io/rb/sequel-seed) [](https://travis-ci.org/earaujoassis/sequel-seed) [](https://coveralls.io/github/earaujoassis/sequel-seed?branch=master)
|
2
2
|
|
3
3
|
> A Sequel extension to make seeds/fixtures manageable like migrations
|
4
4
|
|
@@ -22,7 +22,7 @@ end
|
|
22
22
|
Set the environment
|
23
23
|
|
24
24
|
```rb
|
25
|
-
Sequel::Seed.
|
25
|
+
Sequel::Seed.setup :development
|
26
26
|
```
|
27
27
|
|
28
28
|
Load the extension
|
@@ -1,9 +1,10 @@
|
|
1
1
|
##
|
2
2
|
# Extension based upon Sequel::Migration and Sequel::Migrator
|
3
3
|
#
|
4
|
-
# Adds the Sequel::Seed and Sequel::
|
5
|
-
# the user to easily group entity changes and seed/fixture
|
6
|
-
# to a newer version only (unlike migrations, seeds are not
|
4
|
+
# Adds the Sequel::Seed module and the Sequel::Seed::Base and Sequel::Seeder
|
5
|
+
# classes, which allow the user to easily group entity changes and seed/fixture
|
6
|
+
# the database to a newer version only (unlike migrations, seeds are not
|
7
|
+
# directional).
|
7
8
|
#
|
8
9
|
# To load the extension:
|
9
10
|
#
|
@@ -11,79 +12,109 @@
|
|
11
12
|
#
|
12
13
|
# It is also important to set the environment:
|
13
14
|
#
|
14
|
-
# Sequel::Seed.
|
15
|
+
# Sequel::Seed.setup(:development)
|
15
16
|
|
16
17
|
module Sequel
|
17
|
-
class
|
18
|
+
class << self
|
19
|
+
##
|
20
|
+
# Creates a Seed subclass according to the given +block+.
|
21
|
+
#
|
22
|
+
# The +env_labels+ lists on which environments the seed should be applicable.
|
23
|
+
# If the current environment is not applicable, the seed is ignored. On the
|
24
|
+
# other hand, if it is applicable, it will be listed in Seed.descendants and
|
25
|
+
# subject to application (if it was not applied yet).
|
26
|
+
#
|
27
|
+
# Expected seed call:
|
28
|
+
#
|
29
|
+
# Sequel.seed(:test) do # seed is only applicable to the test environment
|
30
|
+
# def run
|
31
|
+
# Entity.create attribute: value
|
32
|
+
# end
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# Wildcard seed:
|
36
|
+
#
|
37
|
+
# Sequel.seed do # seed is applicable to every environment, or no environment
|
38
|
+
# def run
|
39
|
+
# Entity.create attribute: value
|
40
|
+
# end
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
|
44
|
+
def seed *env_labels, &block
|
45
|
+
return if env_labels.length > 0 && !env_labels.map(&:to_sym).include?(Seed.environment)
|
46
|
+
|
47
|
+
seed = Class.new(Seed::Base)
|
48
|
+
seed.class_eval(&block) if block_given?
|
49
|
+
Seed::Base.inherited(seed) unless Seed::Base.descendants.include?(seed)
|
50
|
+
seed
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
module Seed
|
18
55
|
class << self
|
19
56
|
attr_reader :environment
|
20
|
-
end
|
21
57
|
|
22
|
-
|
23
|
-
|
24
|
-
|
58
|
+
##
|
59
|
+
# Sets the Sequel::Seed's environment to +env+ over which the Seeds should be applied
|
60
|
+
def setup(env, opts = {})
|
61
|
+
@environment = env.to_sym
|
62
|
+
@options ||= {}
|
63
|
+
@options[:disable_warning] ||= opts[:disable_warning] || false
|
64
|
+
end
|
25
65
|
|
26
|
-
|
27
|
-
|
28
|
-
|
66
|
+
##
|
67
|
+
# Keep backward compatibility on how to setup the Sequel::Seed environment
|
68
|
+
#
|
69
|
+
# Sets the environment +env+ over which the Seeds should be applied
|
70
|
+
def environment=(env)
|
71
|
+
setup(env)
|
72
|
+
end
|
29
73
|
|
30
|
-
|
31
|
-
|
32
|
-
|
74
|
+
##
|
75
|
+
# Keep backward compatibility on how to get Sequel::Seed::Base class descendants
|
76
|
+
def descendants
|
77
|
+
Base.descendants
|
78
|
+
end
|
33
79
|
|
34
|
-
|
35
|
-
|
80
|
+
##
|
81
|
+
# Keep backward compatibility on how to append a Sequel::Seed::Base descendant class
|
82
|
+
def inherited(base)
|
83
|
+
Base.inherited(base)
|
84
|
+
end
|
36
85
|
end
|
37
86
|
|
38
|
-
|
39
|
-
|
40
|
-
|
87
|
+
class Base
|
88
|
+
class << self
|
89
|
+
def apply
|
90
|
+
new.run
|
91
|
+
end
|
41
92
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
# The +env_labels+ lists on which environments the seed should be applicable.
|
46
|
-
# If the current environment is not applicable, the seed is ignored. On the
|
47
|
-
# other hand, if it is applicable, it will be listed in Seed.descendants and
|
48
|
-
# subject to application (if it was not applied yet).
|
49
|
-
#
|
50
|
-
# Expected seed call:
|
51
|
-
#
|
52
|
-
# Sequel.seed(:test) do # seed is only applicable to the test environment
|
53
|
-
# def run
|
54
|
-
# Entity.create attribute: value
|
55
|
-
# end
|
56
|
-
# end
|
57
|
-
#
|
58
|
-
# Wildcard seed:
|
59
|
-
#
|
60
|
-
# Sequel.seed do # seed is applicable to every environment, or no environment
|
61
|
-
# def run
|
62
|
-
# Entity.create attribute: value
|
63
|
-
# end
|
64
|
-
# end
|
65
|
-
#
|
93
|
+
def descendants
|
94
|
+
@descendants ||= []
|
95
|
+
end
|
66
96
|
|
67
|
-
|
68
|
-
|
97
|
+
def inherited(base)
|
98
|
+
descendants << base
|
99
|
+
end
|
100
|
+
end
|
69
101
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
seed
|
74
|
-
end
|
102
|
+
def run
|
103
|
+
end
|
104
|
+
end
|
75
105
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
106
|
+
##
|
107
|
+
# Class resposible for applying all the seeds related to the current environment,
|
108
|
+
# if and only if they were not previously applied.
|
109
|
+
#
|
110
|
+
# To apply the seeds/fixtures:
|
111
|
+
#
|
112
|
+
# Sequel::Seeder.apply(db, directory)
|
113
|
+
#
|
114
|
+
# +db+ holds the Sequel database connection
|
115
|
+
#
|
116
|
+
# +directory+ the path to the seeds/fixtures files
|
117
|
+
end
|
87
118
|
|
88
119
|
class Seeder
|
89
120
|
SEED_FILE_PATTERN = /\A(\d+)_.+\.(rb|json|yml)\z/i.freeze
|
@@ -106,7 +137,7 @@ module Sequel
|
|
106
137
|
next unless SEED_FILE_PATTERN.match(file)
|
107
138
|
return TimestampSeeder if file.split(SEED_SPLITTER, 2).first.to_i > MINIMUM_TIMESTAMP
|
108
139
|
end
|
109
|
-
raise(Error, "seeder not available for files")
|
140
|
+
raise(Error, "seeder not available for files; please checked the directory")
|
110
141
|
else
|
111
142
|
self
|
112
143
|
end
|
@@ -154,10 +185,10 @@ module Sequel
|
|
154
185
|
end
|
155
186
|
|
156
187
|
def remove_seed_classes
|
157
|
-
Seed.descendants.each do |c|
|
188
|
+
Seed::Base.descendants.each do |c|
|
158
189
|
Object.send(:remove_const, c.to_s) rescue nil
|
159
190
|
end
|
160
|
-
Seed.descendants.clear
|
191
|
+
Seed::Base.descendants.clear
|
161
192
|
end
|
162
193
|
|
163
194
|
def seed_version_from_file(filename)
|
@@ -230,14 +261,14 @@ module Sequel
|
|
230
261
|
def get_seed_tuples
|
231
262
|
remove_seed_classes
|
232
263
|
seeds = []
|
233
|
-
ms = Seed.descendants
|
264
|
+
ms = Seed::Base.descendants
|
234
265
|
files.each do |path|
|
235
266
|
f = File.basename(path)
|
236
267
|
fi = f.downcase
|
237
268
|
if !applied_seeds.include?(fi)
|
238
269
|
load(path)
|
239
270
|
el = [ms.last, f]
|
240
|
-
if ms.last.
|
271
|
+
if !ms.last.nil? && !seeds.include?(el)
|
241
272
|
seeds << [ms.last, f]
|
242
273
|
end
|
243
274
|
end
|
@@ -1,152 +1,211 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
Sequel::Seed.environment = :test
|
4
|
-
|
5
3
|
describe Sequel.seed do
|
4
|
+
before do
|
5
|
+
Sequel::Seed.setup(:test)
|
6
|
+
end
|
7
|
+
|
6
8
|
it 'should create a Seed descendant according to the current environment' do
|
7
9
|
seed = Sequel.seed(:test) {}
|
8
|
-
expect(Sequel::Seed.descendants).to include seed
|
10
|
+
expect(Sequel::Seed::Base.descendants).to include seed
|
9
11
|
end
|
10
12
|
|
11
13
|
it 'should ignore a Seed not applicable to the current environment' do
|
12
14
|
seed = Sequel.seed(:development) {}
|
13
|
-
expect(Sequel::Seed.descendants).not_to include seed
|
15
|
+
expect(Sequel::Seed::Base.descendants).not_to include seed
|
14
16
|
end
|
15
17
|
|
16
18
|
it 'should create a Seed applicable to every environment' do
|
17
19
|
seed = Sequel.seed {}
|
18
|
-
expect(Sequel::Seed.descendants).to include seed
|
20
|
+
expect(Sequel::Seed::Base.descendants).to include seed
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe Sequel::Seed.environment do
|
25
|
+
it 'should be possible to set the environment with Sequel::Seed.setup method' do
|
26
|
+
Sequel::Seed.setup(:mock)
|
27
|
+
expect(Sequel::Seed.environment).to eq :mock
|
28
|
+
Sequel::Seed.setup("test")
|
29
|
+
expect(Sequel::Seed.environment).to eq :test
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should be possible to set the environment with Sequel::Seed.environment= method' do
|
33
|
+
Sequel::Seed.environment = :mock
|
34
|
+
expect(Sequel::Seed.environment).to eq :mock
|
35
|
+
Sequel::Seed.environment = "test"
|
36
|
+
expect(Sequel::Seed.environment).to eq :test
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe Sequel::Seed do
|
41
|
+
describe "to guarantee backward compatibility" do
|
42
|
+
it "should point Sequel::Seed.descendants to Sequel::Seed::Base.descendants" do
|
43
|
+
Sequel::Seed::Base.descendants << 'hi'
|
44
|
+
expect(Sequel::Seed.descendants).to contain_exactly('hi')
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should point Sequel::Seed.inherited() to Sequel::Seed::Base.inherited()" do
|
48
|
+
Sequel::Seed::Base.inherited('1')
|
49
|
+
Sequel::Seed.inherited('2')
|
50
|
+
expect(Sequel::Seed.descendants).to contain_exactly('1', '2')
|
51
|
+
end
|
19
52
|
end
|
20
53
|
end
|
21
54
|
|
22
55
|
describe Sequel::Seeder do
|
23
56
|
let(:DB) {Sequel.sqlite}
|
57
|
+
let!(:environment) {"#{Faker::Lorem.word}_#{Faker::Lorem.word}"}
|
58
|
+
|
59
|
+
it "should raise an error when there is not any seed file to apply" do
|
60
|
+
Sequel::Seed.setup environment
|
61
|
+
|
62
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
63
|
+
expect {Sequel::Seeder.apply(DB, '/')}.to raise_error("seeder not available for files; please checked the directory")
|
64
|
+
expect(SpecModel.dataset.all.length).to be 0
|
65
|
+
end
|
24
66
|
|
25
67
|
describe 'environment references should be indistinguishable between Symbol and String' do
|
26
68
|
context 'when the environment is defined using a String' do
|
27
69
|
it 'should apply the Seed accordingly' do
|
28
|
-
Sequel::Seed.environment
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
70
|
+
Sequel::Seed.setup environment
|
71
|
+
|
72
|
+
File.open("#{seed_test_dir}/#{seed_file_name}", 'w+') do |f|
|
73
|
+
f.puts "Sequel.seed(:#{environment}) do"
|
74
|
+
f.puts ' def run'
|
75
|
+
f.puts ' SpecModel.create :sentence => \'environment defined by String\''
|
76
|
+
f.puts ' end'
|
77
|
+
f.puts 'end'
|
34
78
|
end
|
35
79
|
|
36
|
-
expect(Sequel::Seed.descendants.length).to be
|
37
|
-
expect
|
38
|
-
expect
|
80
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
81
|
+
expect(Sequel::Seeder.seeder_class(seed_test_dir)).to be Sequel::TimestampSeeder
|
82
|
+
expect {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
|
83
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
39
84
|
expect(SpecModel.dataset.all.length).to be 1
|
40
|
-
expect(SpecModel.dataset.first.
|
85
|
+
expect(SpecModel.dataset.first.sentence).to eq 'environment defined by String'
|
41
86
|
end
|
42
87
|
end
|
43
88
|
|
44
89
|
context 'when the Seed is defined using a String' do
|
45
90
|
it 'should apply the Seed accordingly' do
|
46
|
-
Sequel::Seed.environment
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
91
|
+
Sequel::Seed.setup environment.to_sym
|
92
|
+
|
93
|
+
File.open("#{seed_test_dir}/#{seed_file_name}", 'w+') do |f|
|
94
|
+
f.puts "Sequel.seed(\"#{environment}\") do"
|
95
|
+
f.puts ' def run'
|
96
|
+
f.puts ' SpecModel.create :sentence => \'Seed defined by String\''
|
97
|
+
f.puts ' end'
|
98
|
+
f.puts 'end'
|
52
99
|
end
|
53
100
|
|
54
|
-
expect(Sequel::Seed.descendants.length).to be
|
55
|
-
expect {Sequel::Seeder.apply(DB,
|
56
|
-
expect(Sequel::Seed.descendants.length).to be
|
101
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
102
|
+
expect {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
|
103
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
57
104
|
expect(SpecModel.dataset.all.length).to be 1
|
58
|
-
expect(SpecModel.dataset.first.
|
105
|
+
expect(SpecModel.dataset.first.sentence).to eq 'Seed defined by String'
|
59
106
|
end
|
60
107
|
end
|
61
108
|
|
62
109
|
context 'when both Seed and environment are defined using a String' do
|
63
110
|
it 'should apply the Seed accordingly' do
|
64
|
-
Sequel::Seed.environment
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
111
|
+
Sequel::Seed.setup environment
|
112
|
+
|
113
|
+
File.open("#{seed_test_dir}/#{seed_file_name}", 'w+') do |f|
|
114
|
+
f.puts "Sequel.seed(\"#{environment}\") do"
|
115
|
+
f.puts ' def run'
|
116
|
+
f.puts ' SpecModel.create :sentence => \'Seed and environment defined by String\''
|
117
|
+
f.puts ' end'
|
118
|
+
f.puts 'end'
|
70
119
|
end
|
71
120
|
|
72
|
-
expect(Sequel::Seed.descendants.length).to be
|
73
|
-
expect {Sequel::Seeder.apply(DB,
|
74
|
-
expect(Sequel::Seed.descendants.length).to be
|
121
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
122
|
+
expect {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
|
123
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
75
124
|
expect(SpecModel.dataset.all.length).to be 1
|
76
|
-
expect(SpecModel.dataset.first.
|
125
|
+
expect(SpecModel.dataset.first.sentence).to eq 'Seed and environment defined by String'
|
77
126
|
end
|
78
127
|
end
|
79
128
|
|
80
129
|
context 'when both Seed and environment are defined using a Symbol' do
|
81
130
|
it 'should apply the Seed accordingly' do
|
82
|
-
Sequel::Seed.environment
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
131
|
+
Sequel::Seed.setup environment.to_sym
|
132
|
+
|
133
|
+
File.open("#{seed_test_dir}/#{seed_file_name}", 'w+') do |f|
|
134
|
+
f.puts "Sequel.seed(:#{environment}) do"
|
135
|
+
f.puts ' def run'
|
136
|
+
f.puts ' SpecModel.create :sentence => \'Seed and environment defined by Symbol\''
|
137
|
+
f.puts ' end'
|
138
|
+
f.puts 'end'
|
88
139
|
end
|
89
140
|
|
90
|
-
expect(Sequel::Seed.descendants.length).to be
|
91
|
-
expect {Sequel::Seeder.apply(DB,
|
92
|
-
expect(Sequel::Seed.descendants.length).to be
|
141
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
142
|
+
expect {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
|
143
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
93
144
|
expect(SpecModel.dataset.all.length).to be 1
|
94
|
-
expect(SpecModel.dataset.first.
|
145
|
+
expect(SpecModel.dataset.first.sentence).to eq 'Seed and environment defined by Symbol'
|
95
146
|
end
|
96
147
|
end
|
97
148
|
|
98
149
|
context 'when the environment is defined using a String and we have a wildcard Seed' do
|
99
150
|
it 'should apply the Seed accordingly' do
|
100
|
-
Sequel::Seed.environment
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
151
|
+
Sequel::Seed.setup environment
|
152
|
+
|
153
|
+
File.open("#{seed_test_dir}/#{seed_file_name}", 'w+') do |f|
|
154
|
+
f.puts 'Sequel.seed do'
|
155
|
+
f.puts ' def run'
|
156
|
+
f.puts ' SpecModel.create :sentence => \'Wildcard Seed and environment defined by String\''
|
157
|
+
f.puts ' end'
|
158
|
+
f.puts 'end'
|
106
159
|
end
|
107
160
|
|
108
|
-
expect(Sequel::Seed.descendants.length).to be
|
109
|
-
expect {Sequel::Seeder.apply(DB,
|
110
|
-
expect(Sequel::Seed.descendants.length).to be
|
161
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
162
|
+
expect {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
|
163
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
111
164
|
expect(SpecModel.dataset.all.length).to be 1
|
112
|
-
expect(SpecModel.dataset.first.
|
165
|
+
expect(SpecModel.dataset.first.sentence).to eq 'Wildcard Seed and environment defined by String'
|
113
166
|
end
|
114
167
|
end
|
115
168
|
end
|
116
169
|
|
117
|
-
context 'when there\'s no Seed created' do
|
118
|
-
it 'should not make any change to the database' do
|
119
|
-
expect {Sequel::Seeder.apply(DB, '/')}.not_to raise_error
|
120
|
-
expect(SpecModel.dataset.all.length).to be 0
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
170
|
context 'when there\'s a Seed created' do
|
125
171
|
it 'should change the database accordingly only once' do
|
126
|
-
Sequel.
|
127
|
-
|
128
|
-
|
129
|
-
|
172
|
+
Sequel::Seed.setup environment
|
173
|
+
|
174
|
+
File.open("#{seed_test_dir}/#{seed_file_name}", 'w+') do |f|
|
175
|
+
f.puts 'Sequel.seed do'
|
176
|
+
f.puts ' def run'
|
177
|
+
f.puts ' SpecModel.create :sentence => \'should have changed\''
|
178
|
+
f.puts ' end'
|
179
|
+
f.puts 'end'
|
130
180
|
end
|
131
181
|
|
132
|
-
expect(Sequel::Seed.descendants.length).to be
|
133
|
-
expect {Sequel::Seeder.apply(DB,
|
134
|
-
expect(Sequel::Seed.descendants.length).to be
|
182
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
183
|
+
expect {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
|
184
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
185
|
+
expect(SpecModel.dataset.all.length).to be 1
|
186
|
+
expect(SpecModel.dataset.first.sentence).to eq 'should have changed'
|
187
|
+
# Once again
|
188
|
+
expect {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
|
189
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
135
190
|
expect(SpecModel.dataset.all.length).to be 1
|
136
|
-
expect(SpecModel.dataset.first.
|
191
|
+
expect(SpecModel.dataset.first.sentence).to eq 'should have changed'
|
137
192
|
end
|
138
193
|
end
|
139
194
|
|
140
195
|
context 'when the specified Seed is not applicable to the current environment' do
|
141
196
|
it 'should not make any change to the database' do
|
142
|
-
Sequel.
|
143
|
-
|
144
|
-
|
145
|
-
|
197
|
+
Sequel::Seed.setup environment
|
198
|
+
|
199
|
+
File.open("#{seed_test_dir}/#{seed_file_name}", 'w+') do |f|
|
200
|
+
f.puts "Sequel.seed(:another_#{Faker::Lorem.word}_word) do"
|
201
|
+
f.puts ' def run'
|
202
|
+
f.puts ' SpecModel.create :sentence => \'should have changed\''
|
203
|
+
f.puts ' end'
|
204
|
+
f.puts 'end'
|
146
205
|
end
|
147
206
|
|
148
|
-
expect(Sequel::Seed.descendants.length).to be 0
|
149
|
-
expect {Sequel::Seeder.apply(DB,
|
207
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
208
|
+
expect {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
|
150
209
|
expect(SpecModel.dataset.all.length).to be 0
|
151
210
|
end
|
152
211
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,56 +1,52 @@
|
|
1
1
|
require 'bundler/setup'
|
2
|
-
Bundler.setup(:default, :development)
|
2
|
+
Bundler.setup(:default, :development, :test)
|
3
|
+
|
4
|
+
require 'coveralls'
|
5
|
+
Coveralls.wear!
|
3
6
|
|
4
7
|
require 'sequel'
|
5
|
-
require 'faker'
|
6
8
|
require File.expand_path(File.dirname(__FILE__) + '/../lib/sequel/extensions/seed.rb')
|
7
9
|
|
8
|
-
|
9
|
-
Sequel.extension :seed
|
10
|
-
|
11
|
-
class Sequel::Seeder
|
12
|
-
def self.seeder_class(directory)
|
13
|
-
if self.equal?(Sequel::Seeder)
|
14
|
-
return Sequel::TimestampSeeder
|
15
|
-
else
|
16
|
-
self
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
10
|
+
require 'faker'
|
20
11
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
12
|
+
module Sequel::Seed
|
13
|
+
module TestHelper
|
14
|
+
def seed_test_dir
|
15
|
+
@test_dir ||= ENV['TEST_PATH'] || './.testing'
|
25
16
|
end
|
26
17
|
|
27
|
-
|
28
|
-
|
29
|
-
def get_applied_seeds
|
30
|
-
[]
|
18
|
+
def seed_file_name
|
19
|
+
"#{Time.now.strftime('%Y%m%d%H%M%S')}_testing_#{Faker::Lorem.word}_#{Faker::Lorem.word}.rb"
|
31
20
|
end
|
21
|
+
end
|
22
|
+
end
|
32
23
|
|
33
|
-
|
34
|
-
|
35
|
-
end
|
24
|
+
RSpec.configure do |config|
|
25
|
+
include Sequel::Seed::TestHelper
|
36
26
|
|
37
|
-
|
38
|
-
Sequel::Seed.descendants
|
39
|
-
end
|
40
|
-
end
|
27
|
+
Sequel.extension :seed
|
41
28
|
|
42
29
|
DB = Sequel.sqlite
|
43
30
|
|
44
31
|
DB.create_table(:spec_models) do
|
45
32
|
primary_key :id, :auto_increment => true
|
46
|
-
String :
|
33
|
+
String :sentence
|
34
|
+
end
|
35
|
+
|
36
|
+
config.before(:suite) do
|
37
|
+
FileUtils.mkdir_p(seed_test_dir)
|
47
38
|
end
|
48
39
|
|
49
40
|
config.before(:each) do
|
50
41
|
SpecModel.dataset.delete
|
51
|
-
Sequel::Seed.descendants.clear
|
42
|
+
Sequel::Seed::Base.descendants.clear
|
43
|
+
# QUICK FIX: Somehow the dataset models are not excluded fast enough
|
44
|
+
sleep(0.750)
|
52
45
|
end
|
53
|
-
end
|
54
46
|
|
55
|
-
|
47
|
+
config.after(:suite) do
|
48
|
+
FileUtils.remove_dir(seed_test_dir, true)
|
49
|
+
end
|
56
50
|
end
|
51
|
+
|
52
|
+
class SpecModel < Sequel::Model; end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel-seed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ewerton Assis
|
@@ -48,7 +48,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
48
48
|
requirements:
|
49
49
|
- - ">="
|
50
50
|
- !ruby/object:Gem::Version
|
51
|
-
version: 1.9.
|
51
|
+
version: 1.9.3
|
52
52
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - ">="
|