sequel-seed 0.3.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 82b215a4fbd4a7a8d1fc5203360c89cd3216dd4a
4
- data.tar.gz: 73f68acb7c5810b102b078ded53d8ed8b1a84432
3
+ metadata.gz: 025a9209d42e2d7f8da51f1e43f5fe60ecd4dd0d
4
+ data.tar.gz: b0fba3ae7fafc1c9db7b2b52d12e34dbe25d1b14
5
5
  SHA512:
6
- metadata.gz: 5df8a5291f61ddb99f68514a0e7da597ce222cdb90f71a3995bb74e58151d9305c7fbde76f96ff88e0629aad6ecf0665bc39797f448a7b4bf311b8ef867c9555
7
- data.tar.gz: 16e60b6c21dc0b3433c9e1aba5c18f7984a6b79456e516b115e26c7d003333a042519d505bf319e6c2830c022cfeae25a2ab31fb47ad38921d28ef93f6e780d1
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 checked the directory")
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("Begin applying seed #{f}")
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("Finished applying seed #{f}, took #{sprintf('%0.6f', Time.now - t)} seconds")
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, "Applied seed files not in file system: #{missing_seed_files.join(', ')}")
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 {Sequel::Seeder.apply(DB, '/')}.to raise_error("seeder not available for files; please checked the directory")
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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 {Sequel::Seeder.apply(DB, seed_test_dir)}.not_to raise_error
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
- SpecModel.dataset.delete
48
- Sequel::Seed::Base.descendants.clear
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.3.2
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-01-05 00:00:00.000000000 Z
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: 1.9.3
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: []