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 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: []