sequel 4.44.0 → 4.45.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +110 -0
- data/README.rdoc +8 -9
- data/doc/active_record.rdoc +2 -3
- data/doc/model_plugins.rdoc +1 -1
- data/doc/opening_databases.rdoc +0 -46
- data/doc/release_notes/4.45.0.txt +370 -0
- data/lib/sequel/adapters/cubrid.rb +2 -0
- data/lib/sequel/adapters/do.rb +2 -0
- data/lib/sequel/adapters/jdbc/as400.rb +2 -0
- data/lib/sequel/adapters/jdbc/cubrid.rb +2 -0
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +2 -0
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +2 -0
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +2 -0
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -0
- data/lib/sequel/adapters/jdbc/postgresql.rb +5 -0
- data/lib/sequel/adapters/mysql.rb +1 -0
- data/lib/sequel/adapters/mysql2.rb +1 -0
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/odbc/progress.rb +2 -0
- data/lib/sequel/adapters/postgres.rb +0 -2
- data/lib/sequel/adapters/shared/cubrid.rb +2 -0
- data/lib/sequel/adapters/shared/firebird.rb +2 -0
- data/lib/sequel/adapters/shared/informix.rb +2 -0
- data/lib/sequel/adapters/shared/mssql.rb +47 -7
- data/lib/sequel/adapters/shared/mysql.rb +16 -1
- data/lib/sequel/adapters/shared/postgres.rb +9 -1
- data/lib/sequel/adapters/shared/progress.rb +2 -0
- data/lib/sequel/adapters/shared/sqlanywhere.rb +1 -1
- data/lib/sequel/adapters/swift.rb +2 -0
- data/lib/sequel/ast_transformer.rb +13 -6
- data/lib/sequel/core.rb +13 -16
- data/lib/sequel/database/connecting.rb +25 -10
- data/lib/sequel/database/dataset.rb +6 -1
- data/lib/sequel/database/dataset_defaults.rb +9 -2
- data/lib/sequel/database/misc.rb +10 -3
- data/lib/sequel/database/schema_methods.rb +4 -0
- data/lib/sequel/dataset/mutation.rb +8 -20
- data/lib/sequel/dataset/prepared_statements.rb +2 -0
- data/lib/sequel/dataset/query.rb +32 -7
- data/lib/sequel/dataset/sql.rb +13 -3
- data/lib/sequel/deprecated.rb +9 -1
- data/lib/sequel/exceptions.rb +37 -8
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +117 -0
- data/lib/sequel/extensions/date_arithmetic.rb +1 -0
- data/lib/sequel/extensions/identifier_mangling.rb +3 -2
- data/lib/sequel/extensions/pg_hstore.rb +1 -5
- data/lib/sequel/extensions/schema_dumper.rb +3 -1
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +1 -0
- data/lib/sequel/model.rb +23 -10
- data/lib/sequel/model/associations.rb +17 -5
- data/lib/sequel/model/base.rb +115 -62
- data/lib/sequel/model/dataset_module.rb +10 -3
- data/lib/sequel/model/exceptions.rb +7 -5
- data/lib/sequel/plugins/association_pks.rb +13 -1
- data/lib/sequel/plugins/association_proxies.rb +8 -1
- data/lib/sequel/plugins/before_after_save.rb +1 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +7 -3
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +10 -5
- data/lib/sequel/plugins/error_splitter.rb +1 -1
- data/lib/sequel/plugins/hook_class_methods.rb +39 -5
- data/lib/sequel/plugins/instance_hooks.rb +58 -5
- data/lib/sequel/plugins/lazy_attributes.rb +10 -5
- data/lib/sequel/plugins/nested_attributes.rb +10 -5
- data/lib/sequel/plugins/prepared_statements.rb +7 -0
- data/lib/sequel/plugins/prepared_statements_associations.rb +2 -0
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +2 -0
- data/lib/sequel/plugins/schema.rb +2 -0
- data/lib/sequel/plugins/scissors.rb +2 -0
- data/lib/sequel/plugins/serialization.rb +10 -5
- data/lib/sequel/plugins/split_values.rb +5 -1
- data/lib/sequel/plugins/static_cache.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +1 -1
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +1 -0
- data/lib/sequel/sql.rb +1 -1
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/mssql_spec.rb +31 -0
- data/spec/adapters/mysql_spec.rb +20 -2
- data/spec/adapters/postgres_spec.rb +43 -12
- data/spec/adapters/spec_helper.rb +5 -8
- data/spec/core/database_spec.rb +47 -12
- data/spec/core/dataset_mutation_spec.rb +22 -22
- data/spec/core/dataset_spec.rb +88 -20
- data/spec/core/deprecated_spec.rb +1 -1
- data/spec/core/expression_filters_spec.rb +1 -1
- data/spec/core/mock_adapter_spec.rb +0 -3
- data/spec/core/placeholder_literalizer_spec.rb +1 -1
- data/spec/core/schema_spec.rb +8 -1
- data/spec/core/spec_helper.rb +6 -1
- data/spec/core_extensions_spec.rb +4 -0
- data/spec/deprecation_helper.rb +17 -0
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +314 -0
- data/spec/extensions/association_pks_spec.rb +61 -13
- data/spec/extensions/association_proxies_spec.rb +3 -3
- data/spec/extensions/class_table_inheritance_spec.rb +39 -0
- data/spec/extensions/columns_updated_spec.rb +35 -0
- data/spec/extensions/composition_spec.rb +6 -1
- data/spec/extensions/hook_class_methods_spec.rb +114 -26
- data/spec/extensions/identifier_mangling_spec.rb +107 -73
- data/spec/extensions/instance_hooks_spec.rb +78 -14
- data/spec/extensions/lazy_attributes_spec.rb +8 -2
- data/spec/extensions/many_through_many_spec.rb +2 -2
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/nested_attributes_spec.rb +8 -2
- data/spec/extensions/pg_array_spec.rb +18 -4
- data/spec/extensions/prepared_statements_associations_spec.rb +48 -39
- data/spec/extensions/prepared_statements_with_pk_spec.rb +13 -11
- data/spec/extensions/query_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +34 -6
- data/spec/extensions/schema_spec.rb +13 -7
- data/spec/extensions/scissors_spec.rb +3 -1
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +4 -4
- data/spec/extensions/serialization_spec.rb +7 -1
- data/spec/extensions/set_overrides_spec.rb +2 -2
- data/spec/extensions/shared_caching_spec.rb +19 -15
- data/spec/extensions/spec_helper.rb +7 -3
- data/spec/extensions/split_values_spec.rb +45 -10
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/subset_conditions_spec.rb +3 -3
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -1
- data/spec/extensions/validation_contexts_spec.rb +31 -0
- data/spec/guards_helper.rb +2 -0
- data/spec/integration/associations_test.rb +22 -20
- data/spec/integration/dataset_test.rb +25 -2
- data/spec/integration/model_test.rb +1 -1
- data/spec/integration/plugin_test.rb +11 -16
- data/spec/integration/prepared_statement_test.rb +40 -32
- data/spec/integration/spec_helper.rb +5 -8
- data/spec/model/association_reflection_spec.rb +4 -0
- data/spec/model/associations_spec.rb +37 -10
- data/spec/model/base_spec.rb +6 -0
- data/spec/model/hooks_spec.rb +56 -35
- data/spec/model/model_spec.rb +21 -5
- data/spec/model/record_spec.rb +14 -11
- data/spec/model/spec_helper.rb +7 -1
- data/spec/sequel_warning.rb +11 -0
- metadata +13 -3
@@ -650,6 +650,10 @@ describe "Sequel::Model.finalize_associations" do
|
|
650
650
|
Object.send(:remove_const, :OtoItem)
|
651
651
|
end
|
652
652
|
|
653
|
+
it "AssociationReflection should have default finalize_settings method" do
|
654
|
+
Sequel::Model::Associations::AssociationReflection.new.finalize_settings[:associated_class].must_equal :class
|
655
|
+
end
|
656
|
+
|
653
657
|
it "should finalize many_to_one associations" do
|
654
658
|
r = Item.association_reflection(:item)
|
655
659
|
r[:class].must_equal Item
|
@@ -447,12 +447,14 @@ describe Sequel::Model, "many_to_one" do
|
|
447
447
|
DB.reset
|
448
448
|
d.parent_id = 234
|
449
449
|
d.associations[:parent] = 42
|
450
|
-
d.parent(true).wont_equal 42
|
451
|
-
DB.sqls.must_equal ["SELECT * FROM nodes WHERE id = 234"]
|
452
450
|
d.parent(:reload=>true).wont_equal 42
|
453
451
|
DB.sqls.must_equal ["SELECT * FROM nodes WHERE id = 234"]
|
454
|
-
|
455
|
-
|
452
|
+
deprecated do
|
453
|
+
d.parent(true).wont_equal 42
|
454
|
+
DB.sqls.must_equal ["SELECT * FROM nodes WHERE id = 234"]
|
455
|
+
d.parent(Object.new).wont_equal 42
|
456
|
+
DB.sqls.must_equal ["SELECT * FROM nodes WHERE id = 234"]
|
457
|
+
end
|
456
458
|
end
|
457
459
|
|
458
460
|
it "should use a callback if given one as the argument" do
|
@@ -462,7 +464,7 @@ describe Sequel::Model, "many_to_one" do
|
|
462
464
|
DB.reset
|
463
465
|
d.parent_id = 234
|
464
466
|
d.associations[:parent] = 42
|
465
|
-
d.parent
|
467
|
+
d.parent{|ds| ds.where{name > 'M'}}.wont_equal 42
|
466
468
|
DB.sqls.must_equal ["SELECT * FROM nodes WHERE ((nodes.id = 234) AND (name > 'M')) LIMIT 1"]
|
467
469
|
end
|
468
470
|
|
@@ -995,8 +997,12 @@ describe Sequel::Model, "one_to_one" do
|
|
995
997
|
@c2.one_to_one :parent, :class => @c2
|
996
998
|
d = @c2.load(:id => 1)
|
997
999
|
d.associations[:parent] = [42]
|
998
|
-
d.parent(true).wont_equal 42
|
1000
|
+
d.parent(:reload=>true).wont_equal 42
|
999
1001
|
DB.sqls.must_equal ["SELECT * FROM nodes WHERE (nodes.node_id = 1) LIMIT 1"]
|
1002
|
+
deprecated do
|
1003
|
+
d.parent(true).wont_equal 42
|
1004
|
+
DB.sqls.must_equal ["SELECT * FROM nodes WHERE (nodes.node_id = 1) LIMIT 1"]
|
1005
|
+
end
|
1000
1006
|
end
|
1001
1007
|
|
1002
1008
|
it "should have the setter set the reciprocal many_to_one cached association" do
|
@@ -1223,7 +1229,16 @@ describe Sequel::Model, "one_to_many" do
|
|
1223
1229
|
end
|
1224
1230
|
end
|
1225
1231
|
|
1226
|
-
it "should use a callback if given one as
|
1232
|
+
it "should use a callback if given one as a block" do
|
1233
|
+
@c2.one_to_many :attributes, :class => @c1, :key => :nodeid
|
1234
|
+
|
1235
|
+
d = @c2.load(:id => 1234)
|
1236
|
+
d.associations[:attributes] = []
|
1237
|
+
d.attributes{|ds| ds.where{name > 'M'}}.wont_equal []
|
1238
|
+
DB.sqls.must_equal ["SELECT * FROM attributes WHERE ((attributes.nodeid = 1234) AND (name > 'M'))"]
|
1239
|
+
end
|
1240
|
+
|
1241
|
+
deprecated "should use a callback if given one as the argument" do
|
1227
1242
|
@c2.one_to_many :attributes, :class => @c1, :key => :nodeid
|
1228
1243
|
|
1229
1244
|
d = @c2.load(:id => 1234)
|
@@ -1552,8 +1567,12 @@ describe Sequel::Model, "one_to_many" do
|
|
1552
1567
|
@c2.one_to_many :attributes, :class => @c1
|
1553
1568
|
n = @c2.new(:id => 1234)
|
1554
1569
|
n.associations[:attributes] = 42
|
1555
|
-
n.attributes(true).wont_equal 42
|
1570
|
+
n.attributes(:reload=>true).wont_equal 42
|
1556
1571
|
DB.sqls.must_equal ['SELECT * FROM attributes WHERE (attributes.node_id = 1234)']
|
1572
|
+
deprecated do
|
1573
|
+
n.attributes(true).wont_equal 42
|
1574
|
+
DB.sqls.must_equal ['SELECT * FROM attributes WHERE (attributes.node_id = 1234)']
|
1575
|
+
end
|
1557
1576
|
end
|
1558
1577
|
|
1559
1578
|
it "should add item to cache if it exists when calling add_" do
|
@@ -2416,8 +2435,12 @@ describe Sequel::Model, "many_to_many" do
|
|
2416
2435
|
|
2417
2436
|
n = @c2.new(:id => 1234)
|
2418
2437
|
n.associations[:attributes] = 42
|
2419
|
-
n.attributes(true).wont_equal 42
|
2438
|
+
n.attributes(:reload=>true).wont_equal 42
|
2420
2439
|
DB.sqls.must_equal ["SELECT attributes.* FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.attribute_id = attributes.id) WHERE (attributes_nodes.node_id = 1234)"]
|
2440
|
+
deprecated do
|
2441
|
+
n.attributes(true).wont_equal 42
|
2442
|
+
DB.sqls.must_equal ["SELECT attributes.* FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.attribute_id = attributes.id) WHERE (attributes_nodes.node_id = 1234)"]
|
2443
|
+
end
|
2421
2444
|
end
|
2422
2445
|
|
2423
2446
|
it "should add item to cache if it exists when calling add_" do
|
@@ -3004,8 +3027,12 @@ describe Sequel::Model, "one_through_one" do
|
|
3004
3027
|
|
3005
3028
|
n = @c2.new(:id => 1234)
|
3006
3029
|
n.associations[:attribute] = 42
|
3007
|
-
n.attribute(true).wont_equal 42
|
3030
|
+
n.attribute(:reload=>true).wont_equal 42
|
3008
3031
|
DB.sqls.must_equal ["SELECT attributes.* FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.attribute_id = attributes.id) WHERE (attributes_nodes.node_id = 1234) LIMIT 1"]
|
3032
|
+
deprecated do
|
3033
|
+
n.attribute(true).wont_equal 42
|
3034
|
+
DB.sqls.must_equal ["SELECT attributes.* FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.attribute_id = attributes.id) WHERE (attributes_nodes.node_id = 1234) LIMIT 1"]
|
3035
|
+
end
|
3009
3036
|
end
|
3010
3037
|
|
3011
3038
|
it "should not add associations methods directly to class" do
|
data/spec/model/base_spec.rb
CHANGED
@@ -285,6 +285,12 @@ describe Sequel::Model, ".dataset_module" do
|
|
285
285
|
@c.where(:foo).released.sql.must_equal 'SELECT * FROM items WHERE (foo AND released)'
|
286
286
|
end
|
287
287
|
|
288
|
+
if Sequel::Model.dataset_module_class == Sequel::Model::DatasetModule
|
289
|
+
it "should have dataset_module not support an eager method" do
|
290
|
+
proc{@c.dataset_module{eager :foo}}.must_raise NoMethodError
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
288
294
|
it "should have dataset_module support a having method" do
|
289
295
|
@c.dataset_module{having(:released){released}}
|
290
296
|
@c.released.sql.must_equal 'SELECT * FROM items HAVING released'
|
data/spec/model/hooks_spec.rb
CHANGED
@@ -20,7 +20,7 @@ describe "Model#before_create && Model#after_create" do
|
|
20
20
|
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after', 'SELECT * FROM items WHERE x = 2']
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
deprecated ".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
25
|
proc{@c.create(:x => 2)}.must_raise(Sequel::HookFailed)
|
26
26
|
DB.sqls.must_equal []
|
@@ -34,7 +34,7 @@ describe "Model#before_create && Model#after_create" do
|
|
34
34
|
@c.load(:id => 2233).save
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
deprecated ".create should cancel the save and return nil if before_create returns false and raise_on_save_failure is false" do
|
38
38
|
@c.send(:define_method, :before_create){false}
|
39
39
|
@c.raise_on_save_failure = false
|
40
40
|
@c.create(:x => 2).must_be_nil
|
@@ -67,7 +67,7 @@ describe "Model#before_update && Model#after_update" do
|
|
67
67
|
DB.sqls.must_equal ['BLAH before', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'BLAH after']
|
68
68
|
end
|
69
69
|
|
70
|
-
|
70
|
+
deprecated "#save should cancel the save and raise an error if before_update returns false and raise_on_save_failure is true" do
|
71
71
|
@c.send(:define_method, :before_update){false}
|
72
72
|
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
73
73
|
DB.sqls.must_equal []
|
@@ -79,14 +79,14 @@ describe "Model#before_update && Model#after_update" do
|
|
79
79
|
DB.sqls.must_equal []
|
80
80
|
end
|
81
81
|
|
82
|
-
|
82
|
+
deprecated "#save should cancel the save and raise an error if before_update returns false and raise_on_failure option is true" do
|
83
83
|
@c.send(:define_method, :before_update){false}
|
84
84
|
@c.raise_on_save_failure = false
|
85
85
|
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
|
86
86
|
DB.sqls.must_equal []
|
87
87
|
end
|
88
88
|
|
89
|
-
|
89
|
+
deprecated "#save should cancel the save and return nil if before_update returns false and raise_on_save_failure is false" do
|
90
90
|
@c.send(:define_method, :before_update){false}
|
91
91
|
@c.raise_on_save_failure = false
|
92
92
|
@c.load(:id => 2233).save.must_be_nil
|
@@ -127,13 +127,13 @@ describe "Model#before_save && Model#after_save" do
|
|
127
127
|
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after', 'SELECT * FROM items WHERE x = 2']
|
128
128
|
end
|
129
129
|
|
130
|
-
|
130
|
+
deprecated "#save should cancel the save and raise an error if before_save returns false and raise_on_save_failure is true" do
|
131
131
|
@c.send(:define_method, :before_save){false}
|
132
132
|
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
133
133
|
DB.sqls.must_equal []
|
134
134
|
end
|
135
135
|
|
136
|
-
|
136
|
+
deprecated "#save should cancel the save and raise an error if before_save returns false and raise_on_failure option is true" do
|
137
137
|
@c.send(:define_method, :before_save){false}
|
138
138
|
@c.raise_on_save_failure = false
|
139
139
|
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
|
@@ -147,7 +147,7 @@ describe "Model#before_save && Model#after_save" do
|
|
147
147
|
DB.sqls.must_equal []
|
148
148
|
end
|
149
149
|
|
150
|
-
|
150
|
+
deprecated "#save should cancel the save and return nil if before_save returns false and raise_on_save_failure is false" do
|
151
151
|
@c.send(:define_method, :before_save){false}
|
152
152
|
@c.raise_on_save_failure = false
|
153
153
|
@c.load(:id => 2233).save.must_be_nil
|
@@ -162,7 +162,7 @@ describe "Model#before_save && Model#after_save" do
|
|
162
162
|
end
|
163
163
|
|
164
164
|
it "#save should have a raised exception reference the model instance" do
|
165
|
-
@c.send(:define_method, :before_save){
|
165
|
+
@c.send(:define_method, :before_save){cancel_action}
|
166
166
|
proc{@c.create(:x => 2233)}.must_raise(Sequel::HookFailed){|e| e.model.must_equal @c.load(:x=>2233)}
|
167
167
|
DB.sqls.must_equal []
|
168
168
|
end
|
@@ -185,7 +185,7 @@ describe "Model#before_destroy && Model#after_destroy" do
|
|
185
185
|
DB.sqls.must_equal ['BLAH before', 'DELETE FROM items WHERE id = 2233', 'BLAH after']
|
186
186
|
end
|
187
187
|
|
188
|
-
|
188
|
+
deprecated "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_save_failure is true" do
|
189
189
|
@c.send(:define_method, :before_destroy){false}
|
190
190
|
proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
|
191
191
|
DB.sqls.must_equal []
|
@@ -197,14 +197,14 @@ describe "Model#before_destroy && Model#after_destroy" do
|
|
197
197
|
DB.sqls.must_equal []
|
198
198
|
end
|
199
199
|
|
200
|
-
|
200
|
+
deprecated "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_failure option is true" do
|
201
201
|
@c.send(:define_method, :before_destroy){false}
|
202
202
|
@c.raise_on_save_failure = false
|
203
203
|
proc{@c.load(:id => 2233).destroy(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
|
204
204
|
DB.sqls.must_equal []
|
205
205
|
end
|
206
206
|
|
207
|
-
|
207
|
+
deprecated "#destroy should cancel the destroy and return nil if before_destroy returns false and raise_on_save_failure is false" do
|
208
208
|
@c.send(:define_method, :before_destroy){false}
|
209
209
|
@c.raise_on_save_failure = false
|
210
210
|
@c.load(:id => 2233).destroy.must_be_nil
|
@@ -257,13 +257,13 @@ describe "Model#before_validation && Model#after_validation" do
|
|
257
257
|
DB.sqls.must_equal ['BLAH before', 'BLAH after']
|
258
258
|
end
|
259
259
|
|
260
|
-
|
260
|
+
deprecated "#save should cancel the save and raise an error if before_validation returns false and raise_on_save_failure is true" do
|
261
261
|
@c.send(:define_method, :before_validation){false}
|
262
262
|
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
263
263
|
DB.sqls.must_equal []
|
264
264
|
end
|
265
265
|
|
266
|
-
|
266
|
+
deprecated "#save should cancel the save and raise an error if before_validation returns false and raise_on_failure option is true" do
|
267
267
|
@c.send(:define_method, :before_validation){false}
|
268
268
|
@c.raise_on_save_failure = false
|
269
269
|
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
|
@@ -276,7 +276,7 @@ describe "Model#before_validation && Model#after_validation" do
|
|
276
276
|
DB.sqls.must_equal []
|
277
277
|
end
|
278
278
|
|
279
|
-
|
279
|
+
deprecated "#save should cancel the save and return nil if before_validation returns false and raise_on_save_failure is false" do
|
280
280
|
@c.send(:define_method, :before_validation){false}
|
281
281
|
@c.raise_on_save_failure = false
|
282
282
|
@c.load(:id => 2233).save.must_be_nil
|
@@ -290,7 +290,12 @@ describe "Model#before_validation && Model#after_validation" do
|
|
290
290
|
DB.sqls.must_equal []
|
291
291
|
end
|
292
292
|
|
293
|
-
it "#valid? should return false if before_validation
|
293
|
+
it "#valid? should return false if before_validation calls cancel_action" do
|
294
|
+
@c.send(:define_method, :before_validation){cancel_action}
|
295
|
+
@c.load(:id => 2233).valid?.must_equal false
|
296
|
+
end
|
297
|
+
|
298
|
+
deprecated "#valid? should return false if before_validation returns false" do
|
294
299
|
@c.send(:define_method, :before_validation){false}
|
295
300
|
@c.load(:id => 2233).valid?.must_equal false
|
296
301
|
end
|
@@ -379,6 +384,22 @@ describe "Model around filters" do
|
|
379
384
|
DB.sqls.must_equal [ 'av_before', 'validate', 'av_after' ]
|
380
385
|
end
|
381
386
|
|
387
|
+
it "around_validation should handle cancel_action" do
|
388
|
+
@c.class_eval do
|
389
|
+
def around_validation
|
390
|
+
DB << 'av_before'
|
391
|
+
cancel_action
|
392
|
+
super
|
393
|
+
DB << 'av_after'
|
394
|
+
end
|
395
|
+
def validate
|
396
|
+
DB << 'validate'
|
397
|
+
end
|
398
|
+
end
|
399
|
+
@c.new(:x => 2).valid?.must_equal false
|
400
|
+
DB.sqls.must_equal [ 'av_before' ]
|
401
|
+
end
|
402
|
+
|
382
403
|
it "around_validation should be able to catch validation errors and modify them" do
|
383
404
|
@c.class_eval do
|
384
405
|
def validate
|
@@ -480,25 +501,25 @@ describe "Model#after_commit and #after_rollback" do
|
|
480
501
|
@db.sqls
|
481
502
|
end
|
482
503
|
|
483
|
-
|
504
|
+
deprecated "should call after_commit for save after the transaction commits if it commits" do
|
484
505
|
@o.save
|
485
506
|
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT', 'ac']
|
486
507
|
end
|
487
508
|
|
488
|
-
|
509
|
+
deprecated "should call after_rollback for save after the transaction rolls back if it rolls back" do
|
489
510
|
@o.rb = true
|
490
511
|
@o.save
|
491
512
|
@db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK', 'ar']
|
492
513
|
end
|
493
514
|
|
494
|
-
|
515
|
+
deprecated "should have after_commit respect any surrounding transactions" do
|
495
516
|
@db.transaction do
|
496
517
|
@o.save
|
497
518
|
end
|
498
519
|
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT', 'ac']
|
499
520
|
end
|
500
521
|
|
501
|
-
|
522
|
+
deprecated "should have after_rollback respect any surrounding transactions" do
|
502
523
|
@db.transaction do
|
503
524
|
@o.rb = true
|
504
525
|
@o.save
|
@@ -506,14 +527,14 @@ describe "Model#after_commit and #after_rollback" do
|
|
506
527
|
@db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK', 'ar']
|
507
528
|
end
|
508
529
|
|
509
|
-
|
530
|
+
deprecated "should have after_commit work with surrounding transactions and sharding" do
|
510
531
|
@db.transaction(:server=>:test) do
|
511
532
|
@o.save
|
512
533
|
end
|
513
534
|
@db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'as', 'COMMIT', 'ac', 'COMMIT -- test']
|
514
535
|
end
|
515
536
|
|
516
|
-
|
537
|
+
deprecated "should have after_rollback work with surrounding transactions and sharding" do
|
517
538
|
@db.transaction(:server=>:test) do
|
518
539
|
@o.rb = true
|
519
540
|
@o.save
|
@@ -521,25 +542,25 @@ describe "Model#after_commit and #after_rollback" do
|
|
521
542
|
@db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'as', 'ROLLBACK', 'ar', 'COMMIT -- test']
|
522
543
|
end
|
523
544
|
|
524
|
-
|
545
|
+
deprecated "should call after_destroy_commit for destroy after the transaction commits if it commits" do
|
525
546
|
@o.destroy
|
526
547
|
@db.sqls.must_equal ['BEGIN', 'ad', 'COMMIT', 'adc']
|
527
548
|
end
|
528
549
|
|
529
|
-
|
550
|
+
deprecated "should call after_destroy_rollback for destroy after the transaction rolls back if it rolls back" do
|
530
551
|
@o.rb = true
|
531
552
|
@o.destroy
|
532
553
|
@db.sqls.must_equal ['BEGIN', 'ad', 'ROLLBACK', 'adr']
|
533
554
|
end
|
534
555
|
|
535
|
-
|
556
|
+
deprecated "should have after_destroy_commit respect any surrounding transactions" do
|
536
557
|
@db.transaction do
|
537
558
|
@o.destroy
|
538
559
|
end
|
539
560
|
@db.sqls.must_equal ['BEGIN', 'ad', 'COMMIT', 'adc']
|
540
561
|
end
|
541
562
|
|
542
|
-
|
563
|
+
deprecated "should have after_destroy_rollback respect any surrounding transactions" do
|
543
564
|
@db.transaction do
|
544
565
|
@o.rb = true
|
545
566
|
@o.destroy
|
@@ -547,14 +568,14 @@ describe "Model#after_commit and #after_rollback" do
|
|
547
568
|
@db.sqls.must_equal ['BEGIN', 'ad', 'ROLLBACK', 'adr']
|
548
569
|
end
|
549
570
|
|
550
|
-
|
571
|
+
deprecated "should have after_destroy commit work with surrounding transactions and sharding" do
|
551
572
|
@db.transaction(:server=>:test) do
|
552
573
|
@o.destroy
|
553
574
|
end
|
554
575
|
@db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'ad', 'COMMIT', 'adc', 'COMMIT -- test']
|
555
576
|
end
|
556
577
|
|
557
|
-
|
578
|
+
deprecated "should have after_destroy_rollback work with surrounding transactions and sharding" do
|
558
579
|
@db.transaction(:server=>:test) do
|
559
580
|
@o.rb = true
|
560
581
|
@o.destroy
|
@@ -562,39 +583,39 @@ describe "Model#after_commit and #after_rollback" do
|
|
562
583
|
@db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'ad', 'ROLLBACK', 'adr', 'COMMIT -- test']
|
563
584
|
end
|
564
585
|
|
565
|
-
|
586
|
+
deprecated "should not call after_commit if use_after_commit_rollback is false" do
|
566
587
|
@o.use_after_commit_rollback = false
|
567
588
|
@o.save
|
568
589
|
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT']
|
569
590
|
end
|
570
591
|
|
571
|
-
|
592
|
+
deprecated "should not call after_rollback if use_after_commit_rollback is false" do
|
572
593
|
@o.use_after_commit_rollback = false
|
573
594
|
@o.rb = true
|
574
595
|
@o.save
|
575
596
|
@db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK']
|
576
597
|
end
|
577
598
|
|
578
|
-
|
599
|
+
deprecated "should not call after_destroy_commit if use_after_commit_rollback is false" do
|
579
600
|
@o.use_after_commit_rollback = false
|
580
601
|
@o.destroy
|
581
602
|
@db.sqls.must_equal ['BEGIN', 'ad', 'COMMIT']
|
582
603
|
end
|
583
604
|
|
584
|
-
|
605
|
+
deprecated "should not call after_destroy_rollback for save if use_after_commit_rollback is false" do
|
585
606
|
@o.use_after_commit_rollback = false
|
586
607
|
@o.rb = true
|
587
608
|
@o.destroy
|
588
609
|
@db.sqls.must_equal ['BEGIN', 'ad', 'ROLLBACK']
|
589
610
|
end
|
590
611
|
|
591
|
-
|
612
|
+
deprecated "should handle use_after_commit_rollback at the class level" do
|
592
613
|
@m.use_after_commit_rollback = false
|
593
614
|
@o.save
|
594
615
|
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT']
|
595
616
|
end
|
596
617
|
|
597
|
-
|
618
|
+
deprecated "should handle use_after_commit_rollback when subclassing" do
|
598
619
|
@m.use_after_commit_rollback = false
|
599
620
|
o = Class.new(@m).load({})
|
600
621
|
@db.sqls
|
@@ -602,7 +623,7 @@ describe "Model#after_commit and #after_rollback" do
|
|
602
623
|
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT']
|
603
624
|
end
|
604
625
|
|
605
|
-
|
626
|
+
deprecated "should handle use_after_commit_rollback when subclassing after loading" do
|
606
627
|
@m = Class.new(Sequel::Model(@db[:items]))
|
607
628
|
@m.use_transactions = true
|
608
629
|
o = @m.load({})
|
data/spec/model/model_spec.rb
CHANGED
@@ -102,17 +102,19 @@ describe "Sequel::Model()" do
|
|
102
102
|
|
103
103
|
describe "reloading" do
|
104
104
|
before do
|
105
|
-
Sequel.cache_anonymous_models = true
|
105
|
+
Sequel::Model.cache_anonymous_models = true
|
106
106
|
end
|
107
107
|
after do
|
108
|
-
Sequel.cache_anonymous_models = false
|
108
|
+
Sequel::Model.cache_anonymous_models = false
|
109
109
|
Object.send(:remove_const, :Album) if defined?(::Album)
|
110
110
|
end
|
111
111
|
|
112
|
-
|
112
|
+
deprecated "Sequel.cache_anonymous_models should return value for Sequel::Model" do
|
113
113
|
Sequel.cache_anonymous_models.must_equal true
|
114
114
|
Sequel::Model.cache_anonymous_models = false
|
115
115
|
Sequel.cache_anonymous_models.must_equal false
|
116
|
+
Sequel.cache_anonymous_models = true
|
117
|
+
Sequel.cache_anonymous_models.must_equal true
|
116
118
|
end
|
117
119
|
|
118
120
|
it "should work without raising an exception with a symbol" do
|
@@ -156,14 +158,14 @@ describe "Sequel::Model()" do
|
|
156
158
|
end
|
157
159
|
|
158
160
|
it "should raise an exception if anonymous model caching is disabled" do
|
159
|
-
Sequel.cache_anonymous_models = false
|
161
|
+
Sequel::Model.cache_anonymous_models = false
|
160
162
|
proc do
|
161
163
|
class ::Album < Sequel::Model(@db[Sequel.identifier(:table)]); end
|
162
164
|
class ::Album < Sequel::Model(@db[Sequel.identifier(:table)]); end
|
163
165
|
end.must_raise TypeError
|
164
166
|
end
|
165
167
|
|
166
|
-
it "should use separate
|
168
|
+
it "should use separate anonymous cache for subclasses" do
|
167
169
|
c = Class.new(Sequel::Model)
|
168
170
|
c.cache_anonymous_models.must_equal true
|
169
171
|
class ::Album < c::Model(:table); end
|
@@ -268,6 +270,16 @@ describe Sequel::Model do
|
|
268
270
|
DB.reset
|
269
271
|
end
|
270
272
|
|
273
|
+
deprecated "should allow dup/clone" do
|
274
|
+
@model.dup.must_be :<, @model.superclass
|
275
|
+
@model.clone.must_be :<, @model.superclass
|
276
|
+
end
|
277
|
+
|
278
|
+
it "should not allow dup/clone" do
|
279
|
+
proc{@model.dup}.must_raise Sequel::Error
|
280
|
+
proc{@model.clone}.must_raise Sequel::Error
|
281
|
+
end if false # SEQUEL5
|
282
|
+
|
271
283
|
it "has table_name return name of table" do
|
272
284
|
@model.table_name.must_equal :items
|
273
285
|
end
|
@@ -1043,6 +1055,10 @@ describe "Model.db_schema" do
|
|
1043
1055
|
@c.dataset = @dataset
|
1044
1056
|
@c.db_schema.must_equal(:x=>{}, :y=>{})
|
1045
1057
|
@c.columns.must_equal [:x, :y]
|
1058
|
+
|
1059
|
+
@c.instance_eval{@db_schema = nil}
|
1060
|
+
@c.db_schema.must_equal(:x=>{}, :y=>{})
|
1061
|
+
@c.columns.must_equal [:x, :y]
|
1046
1062
|
end
|
1047
1063
|
|
1048
1064
|
it "should use the database's schema and set the columns and dataset columns" do
|