sequel-seed 0.3.2 → 1.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/sequel/extensions/seed.rb +5 -5
- data/spec/extensions/seed_spec.rb +73 -18
- data/spec/extensions/seed_with_pg_array_spec.rb +432 -0
- data/spec/spec_helper.rb +7 -21
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 025a9209d42e2d7f8da51f1e43f5fe60ecd4dd0d
|
4
|
+
data.tar.gz: b0fba3ae7fafc1c9db7b2b52d12e34dbe25d1b14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d87e758525d8c701964c1f182979b08270215b79fe783221643ce3811dfce2c20154ce0a094a3c758fe5947795c3dbe84dd8f59a7c6ee337851ab9cec3a6e32a
|
7
|
+
data.tar.gz: 760c9482605898bc4e485c072d2614276fb053812917c403824b519b1683fdfddb43cf4ac37d8f29da34069281ac91fe66aaa311d97306d88581f8a2e7613cf3
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
## Changelog
|
2
2
|
|
3
|
+
### 1.0.0
|
4
|
+
- Minimum version for Ruby (MRI) >= 2.0
|
5
|
+
- Minimum version for JRuby (Java) >= 9.0
|
6
|
+
- Fix some exception messages
|
7
|
+
- Improve specs over the `pg_array` extension (issue #9)
|
8
|
+
|
3
9
|
### 0.3.2
|
4
10
|
- Hotfixes & minor updates
|
5
11
|
- Olle Jonsson's contributions
|
@@ -212,7 +212,7 @@ module Sequel
|
|
212
212
|
next unless SEED_FILE_PATTERN.match(file)
|
213
213
|
return TimestampSeeder if file.split(SEED_SPLITTER, 2).first.to_i > MINIMUM_TIMESTAMP
|
214
214
|
end
|
215
|
-
raise(Error, "seeder not available for files; please
|
215
|
+
raise(Error, "seeder not available for files; please check the configured seed directory '#{directory}'. Also ensure seed files are in YYYYMMDD_seed_file.rb format.")
|
216
216
|
else
|
217
217
|
self
|
218
218
|
end
|
@@ -302,13 +302,13 @@ module Sequel
|
|
302
302
|
def run
|
303
303
|
seed_tuples.each do |s, f|
|
304
304
|
t = Time.now
|
305
|
-
db.log_info("
|
305
|
+
db.log_info("Applying seed file `#{f}`")
|
306
306
|
checked_transaction(s) do
|
307
307
|
s.apply
|
308
308
|
fi = f.downcase
|
309
309
|
ds.insert(column => fi)
|
310
310
|
end
|
311
|
-
db.log_info("
|
311
|
+
db.log_info("Seed file `#{f}` applied, it took #{sprintf('%0.6f', Time.now - t)} seconds")
|
312
312
|
end
|
313
313
|
nil
|
314
314
|
end
|
@@ -319,7 +319,7 @@ module Sequel
|
|
319
319
|
am = ds.select_order_map(column)
|
320
320
|
missing_seed_files = am - files.map{|f| File.basename(f).downcase}
|
321
321
|
if missing_seed_files.length > 0 && !@allow_missing_seed_files
|
322
|
-
raise(Error, "
|
322
|
+
raise(Error, "Seed files not in file system: #{missing_seed_files.join(', ')}")
|
323
323
|
end
|
324
324
|
am
|
325
325
|
end
|
@@ -398,7 +398,7 @@ module Sequel
|
|
398
398
|
if !db.table_exists?(table)
|
399
399
|
db.create_table(table){String c, :primary_key => true}
|
400
400
|
elsif !ds.columns.include?(c)
|
401
|
-
raise(Error, "Seeder table #{table} does not contain column #{c}")
|
401
|
+
raise(Error, "Seeder table '#{table}' does not contain column '#{c}'")
|
402
402
|
end
|
403
403
|
ds
|
404
404
|
end
|
@@ -1,6 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Sequel.seed do
|
4
|
+
before(:all) do
|
5
|
+
Sequel::Seed::Base.descendants.clear
|
6
|
+
Sequel.extension :seed
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:each) do
|
10
|
+
Sequel::Seed::Base.descendants.clear
|
11
|
+
end
|
12
|
+
|
4
13
|
before do
|
5
14
|
Sequel::Seed.setup(:test)
|
6
15
|
end
|
@@ -22,6 +31,15 @@ describe Sequel.seed do
|
|
22
31
|
end
|
23
32
|
|
24
33
|
describe Sequel::Seed.environment do
|
34
|
+
before(:all) do
|
35
|
+
Sequel::Seed::Base.descendants.clear
|
36
|
+
Sequel.extension :seed
|
37
|
+
end
|
38
|
+
|
39
|
+
after(:each) do
|
40
|
+
Sequel::Seed::Base.descendants.clear
|
41
|
+
end
|
42
|
+
|
25
43
|
it 'should be possible to set the environment with Sequel::Seed.setup method' do
|
26
44
|
Sequel::Seed.setup(:mock)
|
27
45
|
expect(Sequel::Seed.environment).to eq :mock
|
@@ -38,6 +56,15 @@ describe Sequel::Seed.environment do
|
|
38
56
|
end
|
39
57
|
|
40
58
|
describe Sequel::Seed do
|
59
|
+
before(:all) do
|
60
|
+
Sequel::Seed::Base.descendants.clear
|
61
|
+
Sequel.extension :seed
|
62
|
+
end
|
63
|
+
|
64
|
+
after(:each) do
|
65
|
+
Sequel::Seed::Base.descendants.clear
|
66
|
+
end
|
67
|
+
|
41
68
|
describe "to guarantee backward compatibility" do
|
42
69
|
it "should point Sequel::Seed.descendants to Sequel::Seed::Base.descendants" do
|
43
70
|
Sequel::Seed::Base.descendants << 'hi'
|
@@ -53,15 +80,43 @@ describe Sequel::Seed do
|
|
53
80
|
end
|
54
81
|
|
55
82
|
describe Sequel::Seeder do
|
56
|
-
let(:DB) {Sequel.sqlite}
|
57
83
|
let!(:environment) {"#{Faker::Lorem.word}_#{Faker::Lorem.word}"}
|
58
84
|
let!(:random_word) {Faker::Lorem.word}
|
59
85
|
|
86
|
+
before do
|
87
|
+
Sequel.extension :seed
|
88
|
+
SpecModel.dataset.delete
|
89
|
+
Sequel::Seed::Base.descendants.clear
|
90
|
+
end
|
91
|
+
|
92
|
+
before(:all) do
|
93
|
+
dsn = begin
|
94
|
+
if RUBY_PLATFORM == 'java'
|
95
|
+
'jdbc:sqlite::memory:'
|
96
|
+
else
|
97
|
+
'sqlite:/'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
@db = Sequel.connect(dsn)
|
101
|
+
@db.create_table(:spec_models) do
|
102
|
+
primary_key :id, :auto_increment => true
|
103
|
+
String :sentence
|
104
|
+
end
|
105
|
+
class SpecModel < Sequel::Model; end
|
106
|
+
SpecModel.db = @db
|
107
|
+
Sequel::Model.db = @db
|
108
|
+
end
|
109
|
+
|
110
|
+
after(:each) do
|
111
|
+
SpecModel.dataset.delete
|
112
|
+
Sequel::Seed::Base.descendants.clear
|
113
|
+
end
|
114
|
+
|
60
115
|
it "should raise an error when there is not any seed file to apply" do
|
61
116
|
Sequel::Seed.setup environment
|
62
117
|
|
63
118
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
64
|
-
expect
|
119
|
+
expect{Sequel::Seeder.apply(@db, '/')}.to raise_error("seeder not available for files; please check the configured seed directory '/'. Also ensure seed files are in YYYYMMDD_seed_file.rb format.")
|
65
120
|
expect(SpecModel.dataset.all.length).to be 0
|
66
121
|
end
|
67
122
|
|
@@ -81,7 +136,7 @@ describe Sequel::Seeder do
|
|
81
136
|
|
82
137
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
83
138
|
expect(Sequel::Seeder.seeder_class(seed_test_dir)).to be Sequel::TimestampSeeder
|
84
|
-
expect
|
139
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
85
140
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
86
141
|
expect(SpecModel.dataset.all.length).to be 1
|
87
142
|
expect(SpecModel.dataset.first.sentence).to eq 'environment defined by String'
|
@@ -101,7 +156,7 @@ describe Sequel::Seeder do
|
|
101
156
|
end
|
102
157
|
|
103
158
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
104
|
-
expect
|
159
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
105
160
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
106
161
|
expect(SpecModel.dataset.all.length).to be 1
|
107
162
|
expect(SpecModel.dataset.first.sentence).to eq 'Seed defined by String'
|
@@ -121,7 +176,7 @@ describe Sequel::Seeder do
|
|
121
176
|
end
|
122
177
|
|
123
178
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
124
|
-
expect
|
179
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
125
180
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
126
181
|
expect(SpecModel.dataset.all.length).to be 1
|
127
182
|
expect(SpecModel.dataset.first.sentence).to eq 'Seed and environment defined by String'
|
@@ -141,7 +196,7 @@ describe Sequel::Seeder do
|
|
141
196
|
end
|
142
197
|
|
143
198
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
144
|
-
expect
|
199
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
145
200
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
146
201
|
expect(SpecModel.dataset.all.length).to be 1
|
147
202
|
expect(SpecModel.dataset.first.sentence).to eq 'Seed and environment defined by Symbol'
|
@@ -161,7 +216,7 @@ describe Sequel::Seeder do
|
|
161
216
|
end
|
162
217
|
|
163
218
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
164
|
-
expect
|
219
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
165
220
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
166
221
|
expect(SpecModel.dataset.all.length).to be 1
|
167
222
|
expect(SpecModel.dataset.first.sentence).to eq 'Wildcard Seed and environment defined by String'
|
@@ -182,12 +237,12 @@ describe Sequel::Seeder do
|
|
182
237
|
end
|
183
238
|
|
184
239
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
185
|
-
expect
|
240
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
186
241
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
187
242
|
expect(SpecModel.dataset.all.length).to be 1
|
188
243
|
expect(SpecModel.dataset.first.sentence).to eq 'should have changed (from Ruby file)'
|
189
244
|
# Once again
|
190
|
-
expect
|
245
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
191
246
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
192
247
|
expect(SpecModel.dataset.all.length).to be 1
|
193
248
|
expect(SpecModel.dataset.first.sentence).to eq 'should have changed (from Ruby file)'
|
@@ -207,7 +262,7 @@ describe Sequel::Seeder do
|
|
207
262
|
end
|
208
263
|
|
209
264
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
210
|
-
expect
|
265
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
211
266
|
expect(SpecModel.dataset.all.length).to be 0
|
212
267
|
end
|
213
268
|
end
|
@@ -225,7 +280,7 @@ describe Sequel::Seeder do
|
|
225
280
|
end
|
226
281
|
|
227
282
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
228
|
-
expect
|
283
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
229
284
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
230
285
|
expect(SpecModel.dataset.all.length).to be 1
|
231
286
|
expect(SpecModel.dataset.first.sentence).to eq "should have changed (from YAML file) #{random_word}"
|
@@ -245,7 +300,7 @@ describe Sequel::Seeder do
|
|
245
300
|
end
|
246
301
|
|
247
302
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
248
|
-
expect
|
303
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
249
304
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
250
305
|
expect(SpecModel.dataset.all.length).to be 1
|
251
306
|
expect(SpecModel.dataset.first.sentence).to eq "should have changed (from YAML file) #{random_word}"
|
@@ -270,7 +325,7 @@ describe Sequel::Seeder do
|
|
270
325
|
end
|
271
326
|
|
272
327
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
273
|
-
expect
|
328
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
274
329
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
275
330
|
expect(SpecModel.dataset.all.length).to be 1
|
276
331
|
expect(SpecModel.dataset.first.sentence).to eq "should have changed (from YAML file) #{random_word}"
|
@@ -287,7 +342,7 @@ describe Sequel::Seeder do
|
|
287
342
|
end
|
288
343
|
|
289
344
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
290
|
-
expect
|
345
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
291
346
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
292
347
|
expect(SpecModel.dataset.all.length).to be 0
|
293
348
|
end
|
@@ -308,7 +363,7 @@ describe Sequel::Seeder do
|
|
308
363
|
end
|
309
364
|
|
310
365
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
311
|
-
expect
|
366
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
312
367
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
313
368
|
expect(SpecModel.dataset.all.length).to be 1
|
314
369
|
expect(SpecModel.dataset.first.sentence).to eq "should have changed (from JSON file) #{random_word}"
|
@@ -333,7 +388,7 @@ describe Sequel::Seeder do
|
|
333
388
|
end
|
334
389
|
|
335
390
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
336
|
-
expect
|
391
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
337
392
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
338
393
|
expect(SpecModel.dataset.all.length).to be 1
|
339
394
|
expect(SpecModel.dataset.first.sentence).to eq "should have changed (from JSON file) #{random_word}"
|
@@ -371,7 +426,7 @@ describe Sequel::Seeder do
|
|
371
426
|
end
|
372
427
|
|
373
428
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
374
|
-
expect
|
429
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
375
430
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
376
431
|
expect(SpecModel.dataset.all.length).to be 1
|
377
432
|
expect(SpecModel.dataset.first.sentence).to eq "should have changed (from JSON file) #{random_word}"
|
@@ -391,7 +446,7 @@ describe Sequel::Seeder do
|
|
391
446
|
end
|
392
447
|
|
393
448
|
expect(Sequel::Seed::Base.descendants.length).to be 0
|
394
|
-
expect
|
449
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
395
450
|
expect(Sequel::Seed::Base.descendants.length).to be 1
|
396
451
|
expect(SpecModel.dataset.all.length).to be 0
|
397
452
|
end
|
@@ -0,0 +1,432 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sequel::Seeder do
|
4
|
+
let!(:environment) {"#{Faker::Lorem.word}_#{Faker::Lorem.word}"}
|
5
|
+
let!(:random_word) {Faker::Lorem.word}
|
6
|
+
|
7
|
+
before do
|
8
|
+
Sequel.extension :seed
|
9
|
+
Sequel.extension :pg_array
|
10
|
+
ArraySpecModel.dataset.delete
|
11
|
+
Sequel::Seed::Base.descendants.clear
|
12
|
+
end
|
13
|
+
|
14
|
+
before(:all) do
|
15
|
+
dsn = begin
|
16
|
+
if RUBY_PLATFORM == 'java'
|
17
|
+
'jdbc:postgresql://localhost/sequel_seed_test'
|
18
|
+
else
|
19
|
+
'postgres://localhost/sequel_seed_test'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
@db = Sequel.connect(dsn)
|
23
|
+
@db.extension(:pg_array)
|
24
|
+
@db.create_table(:array_spec_models) do
|
25
|
+
primary_key :id, :serial
|
26
|
+
column :selectors, "text[]"
|
27
|
+
String :sentence
|
28
|
+
end
|
29
|
+
class ArraySpecModel < Sequel::Model; end
|
30
|
+
ArraySpecModel.db = @db
|
31
|
+
Sequel::Model.db = @db
|
32
|
+
end
|
33
|
+
|
34
|
+
after(:each) do
|
35
|
+
ArraySpecModel.dataset.delete
|
36
|
+
Sequel::Seed::Base.descendants.clear
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should raise an error when there is not any seed file to apply" do
|
40
|
+
Sequel::Seed.setup environment
|
41
|
+
|
42
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
43
|
+
expect{Sequel::Seeder.apply(@db, '/')}.to raise_error("seeder not available for files; please check the configured seed directory '/'. Also ensure seed files are in YYYYMMDD_seed_file.rb format.")
|
44
|
+
expect(ArraySpecModel.dataset.all.length).to be 0
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "Seeds defined using Ruby code (.rb extension)" do
|
48
|
+
describe 'environment references should be indistinguishable between Symbol and String' do
|
49
|
+
context 'when the environment is defined using a String' do
|
50
|
+
it 'should apply the Seed accordingly' do
|
51
|
+
Sequel::Seed.setup environment
|
52
|
+
|
53
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.rb", 'w+') do |f|
|
54
|
+
f.puts "Sequel.seed(:#{environment}) do"
|
55
|
+
f.puts ' def run'
|
56
|
+
f.puts ' ArraySpecModel.create \\'
|
57
|
+
f.puts ' :sentence => \'environment defined by String\','
|
58
|
+
f.puts ' :selectors => [".body", ".header", ".string"]'
|
59
|
+
f.puts ' end'
|
60
|
+
f.puts 'end'
|
61
|
+
end
|
62
|
+
|
63
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
64
|
+
expect(Sequel::Seeder.seeder_class(seed_test_dir)).to be Sequel::TimestampSeeder
|
65
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
66
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
67
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
68
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq 'environment defined by String'
|
69
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.string')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when the Seed is defined using a String' do
|
74
|
+
it 'should apply the Seed accordingly' do
|
75
|
+
Sequel::Seed.setup environment.to_sym
|
76
|
+
|
77
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.rb", 'w+') do |f|
|
78
|
+
f.puts "Sequel.seed(\"#{environment}\") do"
|
79
|
+
f.puts ' def run'
|
80
|
+
f.puts ' ArraySpecModel.create \\'
|
81
|
+
f.puts ' :sentence => \'Seed defined by String\','
|
82
|
+
f.puts ' :selectors => [".body", ".header", ".environment"]'
|
83
|
+
f.puts ' end'
|
84
|
+
f.puts 'end'
|
85
|
+
end
|
86
|
+
|
87
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
88
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
89
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
90
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
91
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq 'Seed defined by String'
|
92
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.environment')
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'when both Seed and environment are defined using a String' do
|
97
|
+
it 'should apply the Seed accordingly' do
|
98
|
+
Sequel::Seed.setup environment
|
99
|
+
|
100
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.rb", 'w+') do |f|
|
101
|
+
f.puts "Sequel.seed(\"#{environment}\") do"
|
102
|
+
f.puts ' def run'
|
103
|
+
f.puts ' ArraySpecModel.create \\'
|
104
|
+
f.puts ' :sentence => \'Seed and environment defined by String\','
|
105
|
+
f.puts ' :selectors => [".body", ".header", ".string", ".environment"]'
|
106
|
+
f.puts ' end'
|
107
|
+
f.puts 'end'
|
108
|
+
end
|
109
|
+
|
110
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
111
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
112
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
113
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
114
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq 'Seed and environment defined by String'
|
115
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.string', '.environment')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context 'when both Seed and environment are defined using a Symbol' do
|
120
|
+
it 'should apply the Seed accordingly' do
|
121
|
+
Sequel::Seed.setup environment.to_sym
|
122
|
+
|
123
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.rb", 'w+') do |f|
|
124
|
+
f.puts "Sequel.seed(:#{environment}) do"
|
125
|
+
f.puts ' def run'
|
126
|
+
f.puts ' ArraySpecModel.create \\'
|
127
|
+
f.puts ' :sentence => \'Seed and environment defined by Symbol\','
|
128
|
+
f.puts ' :selectors => [".body", ".header", ".string", ".environment", ".symbol"]'
|
129
|
+
f.puts ' end'
|
130
|
+
f.puts 'end'
|
131
|
+
end
|
132
|
+
|
133
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
134
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
135
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
136
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
137
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq 'Seed and environment defined by Symbol'
|
138
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.string', '.environment', '.symbol')
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
context 'when the environment is defined using a String and we have a wildcard Seed' do
|
143
|
+
it 'should apply the Seed accordingly' do
|
144
|
+
Sequel::Seed.setup environment
|
145
|
+
|
146
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.rb", 'w+') do |f|
|
147
|
+
f.puts 'Sequel.seed do'
|
148
|
+
f.puts ' def run'
|
149
|
+
f.puts ' ArraySpecModel.create \\'
|
150
|
+
f.puts ' :sentence => \'Wildcard Seed and environment defined by String\','
|
151
|
+
f.puts ' :selectors => [".body", ".header", ".string", ".wildcard"]'
|
152
|
+
f.puts ' end'
|
153
|
+
f.puts 'end'
|
154
|
+
end
|
155
|
+
|
156
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
157
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
158
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
159
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
160
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq 'Wildcard Seed and environment defined by String'
|
161
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.string', '.wildcard')
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
context 'when there\'s a Seed created' do
|
167
|
+
it 'should change the database accordingly only once' do
|
168
|
+
Sequel::Seed.setup environment
|
169
|
+
|
170
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.rb", 'w+') do |f|
|
171
|
+
f.puts 'Sequel.seed do'
|
172
|
+
f.puts ' def run'
|
173
|
+
f.puts ' ArraySpecModel.create \\'
|
174
|
+
f.puts ' :sentence => \'should have changed (from Ruby file)\','
|
175
|
+
f.puts ' :selectors => [".body", ".header", ".string", ".ruby"]'
|
176
|
+
f.puts ' end'
|
177
|
+
f.puts 'end'
|
178
|
+
end
|
179
|
+
|
180
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
181
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
182
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
183
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
184
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq 'should have changed (from Ruby file)'
|
185
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.string', '.ruby')
|
186
|
+
# Once again
|
187
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
188
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
189
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
190
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq 'should have changed (from Ruby file)'
|
191
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.string', '.ruby')
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
context 'when the specified Seed is not applicable to the given environment' do
|
196
|
+
it 'should not make any change to the database' do
|
197
|
+
Sequel::Seed.setup environment
|
198
|
+
|
199
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.rb", 'w+') do |f|
|
200
|
+
f.puts "Sequel.seed(:another_#{Faker::Lorem.word}_word) do"
|
201
|
+
f.puts ' def run'
|
202
|
+
f.puts ' ArraySpecModel.create \\'
|
203
|
+
f.puts ' :sentence => \'should not have changed (from Ruby file)\','
|
204
|
+
f.puts ' :selectors => [".body", ".header", ".unchanged", ".ruby"]'
|
205
|
+
f.puts ' end'
|
206
|
+
f.puts 'end'
|
207
|
+
end
|
208
|
+
|
209
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
210
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
211
|
+
expect(ArraySpecModel.dataset.all.length).to be 0
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
describe 'Seeds defined using YAML code (.{yaml,yml} extension)' do
|
217
|
+
it 'should apply a basic YAML Seed if it was specified for the given environment' do
|
218
|
+
Sequel::Seed.setup environment
|
219
|
+
|
220
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.yml", 'w+') do |f|
|
221
|
+
f.puts "environment: :#{environment}"
|
222
|
+
f.puts 'array_spec_model:'
|
223
|
+
f.puts " sentence: 'should have changed (from YAML file) #{random_word}'"
|
224
|
+
f.puts " selectors:"
|
225
|
+
f.puts " - '.body'"
|
226
|
+
f.puts " - '.header'"
|
227
|
+
f.puts " - '.yaml'"
|
228
|
+
f.puts ''
|
229
|
+
end
|
230
|
+
|
231
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
232
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
233
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
234
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
235
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq "should have changed (from YAML file) #{random_word}"
|
236
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.yaml')
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'should apply a YAML Seed if it was specified for the given environment' do
|
240
|
+
Sequel::Seed.setup environment
|
241
|
+
|
242
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.yml", 'w+') do |f|
|
243
|
+
f.puts "environment: :#{environment}"
|
244
|
+
f.puts 'model:'
|
245
|
+
f.puts ' class: \'ArraySpecModel\''
|
246
|
+
f.puts ' entries:'
|
247
|
+
f.puts ' -'
|
248
|
+
f.puts " sentence: 'should have changed (from YAML file) #{random_word}'"
|
249
|
+
f.puts " selectors:"
|
250
|
+
f.puts " - .body"
|
251
|
+
f.puts " - .header"
|
252
|
+
f.puts " - .yaml"
|
253
|
+
f.puts ''
|
254
|
+
end
|
255
|
+
|
256
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
257
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
258
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
259
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
260
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq "should have changed (from YAML file) #{random_word}"
|
261
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.yaml')
|
262
|
+
end
|
263
|
+
|
264
|
+
it 'should apply a YAML file with multiple Seeds descriptors if they were specified for the given environment' do
|
265
|
+
Sequel::Seed.setup environment
|
266
|
+
|
267
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.yml", 'w+') do |f|
|
268
|
+
f.puts '-'
|
269
|
+
f.puts " environment: :#{environment}"
|
270
|
+
f.puts ' model:'
|
271
|
+
f.puts ' class: \'ArraySpecModel\''
|
272
|
+
f.puts ' entries:'
|
273
|
+
f.puts ' -'
|
274
|
+
f.puts " sentence: 'should have changed (from YAML file) #{random_word}'"
|
275
|
+
f.puts " selectors:"
|
276
|
+
f.puts " - .body"
|
277
|
+
f.puts " - .header"
|
278
|
+
f.puts " - .yaml"
|
279
|
+
f.puts " - .environment"
|
280
|
+
f.puts '-'
|
281
|
+
f.puts " environment: :another_#{environment}"
|
282
|
+
f.puts ' array_spec_model:'
|
283
|
+
f.puts " sentence: 'should not have changed (from YAML file) #{random_word}'"
|
284
|
+
f.puts " selectors:"
|
285
|
+
f.puts " - .body"
|
286
|
+
f.puts " - .header"
|
287
|
+
f.puts " - .yaml"
|
288
|
+
f.puts " - .another_environment"
|
289
|
+
f.puts ''
|
290
|
+
end
|
291
|
+
|
292
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
293
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
294
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
295
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
296
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq "should have changed (from YAML file) #{random_word}"
|
297
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.yaml', '.environment')
|
298
|
+
end
|
299
|
+
|
300
|
+
it 'should not apply a basic Seed if it was not specified for the given environment' do
|
301
|
+
Sequel::Seed.setup environment
|
302
|
+
|
303
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.yml", 'w+') do |f|
|
304
|
+
f.puts "environment: :another_environment_#{Faker::Lorem.word}"
|
305
|
+
f.puts 'array_spec_model:'
|
306
|
+
f.puts ' sentence: \'should not have changed (from YAML file)\''
|
307
|
+
f.puts " selectors:"
|
308
|
+
f.puts " - .body"
|
309
|
+
f.puts " - .header"
|
310
|
+
f.puts " - .yaml"
|
311
|
+
f.puts ''
|
312
|
+
end
|
313
|
+
|
314
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
315
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
316
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
317
|
+
expect(ArraySpecModel.dataset.all.length).to be 0
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
describe 'Seeds defined using JSON code (.json extension)' do
|
322
|
+
it 'should apply a basic JSON Seed if it was specified for the given environment' do
|
323
|
+
Sequel::Seed.setup environment
|
324
|
+
|
325
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.json", 'w+') do |f|
|
326
|
+
f.puts '{'
|
327
|
+
f.puts " \"environment\": \"#{environment}\","
|
328
|
+
f.puts " \"array_spec_model\": {"
|
329
|
+
f.puts " \"sentence\": \"should have changed (from JSON file) #{random_word}\","
|
330
|
+
f.puts " \"selectors\": [\".body\", \".header\", \".json\"]"
|
331
|
+
f.puts ' }'
|
332
|
+
f.puts '}'
|
333
|
+
f.puts ''
|
334
|
+
end
|
335
|
+
|
336
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
337
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
338
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
339
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
340
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq "should have changed (from JSON file) #{random_word}"
|
341
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.json')
|
342
|
+
end
|
343
|
+
|
344
|
+
it 'should apply a JSON Seed if it was specified for the given environment' do
|
345
|
+
Sequel::Seed.setup environment
|
346
|
+
|
347
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.json", 'w+') do |f|
|
348
|
+
f.puts '{'
|
349
|
+
f.puts " \"environment\": \"#{environment}\","
|
350
|
+
f.puts " \"model\": {"
|
351
|
+
f.puts " \"class\": \"ArraySpecModel\","
|
352
|
+
f.puts " \"entries\": ["
|
353
|
+
f.puts ' {'
|
354
|
+
f.puts " \"sentence\": \"should have changed (from JSON file) #{random_word}\","
|
355
|
+
f.puts " \"selectors\": [\".body\", \".header\", \".json\"]"
|
356
|
+
f.puts ' }'
|
357
|
+
f.puts ' ]'
|
358
|
+
f.puts ' }'
|
359
|
+
f.puts '}'
|
360
|
+
f.puts ''
|
361
|
+
end
|
362
|
+
|
363
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
364
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
365
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
366
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
367
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq "should have changed (from JSON file) #{random_word}"
|
368
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.json')
|
369
|
+
end
|
370
|
+
|
371
|
+
it 'should apply a JSON file with multiple Seeds descriptors if they were specified for the given environment' do
|
372
|
+
Sequel::Seed.setup environment
|
373
|
+
|
374
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.json", 'w+') do |f|
|
375
|
+
f.puts '['
|
376
|
+
f.puts ' {'
|
377
|
+
f.puts " \"environment\": \"#{environment}\","
|
378
|
+
f.puts " \"model\": {"
|
379
|
+
f.puts " \"class\": \"ArraySpecModel\","
|
380
|
+
f.puts " \"entries\": ["
|
381
|
+
f.puts ' {'
|
382
|
+
f.puts " \"sentence\": \"should have changed (from JSON file) #{random_word}\","
|
383
|
+
f.puts " \"selectors\": [\".body\", \".header\", \".json\", \".environment\"]"
|
384
|
+
f.puts ' }'
|
385
|
+
f.puts ' ]'
|
386
|
+
f.puts ' }'
|
387
|
+
f.puts ' },'
|
388
|
+
f.puts ' {'
|
389
|
+
f.puts " \"environment\": \"another_#{environment}\","
|
390
|
+
f.puts " \"model\": {"
|
391
|
+
f.puts " \"class\": \"ArraySpecModel\","
|
392
|
+
f.puts " \"entries\": ["
|
393
|
+
f.puts ' {'
|
394
|
+
f.puts " \"sentence\": \"should have changed (from JSON file) #{random_word}\","
|
395
|
+
f.puts " \"selectors\": [\".body\", \".header\", \".json\", \".another_environment\"]"
|
396
|
+
f.puts ' }'
|
397
|
+
f.puts ' ]'
|
398
|
+
f.puts ' }'
|
399
|
+
f.puts ' }'
|
400
|
+
f.puts ']'
|
401
|
+
f.puts ''
|
402
|
+
end
|
403
|
+
|
404
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
405
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
406
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
407
|
+
expect(ArraySpecModel.dataset.all.length).to be 1
|
408
|
+
expect(ArraySpecModel.dataset.first.sentence).to eq "should have changed (from JSON file) #{random_word}"
|
409
|
+
expect(ArraySpecModel.dataset.first.selectors).to contain_exactly('.body', '.header', '.json', '.environment')
|
410
|
+
end
|
411
|
+
|
412
|
+
it 'should not apply a basic Seed if it was not specified for the given environment' do
|
413
|
+
Sequel::Seed.setup environment
|
414
|
+
|
415
|
+
File.open("#{seed_test_dir}/#{seed_file_name}.json", 'w+') do |f|
|
416
|
+
f.puts '{'
|
417
|
+
f.puts " \"environment\": \"another_#{environment}\","
|
418
|
+
f.puts " \"array_spec_model\": {"
|
419
|
+
f.puts " \"sentence\": \"should not changed (from JSON file) #{random_word}\","
|
420
|
+
f.puts " \"selectors\": [\".body\", \".header\", \".json\"]"
|
421
|
+
f.puts ' }'
|
422
|
+
f.puts '}'
|
423
|
+
f.puts ''
|
424
|
+
end
|
425
|
+
|
426
|
+
expect(Sequel::Seed::Base.descendants.length).to be 0
|
427
|
+
expect{Sequel::Seeder.apply(@db, seed_test_dir)}.not_to raise_error
|
428
|
+
expect(Sequel::Seed::Base.descendants.length).to be 1
|
429
|
+
expect(ArraySpecModel.dataset.all.length).to be 0
|
430
|
+
end
|
431
|
+
end
|
432
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -24,36 +24,22 @@ end
|
|
24
24
|
RSpec.configure do |config|
|
25
25
|
include Sequel::Seed::TestHelper
|
26
26
|
|
27
|
-
Sequel.extension :seed
|
28
|
-
|
29
|
-
dsn = if RUBY_PLATFORM == 'java'
|
30
|
-
'jdbc:sqlite::memory:'
|
31
|
-
else
|
32
|
-
'sqlite:/'
|
33
|
-
end
|
34
|
-
|
35
|
-
DB = Sequel.connect(dsn)
|
36
|
-
|
37
|
-
DB.create_table(:spec_models) do
|
38
|
-
primary_key :id, :auto_increment => true
|
39
|
-
String :sentence
|
40
|
-
end
|
41
|
-
|
42
27
|
config.before(:suite) do
|
43
28
|
FileUtils.mkdir_p(seed_test_dir)
|
44
29
|
end
|
45
30
|
|
46
31
|
config.before(:each) do
|
47
|
-
|
48
|
-
|
49
|
-
# QUICK FIX: Somehow the dataset models are not excluded fast enough
|
32
|
+
# QUICK FIX:
|
33
|
+
# Somehow the dataset models are not excluded fast enough
|
50
34
|
sleep(0.750)
|
51
35
|
end
|
52
36
|
|
37
|
+
config.after(:all) do
|
38
|
+
# It clears the `seed_test_dir` folder after each spec
|
39
|
+
FileUtils.rm_rf("#{seed_test_dir}/.", secure: true)
|
40
|
+
end
|
41
|
+
|
53
42
|
config.after(:suite) do
|
54
43
|
FileUtils.remove_dir(seed_test_dir, true)
|
55
44
|
end
|
56
45
|
end
|
57
|
-
|
58
|
-
class SpecModel < Sequel::Model
|
59
|
-
end
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel-seed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ewerton Assis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.0'
|
27
27
|
description: A Sequel extension to make seeds/fixtures manageable like migrations
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- README.md
|
36
36
|
- lib/sequel/extensions/seed.rb
|
37
37
|
- spec/extensions/seed_spec.rb
|
38
|
+
- spec/extensions/seed_with_pg_array_spec.rb
|
38
39
|
- spec/spec_helper.rb
|
39
40
|
homepage: https://github.com/earaujoassis/sequel-seed
|
40
41
|
licenses:
|
@@ -46,12 +47,12 @@ require_paths:
|
|
46
47
|
- lib
|
47
48
|
required_ruby_version: !ruby/object:Gem::Requirement
|
48
49
|
requirements:
|
49
|
-
- -
|
50
|
+
- - '>='
|
50
51
|
- !ruby/object:Gem::Version
|
51
|
-
version:
|
52
|
+
version: '2.0'
|
52
53
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
54
|
requirements:
|
54
|
-
- -
|
55
|
+
- - '>='
|
55
56
|
- !ruby/object:Gem::Version
|
56
57
|
version: '0'
|
57
58
|
requirements: []
|