sequel 4.18.0 → 4.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +18 -0
  3. data/MIT-LICENSE +1 -1
  4. data/doc/advanced_associations.rdoc +1 -1
  5. data/doc/association_basics.rdoc +55 -34
  6. data/doc/model_hooks.rdoc +7 -5
  7. data/doc/release_notes/4.19.0.txt +45 -0
  8. data/doc/validations.rdoc +4 -0
  9. data/lib/sequel/adapters/shared/mysql.rb +5 -3
  10. data/lib/sequel/adapters/shared/sqlanywhere.rb +3 -2
  11. data/lib/sequel/dataset/sql.rb +1 -1
  12. data/lib/sequel/extensions/migration.rb +12 -8
  13. data/lib/sequel/model/associations.rb +24 -24
  14. data/lib/sequel/model/base.rb +39 -8
  15. data/lib/sequel/plugins/accessed_columns.rb +61 -0
  16. data/lib/sequel/plugins/association_pks.rb +4 -4
  17. data/lib/sequel/plugins/boolean_readers.rb +1 -1
  18. data/lib/sequel/plugins/class_table_inheritance.rb +1 -1
  19. data/lib/sequel/plugins/column_conflicts.rb +93 -0
  20. data/lib/sequel/plugins/composition.rb +3 -3
  21. data/lib/sequel/plugins/dirty.rb +6 -6
  22. data/lib/sequel/plugins/json_serializer.rb +1 -1
  23. data/lib/sequel/plugins/list.rb +4 -4
  24. data/lib/sequel/plugins/mssql_optimistic_locking.rb +1 -1
  25. data/lib/sequel/plugins/nested_attributes.rb +2 -2
  26. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  27. data/lib/sequel/plugins/pg_array_associations.rb +23 -23
  28. data/lib/sequel/plugins/prepared_statements_associations.rb +1 -1
  29. data/lib/sequel/plugins/rcte_tree.rb +2 -2
  30. data/lib/sequel/plugins/serialization.rb +1 -1
  31. data/lib/sequel/plugins/single_table_inheritance.rb +1 -1
  32. data/lib/sequel/plugins/timestamps.rb +2 -2
  33. data/lib/sequel/plugins/typecast_on_load.rb +1 -1
  34. data/lib/sequel/plugins/validation_class_methods.rb +4 -4
  35. data/lib/sequel/plugins/validation_helpers.rb +2 -2
  36. data/lib/sequel/version.rb +1 -1
  37. data/spec/core/dataset_spec.rb +7 -0
  38. data/spec/extensions/accessed_columns_spec.rb +51 -0
  39. data/spec/extensions/column_conflicts_spec.rb +55 -0
  40. data/spec/extensions/hook_class_methods_spec.rb +18 -5
  41. data/spec/extensions/migration_spec.rb +4 -1
  42. data/spec/extensions/static_cache_spec.rb +3 -3
  43. data/spec/model/hooks_spec.rb +76 -9
  44. data/spec/model/record_spec.rb +43 -2
  45. metadata +8 -2
@@ -278,7 +278,10 @@ describe "Sequel::IntegerMigrator" do
278
278
  end
279
279
 
280
280
  specify "should not raise and error if there is a missing integer migration version and allow_missing_migration_files is true" do
281
- proc{Sequel::Migrator.run(@db, "spec/files/missing_integer_migrations", :allow_missing_migration_files => true)}.should_not raise_error
281
+ Sequel::Migrator.run(@db, "spec/files/missing_integer_migrations", :allow_missing_migration_files => true)
282
+ @db.sqls.last.should == "UPDATE schema_info SET version = 3"
283
+ Sequel::Migrator.run(@db, "spec/files/missing_integer_migrations", :allow_missing_migration_files => true, :target=>0)
284
+ @db.sqls.last.should == "UPDATE schema_info SET version = 0"
282
285
  end
283
286
 
284
287
  specify "should raise and error if there is a duplicate integer migration version" do
@@ -261,17 +261,17 @@ describe "Sequel::Plugins::StaticCache with :frozen=>false option" do
261
261
  end
262
262
 
263
263
  it "should not allow the saving of new objects" do
264
- proc{@c.create}.should raise_error(Sequel::BeforeHookFailed)
264
+ proc{@c.create}.should raise_error(Sequel::HookFailed)
265
265
  end
266
266
 
267
267
  it "should not allow the saving of existing objects" do
268
268
  @db.fetch = {:id=>1}
269
- proc{@c.first(:id=>1).save}.should raise_error(Sequel::BeforeHookFailed)
269
+ proc{@c.first(:id=>1).save}.should raise_error(Sequel::HookFailed)
270
270
  end
271
271
 
272
272
  it "should not allow the destroying of existing objects" do
273
273
  @db.fetch = {:id=>1}
274
- proc{@c.first(:id=>1).destroy}.should raise_error(Sequel::BeforeHookFailed)
274
+ proc{@c.first(:id=>1).destroy}.should raise_error(Sequel::HookFailed)
275
275
  end
276
276
  end
277
277
 
@@ -22,7 +22,14 @@ describe "Model#before_create && Model#after_create" do
22
22
 
23
23
  specify ".create should cancel the save and raise an error if before_create returns false and raise_on_save_failure is true" do
24
24
  @c.send(:define_method, :before_create){false}
25
- proc{@c.create(:x => 2)}.should raise_error(Sequel::BeforeHookFailed)
25
+ proc{@c.create(:x => 2)}.should raise_error(Sequel::HookFailed)
26
+ DB.sqls.should == []
27
+ proc{@c.load(:id => 2233).save}.should_not raise_error
28
+ end
29
+
30
+ specify ".create should cancel the save and raise an error if before_create calls cancel_action and raise_on_save_failure is true" do
31
+ @c.send(:define_method, :before_create){cancel_action 'not good'}
32
+ proc{@c.create(:x => 2)}.should raise_error(Sequel::HookFailed, 'not good')
26
33
  DB.sqls.should == []
27
34
  proc{@c.load(:id => 2233).save}.should_not raise_error
28
35
  end
@@ -33,6 +40,13 @@ describe "Model#before_create && Model#after_create" do
33
40
  @c.create(:x => 2).should == nil
34
41
  DB.sqls.should == []
35
42
  end
43
+
44
+ specify ".create should cancel the save and return nil if before_create calls cancel_action and raise_on_save_failure is false" do
45
+ @c.send(:define_method, :before_create){cancel_action}
46
+ @c.raise_on_save_failure = false
47
+ @c.create(:x => 2).should == nil
48
+ DB.sqls.should == []
49
+ end
36
50
  end
37
51
 
38
52
  describe "Model#before_update && Model#after_update" do
@@ -55,14 +69,20 @@ describe "Model#before_update && Model#after_update" do
55
69
 
56
70
  specify "#save should cancel the save and raise an error if before_update returns false and raise_on_save_failure is true" do
57
71
  @c.send(:define_method, :before_update){false}
58
- proc{@c.load(:id => 2233).save}.should raise_error(Sequel::BeforeHookFailed)
72
+ proc{@c.load(:id => 2233).save}.should raise_error(Sequel::HookFailed)
73
+ DB.sqls.should == []
74
+ end
75
+
76
+ specify "#save should cancel the save and raise an error if before_update calls cancel_action and raise_on_save_failure is true" do
77
+ @c.send(:define_method, :before_update){cancel_action}
78
+ proc{@c.load(:id => 2233).save}.should raise_error(Sequel::HookFailed)
59
79
  DB.sqls.should == []
60
80
  end
61
81
 
62
82
  specify "#save should cancel the save and raise an error if before_update returns false and raise_on_failure option is true" do
63
83
  @c.send(:define_method, :before_update){false}
64
84
  @c.raise_on_save_failure = false
65
- proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::BeforeHookFailed)
85
+ proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::HookFailed)
66
86
  DB.sqls.should == []
67
87
  end
68
88
 
@@ -72,6 +92,13 @@ describe "Model#before_update && Model#after_update" do
72
92
  @c.load(:id => 2233).save.should == nil
73
93
  DB.sqls.should == []
74
94
  end
95
+
96
+ specify "#save should cancel the save and return nil if before_update calls cancel_action and raise_on_save_failure is false" do
97
+ @c.send(:define_method, :before_update){cancel_action}
98
+ @c.raise_on_save_failure = false
99
+ @c.load(:id => 2233).save.should == nil
100
+ DB.sqls.should == []
101
+ end
75
102
  end
76
103
 
77
104
  describe "Model#before_save && Model#after_save" do
@@ -102,14 +129,21 @@ describe "Model#before_save && Model#after_save" do
102
129
 
103
130
  specify "#save should cancel the save and raise an error if before_save returns false and raise_on_save_failure is true" do
104
131
  @c.send(:define_method, :before_save){false}
105
- proc{@c.load(:id => 2233).save}.should raise_error(Sequel::BeforeHookFailed)
132
+ proc{@c.load(:id => 2233).save}.should raise_error(Sequel::HookFailed)
106
133
  DB.sqls.should == []
107
134
  end
108
135
 
109
136
  specify "#save should cancel the save and raise an error if before_save returns false and raise_on_failure option is true" do
110
137
  @c.send(:define_method, :before_save){false}
111
138
  @c.raise_on_save_failure = false
112
- proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::BeforeHookFailed)
139
+ proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::HookFailed)
140
+ DB.sqls.should == []
141
+ end
142
+
143
+ specify "#save should cancel the save and raise an error if before_save calls cancel_action and raise_on_failure option is true" do
144
+ @c.send(:define_method, :before_save){cancel_action}
145
+ @c.raise_on_save_failure = false
146
+ proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::HookFailed)
113
147
  DB.sqls.should == []
114
148
  end
115
149
 
@@ -120,6 +154,13 @@ describe "Model#before_save && Model#after_save" do
120
154
  DB.sqls.should == []
121
155
  end
122
156
 
157
+ specify "#save should cancel the save and return nil if before_save calls cancel_action and raise_on_save_failure is false" do
158
+ @c.send(:define_method, :before_save){cancel_action}
159
+ @c.raise_on_save_failure = false
160
+ @c.load(:id => 2233).save.should == nil
161
+ DB.sqls.should == []
162
+ end
163
+
123
164
  specify "#save should have a raised exception reference the model instance" do
124
165
  @c.send(:define_method, :before_save){false}
125
166
  proc{@c.create(:x => 2233)}.should raise_error(Sequel::HookFailed){|e| e.model.should == @c.load(:x=>2233)}
@@ -146,14 +187,20 @@ describe "Model#before_destroy && Model#after_destroy" do
146
187
 
147
188
  specify "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_save_failure is true" do
148
189
  @c.send(:define_method, :before_destroy){false}
149
- proc{@c.load(:id => 2233).destroy}.should raise_error(Sequel::BeforeHookFailed)
190
+ proc{@c.load(:id => 2233).destroy}.should raise_error(Sequel::HookFailed)
191
+ DB.sqls.should == []
192
+ end
193
+
194
+ specify "#destroy should cancel the destroy and raise an error if before_destroy calls cancel_action and raise_on_save_failure is true" do
195
+ @c.send(:define_method, :before_destroy){cancel_action; true}
196
+ proc{@c.load(:id => 2233).destroy}.should raise_error(Sequel::HookFailed)
150
197
  DB.sqls.should == []
151
198
  end
152
199
 
153
200
  specify "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_failure option is true" do
154
201
  @c.send(:define_method, :before_destroy){false}
155
202
  @c.raise_on_save_failure = false
156
- proc{@c.load(:id => 2233).destroy(:raise_on_failure => true)}.should raise_error(Sequel::BeforeHookFailed)
203
+ proc{@c.load(:id => 2233).destroy(:raise_on_failure => true)}.should raise_error(Sequel::HookFailed)
157
204
  DB.sqls.should == []
158
205
  end
159
206
 
@@ -163,6 +210,13 @@ describe "Model#before_destroy && Model#after_destroy" do
163
210
  @c.load(:id => 2233).destroy.should == nil
164
211
  DB.sqls.should == []
165
212
  end
213
+
214
+ specify "#destroy should cancel the destroy and return nil if before_destroy calls cancel_action and raise_on_save_failure is false" do
215
+ @c.send(:define_method, :before_destroy){cancel_action; true}
216
+ @c.raise_on_save_failure = false
217
+ @c.load(:id => 2233).destroy.should == nil
218
+ DB.sqls.should == []
219
+ end
166
220
  end
167
221
 
168
222
  describe "Model#before_validation && Model#after_validation" do
@@ -204,23 +258,36 @@ describe "Model#before_validation && Model#after_validation" do
204
258
 
205
259
  specify "#save should cancel the save and raise an error if before_validation returns false and raise_on_save_failure is true" do
206
260
  @c.send(:define_method, :before_validation){false}
207
- proc{@c.load(:id => 2233).save}.should raise_error(Sequel::BeforeHookFailed)
261
+ proc{@c.load(:id => 2233).save}.should raise_error(Sequel::HookFailed)
208
262
  DB.sqls.should == []
209
263
  end
210
264
 
211
265
  specify "#save should cancel the save and raise an error if before_validation returns false and raise_on_failure option is true" do
212
266
  @c.send(:define_method, :before_validation){false}
213
267
  @c.raise_on_save_failure = false
214
- proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::BeforeHookFailed)
268
+ proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::HookFailed)
215
269
  DB.sqls.should == []
216
270
  end
217
271
 
272
+ specify "#save should cancel the save and raise an error if before_validation calls cancel_action and raise_on_save_failure is true" do
273
+ @c.send(:define_method, :before_validation){cancel_action}
274
+ proc{@c.load(:id => 2233).save}.should raise_error(Sequel::HookFailed)
275
+ DB.sqls.should == []
276
+ end
277
+
218
278
  specify "#save should cancel the save and return nil if before_validation returns false and raise_on_save_failure is false" do
219
279
  @c.send(:define_method, :before_validation){false}
220
280
  @c.raise_on_save_failure = false
221
281
  @c.load(:id => 2233).save.should == nil
222
282
  DB.sqls.should == []
223
283
  end
284
+
285
+ specify "#save should cancel the save and return nil if before_validation calls cancel_action and raise_on_save_failure is false" do
286
+ @c.send(:define_method, :before_validation){cancel_action}
287
+ @c.raise_on_save_failure = false
288
+ @c.load(:id => 2233).save.should == nil
289
+ DB.sqls.should == []
290
+ end
224
291
 
225
292
  specify "#valid? should return false if before_validation returns false" do
226
293
  @c.send(:define_method, :before_validation){false}
@@ -16,6 +16,21 @@ describe "Model#values" do
16
16
  end
17
17
  end
18
18
 
19
+ describe "Model#get_column_value and set_column_value" do
20
+ before do
21
+ @c = Class.new(Sequel::Model(:items))
22
+ @c.columns :x
23
+ @o = @c.load(:x=>1)
24
+ end
25
+
26
+ it "should get and set column values" do
27
+ @o.get_column_value(:x).should == 1
28
+ @o.set_column_value(:x=, 2)
29
+ @o.get_column_value(:x).should == 2
30
+ @o.x.should == 2
31
+ end
32
+ end
33
+
19
34
  describe "Model#save server use" do
20
35
  before do
21
36
  @db = Sequel.mock(:autoid=>proc{|sql| 10}, :fetch=>{:x=>1, :id=>10}, :servers=>{:blah=>{}, :read_only=>{}})
@@ -254,7 +269,18 @@ describe "Model#save" do
254
269
  def o.before_save
255
270
  false
256
271
  end
257
- proc { o.save(:columns=>:y) }.should raise_error(Sequel::BeforeHookFailed)
272
+ proc { o.save(:columns=>:y) }.should raise_error(Sequel::HookFailed)
273
+ DB.sqls.should == ["BEGIN", "ROLLBACK"]
274
+ end
275
+
276
+ it "should rollback if before_save calls cancel_action and raise_on_save_failure = true" do
277
+ o = @c.load(:id => 3, :x => 1, :y => nil)
278
+ o.use_transactions = true
279
+ o.raise_on_save_failure = true
280
+ def o.before_save
281
+ cancel_action
282
+ end
283
+ proc { o.save(:columns=>:y) }.should raise_error(Sequel::HookFailed)
258
284
  DB.sqls.should == ["BEGIN", "ROLLBACK"]
259
285
  end
260
286
 
@@ -265,7 +291,7 @@ describe "Model#save" do
265
291
  def o.before_save
266
292
  false
267
293
  end
268
- proc { o.save(:columns=>:y, :raise_on_failure => true) }.should raise_error(Sequel::BeforeHookFailed)
294
+ proc { o.save(:columns=>:y, :raise_on_failure => true) }.should raise_error(Sequel::HookFailed)
269
295
  DB.sqls.should == ["BEGIN", "ROLLBACK"]
270
296
  end
271
297
 
@@ -1171,6 +1197,21 @@ describe Sequel::Model, "#set_fields" do
1171
1197
  o.set_fields({:x => 3}, [:x, :y])
1172
1198
  o.values.should == {:x => 3}
1173
1199
  end
1200
+
1201
+ it "should respect set_column_value" do
1202
+ @c.class_eval do
1203
+ def set_column_value(c, v)
1204
+ if c.to_s == 'model='
1205
+ self[:model] = v
1206
+ else
1207
+ send(c, v)
1208
+ end
1209
+ end
1210
+ end
1211
+ @o1.set_fields({:model=>2, :x=>3}, [:model, :x])
1212
+ @o1[:model].should == 2
1213
+ @o1.x.should == 3
1214
+ end
1174
1215
  end
1175
1216
 
1176
1217
  describe Sequel::Model, "#update_fields" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.18.0
4
+ version: 4.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-02 00:00:00.000000000 Z
11
+ date: 2015-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -191,6 +191,7 @@ extra_rdoc_files:
191
191
  - doc/release_notes/4.16.0.txt
192
192
  - doc/release_notes/4.17.0.txt
193
193
  - doc/release_notes/4.18.0.txt
194
+ - doc/release_notes/4.19.0.txt
194
195
  files:
195
196
  - CHANGELOG
196
197
  - MIT-LICENSE
@@ -296,6 +297,7 @@ files:
296
297
  - doc/release_notes/4.16.0.txt
297
298
  - doc/release_notes/4.17.0.txt
298
299
  - doc/release_notes/4.18.0.txt
300
+ - doc/release_notes/4.19.0.txt
299
301
  - doc/release_notes/4.2.0.txt
300
302
  - doc/release_notes/4.3.0.txt
301
303
  - doc/release_notes/4.4.0.txt
@@ -483,6 +485,7 @@ files:
483
485
  - lib/sequel/model/inflections.rb
484
486
  - lib/sequel/model/plugins.rb
485
487
  - lib/sequel/no_core_ext.rb
488
+ - lib/sequel/plugins/accessed_columns.rb
486
489
  - lib/sequel/plugins/active_model.rb
487
490
  - lib/sequel/plugins/after_initialize.rb
488
491
  - lib/sequel/plugins/association_autoreloading.rb
@@ -494,6 +497,7 @@ files:
494
497
  - lib/sequel/plugins/boolean_readers.rb
495
498
  - lib/sequel/plugins/caching.rb
496
499
  - lib/sequel/plugins/class_table_inheritance.rb
500
+ - lib/sequel/plugins/column_conflicts.rb
497
501
  - lib/sequel/plugins/column_select.rb
498
502
  - lib/sequel/plugins/composition.rb
499
503
  - lib/sequel/plugins/constraint_validations.rb
@@ -576,6 +580,7 @@ files:
576
580
  - spec/core/spec_helper.rb
577
581
  - spec/core/version_spec.rb
578
582
  - spec/core_extensions_spec.rb
583
+ - spec/extensions/accessed_columns_spec.rb
579
584
  - spec/extensions/active_model_spec.rb
580
585
  - spec/extensions/after_initialize_spec.rb
581
586
  - spec/extensions/arbitrary_servers_spec.rb
@@ -588,6 +593,7 @@ files:
588
593
  - spec/extensions/boolean_readers_spec.rb
589
594
  - spec/extensions/caching_spec.rb
590
595
  - spec/extensions/class_table_inheritance_spec.rb
596
+ - spec/extensions/column_conflicts_spec.rb
591
597
  - spec/extensions/column_select_spec.rb
592
598
  - spec/extensions/columns_introspection_spec.rb
593
599
  - spec/extensions/composition_spec.rb