sequel 3.21.0 → 3.41.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.
- data/CHANGELOG +1131 -3
- data/MIT-LICENSE +1 -1
- data/README.rdoc +106 -65
- data/Rakefile +59 -27
- data/bin/sequel +50 -26
- data/doc/active_record.rdoc +68 -52
- data/doc/advanced_associations.rdoc +201 -75
- data/doc/association_basics.rdoc +327 -79
- data/doc/bin_sequel.rdoc +144 -0
- data/doc/cheat_sheet.rdoc +21 -21
- data/doc/core_extensions.rdoc +374 -0
- data/doc/dataset_basics.rdoc +10 -10
- data/doc/dataset_filtering.rdoc +54 -42
- data/doc/mass_assignment.rdoc +56 -0
- data/doc/migration.rdoc +89 -557
- data/doc/model_hooks.rdoc +80 -29
- data/doc/object_model.rdoc +576 -0
- data/doc/opening_databases.rdoc +121 -53
- data/doc/prepared_statements.rdoc +41 -15
- data/doc/querying.rdoc +137 -56
- data/doc/reflection.rdoc +36 -10
- data/doc/release_notes/3.22.0.txt +39 -0
- data/doc/release_notes/3.23.0.txt +172 -0
- data/doc/release_notes/3.24.0.txt +420 -0
- data/doc/release_notes/3.25.0.txt +88 -0
- data/doc/release_notes/3.26.0.txt +88 -0
- data/doc/release_notes/3.27.0.txt +82 -0
- data/doc/release_notes/3.28.0.txt +304 -0
- data/doc/release_notes/3.29.0.txt +459 -0
- data/doc/release_notes/3.30.0.txt +135 -0
- data/doc/release_notes/3.31.0.txt +146 -0
- data/doc/release_notes/3.32.0.txt +202 -0
- data/doc/release_notes/3.33.0.txt +157 -0
- data/doc/release_notes/3.34.0.txt +671 -0
- data/doc/release_notes/3.35.0.txt +144 -0
- data/doc/release_notes/3.36.0.txt +245 -0
- data/doc/release_notes/3.37.0.txt +338 -0
- data/doc/release_notes/3.38.0.txt +234 -0
- data/doc/release_notes/3.39.0.txt +237 -0
- data/doc/release_notes/3.40.0.txt +73 -0
- data/doc/release_notes/3.41.0.txt +155 -0
- data/doc/schema_modification.rdoc +585 -0
- data/doc/sharding.rdoc +99 -8
- data/doc/sql.rdoc +154 -112
- data/doc/testing.rdoc +169 -0
- data/doc/thread_safety.rdoc +17 -0
- data/doc/transactions.rdoc +137 -0
- data/doc/validations.rdoc +1 -1
- data/doc/virtual_rows.rdoc +78 -43
- data/lib/sequel/adapters/ado/access.rb +334 -0
- data/lib/sequel/adapters/ado/mssql.rb +18 -12
- data/lib/sequel/adapters/ado.rb +69 -21
- data/lib/sequel/adapters/amalgalite.rb +17 -14
- data/lib/sequel/adapters/cubrid.rb +143 -0
- data/lib/sequel/adapters/db2.rb +178 -85
- data/lib/sequel/adapters/dbi.rb +19 -21
- data/lib/sequel/adapters/do/mysql.rb +17 -11
- data/lib/sequel/adapters/do/postgres.rb +2 -61
- data/lib/sequel/adapters/do/sqlite.rb +0 -10
- data/lib/sequel/adapters/do.rb +20 -39
- data/lib/sequel/adapters/firebird.rb +33 -210
- data/lib/sequel/adapters/ibmdb.rb +452 -0
- data/lib/sequel/adapters/informix.rb +6 -29
- data/lib/sequel/adapters/jdbc/as400.rb +16 -34
- data/lib/sequel/adapters/jdbc/cubrid.rb +52 -0
- data/lib/sequel/adapters/jdbc/db2.rb +78 -0
- data/lib/sequel/adapters/jdbc/derby.rb +325 -0
- data/lib/sequel/adapters/jdbc/firebird.rb +24 -0
- data/lib/sequel/adapters/jdbc/h2.rb +68 -31
- data/lib/sequel/adapters/jdbc/hsqldb.rb +189 -0
- data/lib/sequel/adapters/jdbc/informix.rb +21 -0
- data/lib/sequel/adapters/jdbc/jtds.rb +40 -0
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -33
- data/lib/sequel/adapters/jdbc/mysql.rb +16 -28
- data/lib/sequel/adapters/jdbc/oracle.rb +88 -25
- data/lib/sequel/adapters/jdbc/postgresql.rb +77 -52
- data/lib/sequel/adapters/jdbc/progress.rb +21 -0
- data/lib/sequel/adapters/jdbc/sqlite.rb +20 -10
- data/lib/sequel/adapters/jdbc/sqlserver.rb +72 -0
- data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
- data/lib/sequel/adapters/jdbc.rb +308 -114
- data/lib/sequel/adapters/mock.rb +372 -0
- data/lib/sequel/adapters/mysql.rb +130 -230
- data/lib/sequel/adapters/mysql2.rb +64 -63
- data/lib/sequel/adapters/odbc/mssql.rb +17 -9
- data/lib/sequel/adapters/odbc.rb +29 -10
- data/lib/sequel/adapters/openbase.rb +7 -11
- data/lib/sequel/adapters/oracle.rb +364 -57
- data/lib/sequel/adapters/postgres.rb +379 -145
- data/lib/sequel/adapters/shared/access.rb +236 -11
- data/lib/sequel/adapters/shared/cubrid.rb +216 -0
- data/lib/sequel/adapters/shared/db2.rb +353 -0
- data/lib/sequel/adapters/shared/firebird.rb +231 -0
- data/lib/sequel/adapters/shared/informix.rb +53 -0
- data/lib/sequel/adapters/shared/mssql.rb +412 -116
- data/lib/sequel/adapters/shared/mysql.rb +396 -89
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +166 -0
- data/lib/sequel/adapters/shared/oracle.rb +262 -45
- data/lib/sequel/adapters/shared/postgres.rb +688 -279
- data/lib/sequel/adapters/shared/progress.rb +5 -8
- data/lib/sequel/adapters/shared/sqlite.rb +317 -96
- data/lib/sequel/adapters/sqlite.rb +109 -46
- data/lib/sequel/adapters/swift/mysql.rb +10 -12
- data/lib/sequel/adapters/swift/postgres.rb +13 -79
- data/lib/sequel/adapters/swift/sqlite.rb +9 -6
- data/lib/sequel/adapters/swift.rb +31 -27
- data/lib/sequel/adapters/tinytds.rb +177 -25
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +77 -0
- data/lib/sequel/adapters/utils/pg_types.rb +81 -0
- data/lib/sequel/adapters/utils/split_alter_table.rb +36 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +1 -11
- data/lib/sequel/ast_transformer.rb +194 -0
- data/lib/sequel/connection_pool/sharded_single.rb +23 -13
- data/lib/sequel/connection_pool/sharded_threaded.rb +64 -13
- data/lib/sequel/connection_pool/single.rb +11 -3
- data/lib/sequel/connection_pool/threaded.rb +69 -20
- data/lib/sequel/connection_pool.rb +20 -18
- data/lib/sequel/core.rb +143 -11
- data/lib/sequel/database/connecting.rb +66 -29
- data/lib/sequel/database/dataset.rb +4 -4
- data/lib/sequel/database/dataset_defaults.rb +63 -2
- data/lib/sequel/database/logging.rb +7 -2
- data/lib/sequel/database/misc.rb +192 -51
- data/lib/sequel/database/query.rb +299 -114
- data/lib/sequel/database/schema_generator.rb +103 -36
- data/lib/sequel/database/schema_methods.rb +310 -69
- data/lib/sequel/dataset/actions.rb +344 -90
- data/lib/sequel/dataset/features.rb +101 -8
- data/lib/sequel/dataset/graph.rb +42 -15
- data/lib/sequel/dataset/misc.rb +52 -25
- data/lib/sequel/dataset/mutation.rb +12 -7
- data/lib/sequel/dataset/prepared_statements.rb +68 -30
- data/lib/sequel/dataset/query.rb +322 -68
- data/lib/sequel/dataset/sql.rb +716 -293
- data/lib/sequel/dataset.rb +8 -0
- data/lib/sequel/exceptions.rb +4 -0
- data/lib/sequel/extensions/_pretty_table.rb +83 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +109 -0
- data/lib/sequel/extensions/blank.rb +4 -0
- data/lib/sequel/extensions/columns_introspection.rb +72 -0
- data/lib/sequel/extensions/connection_validator.rb +109 -0
- data/lib/sequel/extensions/constraint_validations.rb +451 -0
- data/lib/sequel/{core_sql.rb → extensions/core_extensions.rb} +30 -46
- data/lib/sequel/extensions/eval_inspect.rb +173 -0
- data/lib/sequel/extensions/inflector.rb +4 -0
- data/lib/sequel/extensions/looser_typecasting.rb +5 -4
- data/lib/sequel/extensions/migration.rb +100 -11
- data/lib/sequel/extensions/named_timezones.rb +9 -0
- data/lib/sequel/extensions/null_dataset.rb +94 -0
- data/lib/sequel/extensions/pagination.rb +4 -0
- data/lib/sequel/extensions/pg_array.rb +539 -0
- data/lib/sequel/extensions/pg_array_ops.rb +263 -0
- data/lib/sequel/extensions/pg_auto_parameterize.rb +175 -0
- data/lib/sequel/extensions/pg_hstore.rb +334 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +293 -0
- data/lib/sequel/extensions/pg_inet.rb +113 -0
- data/lib/sequel/extensions/pg_interval.rb +191 -0
- data/lib/sequel/extensions/pg_json.rb +212 -0
- data/lib/sequel/extensions/pg_range.rb +513 -0
- data/lib/sequel/extensions/pg_range_ops.rb +150 -0
- data/lib/sequel/extensions/pg_row.rb +576 -0
- data/lib/sequel/extensions/pg_row_ops.rb +182 -0
- data/lib/sequel/extensions/pg_statement_cache.rb +317 -0
- data/lib/sequel/extensions/pretty_table.rb +17 -72
- data/lib/sequel/extensions/query.rb +8 -4
- data/lib/sequel/extensions/query_literals.rb +79 -0
- data/lib/sequel/extensions/schema_caching.rb +76 -0
- data/lib/sequel/extensions/schema_dumper.rb +282 -76
- data/lib/sequel/extensions/select_remove.rb +39 -0
- data/lib/sequel/extensions/server_block.rb +140 -0
- data/lib/sequel/extensions/split_array_nil.rb +65 -0
- data/lib/sequel/extensions/sql_expr.rb +8 -110
- data/lib/sequel/extensions/string_date_time.rb +4 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +10 -4
- data/lib/sequel/extensions/to_dot.rb +99 -83
- data/lib/sequel/model/associations.rb +1263 -409
- data/lib/sequel/model/base.rb +624 -171
- data/lib/sequel/model/errors.rb +1 -1
- data/lib/sequel/model/exceptions.rb +24 -2
- data/lib/sequel/model/inflections.rb +1 -1
- data/lib/sequel/model.rb +30 -11
- data/lib/sequel/no_core_ext.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +13 -1
- data/lib/sequel/plugins/association_pks.rb +137 -16
- data/lib/sequel/plugins/caching.rb +25 -18
- data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
- data/lib/sequel/plugins/composition.rb +44 -12
- data/lib/sequel/plugins/constraint_validations.rb +198 -0
- data/lib/sequel/plugins/dataset_associations.rb +100 -0
- data/lib/sequel/plugins/defaults_setter.rb +72 -0
- data/lib/sequel/plugins/dirty.rb +214 -0
- data/lib/sequel/plugins/eager_each.rb +59 -0
- data/lib/sequel/plugins/force_encoding.rb +6 -6
- data/lib/sequel/plugins/hook_class_methods.rb +1 -1
- data/lib/sequel/plugins/identity_map.rb +134 -15
- data/lib/sequel/plugins/instance_filters.rb +10 -0
- data/lib/sequel/plugins/instance_hooks.rb +1 -1
- data/lib/sequel/plugins/json_serializer.rb +77 -6
- data/lib/sequel/plugins/list.rb +13 -2
- data/lib/sequel/plugins/many_through_many.rb +103 -51
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +71 -0
- data/lib/sequel/plugins/nested_attributes.rb +150 -66
- data/lib/sequel/plugins/optimistic_locking.rb +8 -0
- data/lib/sequel/plugins/pg_row.rb +121 -0
- data/lib/sequel/plugins/pg_typecast_on_load.rb +65 -0
- data/lib/sequel/plugins/prepared_statements.rb +168 -0
- data/lib/sequel/plugins/prepared_statements_associations.rb +87 -0
- data/lib/sequel/plugins/prepared_statements_safe.rb +82 -0
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +59 -0
- data/lib/sequel/plugins/rcte_tree.rb +31 -17
- data/lib/sequel/plugins/schema.rb +8 -3
- data/lib/sequel/plugins/serialization.rb +98 -49
- data/lib/sequel/plugins/serialization_modification_detection.rb +63 -0
- data/lib/sequel/plugins/sharding.rb +21 -54
- data/lib/sequel/plugins/single_table_inheritance.rb +57 -12
- data/lib/sequel/plugins/static_cache.rb +99 -0
- data/lib/sequel/plugins/subclasses.rb +29 -3
- data/lib/sequel/plugins/tactical_eager_loading.rb +7 -7
- data/lib/sequel/plugins/timestamps.rb +1 -1
- data/lib/sequel/plugins/touch.rb +18 -6
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +9 -12
- data/lib/sequel/plugins/update_primary_key.rb +2 -2
- data/lib/sequel/plugins/validation_class_methods.rb +2 -1
- data/lib/sequel/plugins/validation_helpers.rb +57 -4
- data/lib/sequel/plugins/xml_serializer.rb +15 -4
- data/lib/sequel/sql.rb +721 -141
- data/lib/sequel/timezones.rb +67 -40
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +146 -0
- data/spec/adapters/firebird_spec.rb +53 -39
- data/spec/adapters/mssql_spec.rb +261 -66
- data/spec/adapters/mysql_spec.rb +597 -352
- data/spec/adapters/oracle_spec.rb +92 -117
- data/spec/adapters/postgres_spec.rb +2103 -341
- data/spec/adapters/spec_helper.rb +16 -6
- data/spec/adapters/sqlite_spec.rb +237 -76
- data/spec/core/connection_pool_spec.rb +270 -141
- data/spec/core/database_spec.rb +980 -524
- data/spec/core/dataset_spec.rb +1658 -1243
- data/spec/core/expression_filters_spec.rb +741 -334
- data/spec/core/mock_adapter_spec.rb +453 -0
- data/spec/core/object_graph_spec.rb +88 -129
- data/spec/core/schema_generator_spec.rb +4 -4
- data/spec/core/schema_spec.rb +556 -53
- data/spec/core/spec_helper.rb +7 -48
- data/spec/core_extensions_spec.rb +626 -0
- data/spec/extensions/active_model_spec.rb +13 -0
- data/spec/extensions/arbitrary_servers_spec.rb +110 -0
- data/spec/extensions/association_autoreloading_spec.rb +18 -10
- data/spec/extensions/association_dependencies_spec.rb +15 -25
- data/spec/extensions/association_pks_spec.rb +227 -33
- data/spec/extensions/association_proxies_spec.rb +4 -4
- data/spec/extensions/boolean_readers_spec.rb +25 -25
- data/spec/extensions/caching_spec.rb +47 -51
- data/spec/extensions/class_table_inheritance_spec.rb +31 -83
- data/spec/extensions/columns_introspection_spec.rb +91 -0
- data/spec/extensions/composition_spec.rb +18 -13
- data/spec/extensions/connection_validator_spec.rb +118 -0
- data/spec/extensions/constraint_validations_plugin_spec.rb +196 -0
- data/spec/extensions/constraint_validations_spec.rb +316 -0
- data/spec/extensions/dataset_associations_spec.rb +199 -0
- data/spec/extensions/defaults_setter_spec.rb +88 -0
- data/spec/extensions/dirty_spec.rb +155 -0
- data/spec/extensions/eager_each_spec.rb +34 -0
- data/spec/extensions/eval_inspect_spec.rb +67 -0
- data/spec/extensions/force_encoding_spec.rb +4 -2
- data/spec/extensions/hook_class_methods_spec.rb +97 -128
- data/spec/extensions/identity_map_spec.rb +142 -24
- data/spec/extensions/inflector_spec.rb +0 -4
- data/spec/extensions/instance_filters_spec.rb +11 -21
- data/spec/extensions/instance_hooks_spec.rb +72 -0
- data/spec/extensions/json_serializer_spec.rb +49 -12
- data/spec/extensions/lazy_attributes_spec.rb +16 -20
- data/spec/extensions/list_spec.rb +49 -40
- data/spec/extensions/looser_typecasting_spec.rb +7 -7
- data/spec/extensions/many_through_many_spec.rb +368 -254
- data/spec/extensions/many_to_one_pk_lookup_spec.rb +140 -0
- data/spec/extensions/migration_spec.rb +140 -35
- data/spec/extensions/named_timezones_spec.rb +29 -11
- data/spec/extensions/nested_attributes_spec.rb +268 -89
- data/spec/extensions/null_dataset_spec.rb +85 -0
- data/spec/extensions/optimistic_locking_spec.rb +24 -21
- data/spec/extensions/pg_array_ops_spec.rb +112 -0
- data/spec/extensions/pg_array_spec.rb +324 -0
- data/spec/extensions/pg_auto_parameterize_spec.rb +65 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +140 -0
- data/spec/extensions/pg_hstore_spec.rb +200 -0
- data/spec/extensions/pg_inet_spec.rb +47 -0
- data/spec/extensions/pg_interval_spec.rb +72 -0
- data/spec/extensions/pg_json_spec.rb +99 -0
- data/spec/extensions/pg_range_ops_spec.rb +56 -0
- data/spec/extensions/pg_range_spec.rb +395 -0
- data/spec/extensions/pg_row_ops_spec.rb +58 -0
- data/spec/extensions/pg_row_plugin_spec.rb +49 -0
- data/spec/extensions/pg_row_spec.rb +340 -0
- data/spec/extensions/pg_statement_cache_spec.rb +208 -0
- data/spec/extensions/pg_typecast_on_load_spec.rb +58 -0
- data/spec/extensions/prepared_statements_associations_spec.rb +111 -0
- data/spec/extensions/prepared_statements_safe_spec.rb +61 -0
- data/spec/extensions/prepared_statements_spec.rb +87 -0
- data/spec/extensions/prepared_statements_with_pk_spec.rb +31 -0
- data/spec/extensions/pretty_table_spec.rb +7 -6
- data/spec/extensions/query_literals_spec.rb +167 -0
- data/spec/extensions/query_spec.rb +9 -3
- data/spec/extensions/rcte_tree_spec.rb +50 -43
- data/spec/extensions/schema_caching_spec.rb +41 -0
- data/spec/extensions/schema_dumper_spec.rb +434 -49
- data/spec/extensions/schema_spec.rb +30 -49
- data/spec/extensions/select_remove_spec.rb +38 -0
- data/spec/extensions/serialization_modification_detection_spec.rb +72 -0
- data/spec/extensions/serialization_spec.rb +86 -48
- data/spec/extensions/server_block_spec.rb +90 -0
- data/spec/extensions/sharding_spec.rb +69 -143
- data/spec/extensions/single_table_inheritance_spec.rb +65 -29
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +34 -67
- data/spec/extensions/split_array_nil_spec.rb +24 -0
- data/spec/extensions/sql_expr_spec.rb +29 -60
- data/spec/extensions/static_cache_spec.rb +145 -0
- data/spec/extensions/subclasses_spec.rb +14 -0
- data/spec/extensions/tactical_eager_loading_spec.rb +17 -19
- data/spec/extensions/thread_local_timezones_spec.rb +22 -2
- data/spec/extensions/timestamps_spec.rb +6 -6
- data/spec/extensions/to_dot_spec.rb +8 -11
- data/spec/extensions/touch_spec.rb +53 -14
- data/spec/extensions/tree_spec.rb +11 -26
- data/spec/extensions/typecast_on_load_spec.rb +9 -6
- data/spec/extensions/update_primary_key_spec.rb +30 -24
- data/spec/extensions/validation_class_methods_spec.rb +77 -68
- data/spec/extensions/validation_helpers_spec.rb +48 -37
- data/spec/extensions/xml_serializer_spec.rb +29 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +4 -0
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +4 -0
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +3 -0
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +3 -0
- data/spec/integration/associations_test.rb +659 -21
- data/spec/integration/database_test.rb +25 -5
- data/spec/integration/dataset_test.rb +729 -141
- data/spec/integration/eager_loader_test.rb +38 -54
- data/spec/integration/migrator_test.rb +2 -3
- data/spec/integration/model_test.rb +81 -2
- data/spec/integration/plugin_test.rb +871 -160
- data/spec/integration/prepared_statement_test.rb +272 -128
- data/spec/integration/schema_test.rb +377 -57
- data/spec/integration/spec_helper.rb +49 -32
- data/spec/integration/timezone_test.rb +38 -12
- data/spec/integration/transaction_test.rb +183 -8
- data/spec/integration/type_test.rb +40 -8
- data/spec/model/association_reflection_spec.rb +207 -8
- data/spec/model/associations_spec.rb +1206 -693
- data/spec/model/base_spec.rb +334 -100
- data/spec/model/dataset_methods_spec.rb +45 -27
- data/spec/model/eager_loading_spec.rb +828 -692
- data/spec/model/hooks_spec.rb +355 -67
- data/spec/model/model_spec.rb +251 -179
- data/spec/model/plugins_spec.rb +24 -13
- data/spec/model/record_spec.rb +506 -232
- data/spec/model/spec_helper.rb +16 -77
- data/spec/model/validations_spec.rb +38 -2
- data/spec/rcov.opts +2 -0
- metadata +223 -81
- data/spec/core/core_sql_spec.rb +0 -451
|
@@ -7,26 +7,11 @@ describe Sequel::Model, "tree plugin" do
|
|
|
7
7
|
c.class_eval do
|
|
8
8
|
def self.name; 'Node'; end
|
|
9
9
|
columns :id, :name, :parent_id, :i, :pi
|
|
10
|
+
plugin :tree, opts
|
|
10
11
|
end
|
|
11
|
-
ds = c.dataset
|
|
12
|
-
class << ds
|
|
13
|
-
attr_accessor :row_sets
|
|
14
|
-
def fetch_rows(sql)
|
|
15
|
-
@db << sql
|
|
16
|
-
if rs = row_sets.shift
|
|
17
|
-
rs.each{|row| yield row}
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
c.plugin :tree, opts
|
|
22
12
|
c
|
|
23
13
|
end
|
|
24
14
|
|
|
25
|
-
def y(c, *hs)
|
|
26
|
-
ds = c.dataset
|
|
27
|
-
ds.row_sets = hs
|
|
28
|
-
end
|
|
29
|
-
|
|
30
15
|
before do
|
|
31
16
|
@c = klass
|
|
32
17
|
@ds = @c.dataset
|
|
@@ -71,7 +56,7 @@ describe Sequel::Model, "tree plugin" do
|
|
|
71
56
|
end
|
|
72
57
|
|
|
73
58
|
it "should have roots return an array of the tree's roots" do
|
|
74
|
-
|
|
59
|
+
@ds._fetch = [{:id=>1, :parent_id=>nil, :name=>'r'}]
|
|
75
60
|
@c.roots.should == [@c.load(:id=>1, :parent_id=>nil, :name=>'r')]
|
|
76
61
|
@db.sqls.should == ["SELECT * FROM nodes WHERE (parent_id IS NULL)"]
|
|
77
62
|
end
|
|
@@ -81,14 +66,14 @@ describe Sequel::Model, "tree plugin" do
|
|
|
81
66
|
end
|
|
82
67
|
|
|
83
68
|
it "should have ancestors return the ancestors of the current node" do
|
|
84
|
-
|
|
69
|
+
@ds._fetch = [[{:id=>1, :parent_id=>5, :name=>'r'}], [{:id=>5, :parent_id=>nil, :name=>'r2'}]]
|
|
85
70
|
@o.ancestors.should == [@c.load(:id=>1, :parent_id=>5, :name=>'r'), @c.load(:id=>5, :parent_id=>nil, :name=>'r2')]
|
|
86
71
|
@db.sqls.should == ["SELECT * FROM nodes WHERE (nodes.id = 1) LIMIT 1",
|
|
87
72
|
"SELECT * FROM nodes WHERE (nodes.id = 5) LIMIT 1"]
|
|
88
73
|
end
|
|
89
74
|
|
|
90
75
|
it "should have descendants return the descendants of the current node" do
|
|
91
|
-
|
|
76
|
+
@ds._fetch = [[{:id=>3, :parent_id=>2, :name=>'r'}, {:id=>4, :parent_id=>2, :name=>'r2'}], [{:id=>5, :parent_id=>4, :name=>'r3'}], []]
|
|
92
77
|
@o.descendants.should == [@c.load(:id=>3, :parent_id=>2, :name=>'r'), @c.load(:id=>4, :parent_id=>2, :name=>'r2'), @c.load(:id=>5, :parent_id=>4, :name=>'r3')]
|
|
93
78
|
@db.sqls.should == ["SELECT * FROM nodes WHERE (nodes.parent_id = 2)",
|
|
94
79
|
"SELECT * FROM nodes WHERE (nodes.parent_id = 3)",
|
|
@@ -97,7 +82,7 @@ describe Sequel::Model, "tree plugin" do
|
|
|
97
82
|
end
|
|
98
83
|
|
|
99
84
|
it "should have root return the root of the current node" do
|
|
100
|
-
|
|
85
|
+
@ds._fetch = [[{:id=>1, :parent_id=>5, :name=>'r'}], [{:id=>5, :parent_id=>nil, :name=>'r2'}]]
|
|
101
86
|
@o.root.should == @c.load(:id=>5, :parent_id=>nil, :name=>'r2')
|
|
102
87
|
@db.sqls.should == ["SELECT * FROM nodes WHERE (nodes.id = 1) LIMIT 1",
|
|
103
88
|
"SELECT * FROM nodes WHERE (nodes.id = 5) LIMIT 1"]
|
|
@@ -113,14 +98,14 @@ describe Sequel::Model, "tree plugin" do
|
|
|
113
98
|
end
|
|
114
99
|
|
|
115
100
|
it "should have self_and_siblings return the children of the current node's parent" do
|
|
116
|
-
|
|
101
|
+
@ds._fetch = [[{:id=>1, :parent_id=>3, :name=>'r'}], [{:id=>7, :parent_id=>1, :name=>'r2'}, @o.values.dup]]
|
|
117
102
|
@o.self_and_siblings.should == [@c.load(:id=>7, :parent_id=>1, :name=>'r2'), @o]
|
|
118
103
|
@db.sqls.should == ["SELECT * FROM nodes WHERE (nodes.id = 1) LIMIT 1",
|
|
119
104
|
"SELECT * FROM nodes WHERE (nodes.parent_id = 1)"]
|
|
120
105
|
end
|
|
121
106
|
|
|
122
107
|
it "should have siblings return the children of the current node's parent, except for the current node" do
|
|
123
|
-
|
|
108
|
+
@ds._fetch = [[{:id=>1, :parent_id=>3, :name=>'r'}], [{:id=>7, :parent_id=>1, :name=>'r2'}, @o.values.dup]]
|
|
124
109
|
@o.siblings.should == [@c.load(:id=>7, :parent_id=>1, :name=>'r2')]
|
|
125
110
|
@db.sqls.should == ["SELECT * FROM nodes WHERE (nodes.id = 1) LIMIT 1",
|
|
126
111
|
"SELECT * FROM nodes WHERE (nodes.parent_id = 1)"]
|
|
@@ -132,23 +117,23 @@ describe Sequel::Model, "tree plugin" do
|
|
|
132
117
|
end
|
|
133
118
|
|
|
134
119
|
it "should have root class method return the root" do
|
|
135
|
-
|
|
120
|
+
@c.dataset._fetch = [{:id=>1, :parent_id=>nil, :name=>'r'}]
|
|
136
121
|
@c.root.should == @c.load(:id=>1, :parent_id=>nil, :name=>'r')
|
|
137
122
|
end
|
|
138
123
|
|
|
139
124
|
it "prevents creating a second root" do
|
|
140
|
-
|
|
125
|
+
@c.dataset._fetch = [{:id=>1, :parent_id=>nil, :name=>'r'}]
|
|
141
126
|
lambda { @c.create }.should raise_error(Sequel::Plugins::Tree::TreeMultipleRootError)
|
|
142
127
|
end
|
|
143
128
|
|
|
144
129
|
it "errors when promoting an existing record to a second root" do
|
|
145
|
-
|
|
130
|
+
@c.dataset._fetch = [{:id=>1, :parent_id=>nil, :name=>'r'}]
|
|
146
131
|
n = @c.load(:id => 2, :parent_id => 1)
|
|
147
132
|
lambda { n.update(:parent_id => nil) }.should raise_error(Sequel::Plugins::Tree::TreeMultipleRootError)
|
|
148
133
|
end
|
|
149
134
|
|
|
150
135
|
it "allows updating existing root" do
|
|
151
|
-
|
|
136
|
+
@c.dataset._fetch = [{:id=>1, :parent_id=>nil, :name=>'r'}]
|
|
152
137
|
lambda { @c.root.update(:name => 'fdsa') }.should_not raise_error
|
|
153
138
|
end
|
|
154
139
|
end
|
|
@@ -2,22 +2,17 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
|
2
2
|
|
|
3
3
|
describe Sequel::Model, "TypecastOnLoad plugin" do
|
|
4
4
|
before do
|
|
5
|
-
@db = Sequel
|
|
5
|
+
@db = Sequel.mock(:fetch=>{:id=>1, :b=>"1", :y=>"0"}, :columns=>[:id, :b, :y], :numrows=>1)
|
|
6
6
|
def @db.schema(*args)
|
|
7
7
|
[[:id, {}], [:y, {:type=>:boolean, :db_type=>'tinyint(1)'}], [:b, {:type=>:integer, :db_type=>'integer'}]]
|
|
8
8
|
end
|
|
9
9
|
@c = Class.new(Sequel::Model(@db[:items])) do
|
|
10
|
-
include(Module.new{def _refresh(ds); values[:b] = b.to_s; self; end})
|
|
11
10
|
attr_accessor :bset
|
|
12
11
|
def b=(x)
|
|
13
12
|
self.bset = true
|
|
14
13
|
super
|
|
15
14
|
end
|
|
16
15
|
end
|
|
17
|
-
@c.instance_eval do
|
|
18
|
-
@columns = [:id, :b, :y]
|
|
19
|
-
def columns; @columns; end
|
|
20
|
-
end
|
|
21
16
|
end
|
|
22
17
|
|
|
23
18
|
specify "should call setter method with value when loading the object, for all given columns" do
|
|
@@ -35,6 +30,14 @@ describe Sequel::Model, "TypecastOnLoad plugin" do
|
|
|
35
30
|
o.bset.should == true
|
|
36
31
|
end
|
|
37
32
|
|
|
33
|
+
specify "should call setter method with value when automatically reloading the object on creation via insert_select" do
|
|
34
|
+
@c.plugin :typecast_on_load, :b
|
|
35
|
+
@c.dataset.meta_def(:insert_select){|h| insert(h); first}
|
|
36
|
+
o = @c.new({:id=>1, :b=>"1", :y=>"0"}, true)
|
|
37
|
+
o.save.values.should == {:id=>1, :b=>1, :y=>"0"}
|
|
38
|
+
o.bset.should == true
|
|
39
|
+
end
|
|
40
|
+
|
|
38
41
|
specify "should allowing setting columns separately via add_typecast_on_load_columns" do
|
|
39
42
|
@c.plugin :typecast_on_load
|
|
40
43
|
@c.load(:id=>1, :b=>"1", :y=>"0").values.should == {:id=>1, :b=>"1", :y=>"0"}
|
|
@@ -9,57 +9,63 @@ describe "Sequel::Plugins::UpdatePrimaryKey" do
|
|
|
9
9
|
@c.unrestrict_primary_key
|
|
10
10
|
@o = @c.new
|
|
11
11
|
@ds = @c.dataset
|
|
12
|
-
@ds.extend(Module.new do
|
|
13
|
-
attr_accessor :a
|
|
14
|
-
def fetch_rows(sql)
|
|
15
|
-
yield(a.dup)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def update(h)
|
|
19
|
-
if literal(opts[:where]) =~ /a = (\d)/ and $1.to_i == a[:a]
|
|
20
|
-
a.update(h)
|
|
21
|
-
end
|
|
22
|
-
super
|
|
23
|
-
end
|
|
24
|
-
end)
|
|
25
|
-
@ds.a = {:a=>1, :b=>3}
|
|
26
|
-
@ds2 = @ds.naked
|
|
27
12
|
MODEL_DB.reset
|
|
28
13
|
end
|
|
29
14
|
|
|
30
15
|
specify "should handle regular updates" do
|
|
16
|
+
@ds._fetch = [[{:a=>1, :b=>3}], [{:a=>1, :b=>4}], [{:a=>1, :b=>4}], [{:a=>1, :b=>5}], [{:a=>1, :b=>5}], [{:a=>1, :b=>6}], [{:a=>1, :b=>6}]]
|
|
31
17
|
@c.first.update(:b=>4)
|
|
32
|
-
@
|
|
18
|
+
@c.all.should == [@c.load(:a=>1, :b=>4)]
|
|
19
|
+
MODEL_DB.sqls.should == ["SELECT * FROM a LIMIT 1", "UPDATE a SET b = 4 WHERE (a = 1)", "SELECT * FROM a"]
|
|
33
20
|
@c.first.set(:b=>5).save
|
|
34
|
-
@
|
|
21
|
+
@c.all.should == [@c.load(:a=>1, :b=>5)]
|
|
22
|
+
MODEL_DB.sqls.should == ["SELECT * FROM a LIMIT 1", "UPDATE a SET b = 5 WHERE (a = 1)", "SELECT * FROM a"]
|
|
35
23
|
@c.first.set(:b=>6).save(:b)
|
|
36
|
-
@
|
|
24
|
+
@c.all.should == [@c.load(:a=>1, :b=>6)]
|
|
25
|
+
MODEL_DB.sqls.should == ["SELECT * FROM a LIMIT 1", "UPDATE a SET b = 6 WHERE (a = 1)", "SELECT * FROM a"]
|
|
37
26
|
end
|
|
38
27
|
|
|
39
28
|
specify "should handle updating the primary key field with another field" do
|
|
29
|
+
@ds._fetch = [[{:a=>1, :b=>3}], [{:a=>2, :b=>4}]]
|
|
40
30
|
@c.first.update(:a=>2, :b=>4)
|
|
41
|
-
@
|
|
31
|
+
@c.all.should == [@c.load(:a=>2, :b=>4)]
|
|
32
|
+
sqls = MODEL_DB.sqls
|
|
33
|
+
["UPDATE a SET a = 2, b = 4 WHERE (a = 1)", "UPDATE a SET b = 4, a = 2 WHERE (a = 1)"].should include(sqls.slice!(1))
|
|
34
|
+
sqls.should == ["SELECT * FROM a LIMIT 1", "SELECT * FROM a"]
|
|
42
35
|
end
|
|
43
36
|
|
|
44
37
|
specify "should handle updating just the primary key field when saving changes" do
|
|
38
|
+
@ds._fetch = [[{:a=>1, :b=>3}], [{:a=>2, :b=>3}], [{:a=>2, :b=>3}], [{:a=>3, :b=>3}]]
|
|
45
39
|
@c.first.update(:a=>2)
|
|
46
|
-
@
|
|
40
|
+
@c.all.should == [@c.load(:a=>2, :b=>3)]
|
|
41
|
+
MODEL_DB.sqls.should == ["SELECT * FROM a LIMIT 1", "UPDATE a SET a = 2 WHERE (a = 1)", "SELECT * FROM a"]
|
|
47
42
|
@c.first.set(:a=>3).save(:a)
|
|
48
|
-
@
|
|
43
|
+
@c.all.should == [@c.load(:a=>3, :b=>3)]
|
|
44
|
+
MODEL_DB.sqls.should == ["SELECT * FROM a LIMIT 1", "UPDATE a SET a = 3 WHERE (a = 2)", "SELECT * FROM a"]
|
|
49
45
|
end
|
|
50
46
|
|
|
51
47
|
specify "should handle saving after modifying the primary key field with another field" do
|
|
48
|
+
@ds._fetch = [[{:a=>1, :b=>3}], [{:a=>2, :b=>4}]]
|
|
52
49
|
@c.first.set(:a=>2, :b=>4).save
|
|
53
|
-
@
|
|
50
|
+
@c.all.should == [@c.load(:a=>2, :b=>4)]
|
|
51
|
+
sqls = MODEL_DB.sqls
|
|
52
|
+
["UPDATE a SET a = 2, b = 4 WHERE (a = 1)", "UPDATE a SET b = 4, a = 2 WHERE (a = 1)"].should include(sqls.slice!(1))
|
|
53
|
+
sqls.should == ["SELECT * FROM a LIMIT 1", "SELECT * FROM a"]
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
specify "should handle saving after modifying just the primary key field" do
|
|
57
|
+
@ds._fetch = [[{:a=>1, :b=>3}], [{:a=>2, :b=>3}]]
|
|
57
58
|
@c.first.set(:a=>2).save
|
|
58
|
-
@
|
|
59
|
+
@c.all.should == [@c.load(:a=>2, :b=>3)]
|
|
60
|
+
sqls = MODEL_DB.sqls
|
|
61
|
+
["UPDATE a SET a = 2, b = 3 WHERE (a = 1)", "UPDATE a SET b = 3, a = 2 WHERE (a = 1)"].should include(sqls.slice!(1))
|
|
62
|
+
sqls.should == ["SELECT * FROM a LIMIT 1", "SELECT * FROM a"]
|
|
59
63
|
end
|
|
60
64
|
|
|
61
65
|
specify "should handle saving after updating the primary key" do
|
|
66
|
+
@ds._fetch = [[{:a=>1, :b=>3}], [{:a=>2, :b=>5}]]
|
|
62
67
|
@c.first.update(:a=>2).update(:b=>4).set(:b=>5).save
|
|
63
|
-
@
|
|
68
|
+
@c.all.should == [@c.load(:a=>2, :b=>5)]
|
|
69
|
+
MODEL_DB.sqls.should == ["SELECT * FROM a LIMIT 1", "UPDATE a SET a = 2 WHERE (a = 1)", "UPDATE a SET b = 4 WHERE (a = 2)", "UPDATE a SET b = 5 WHERE (a = 2)", "SELECT * FROM a"]
|
|
64
70
|
end
|
|
65
71
|
end
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
2
|
|
|
3
|
+
model_class = proc do |klass, &block|
|
|
4
|
+
c = Class.new(klass)
|
|
5
|
+
c.plugin :validation_class_methods
|
|
6
|
+
c.class_eval(&block) if block
|
|
7
|
+
c
|
|
8
|
+
end
|
|
9
|
+
|
|
3
10
|
describe Sequel::Model do
|
|
4
11
|
before do
|
|
5
|
-
@c =
|
|
12
|
+
@c = model_class.call Sequel::Model do
|
|
6
13
|
def self.validates_coolness_of(attr)
|
|
7
14
|
validates_each(attr) {|o, a, v| o.errors[a] << 'is not cool' if v != :cool}
|
|
8
15
|
end
|
|
@@ -135,8 +142,7 @@ end
|
|
|
135
142
|
|
|
136
143
|
describe Sequel::Model do
|
|
137
144
|
before do
|
|
138
|
-
@c =
|
|
139
|
-
@c.class_eval do
|
|
145
|
+
@c = model_class.call Sequel::Model do
|
|
140
146
|
columns :score
|
|
141
147
|
validates_each :score do |o, a, v|
|
|
142
148
|
o.errors[a] << 'too low' if v < 87
|
|
@@ -165,11 +171,11 @@ describe Sequel::Model do
|
|
|
165
171
|
end
|
|
166
172
|
end
|
|
167
173
|
|
|
168
|
-
describe Sequel::Plugins::ValidationClassMethods::ClassMethods::Generator do
|
|
174
|
+
describe "Sequel::Plugins::ValidationClassMethods::ClassMethods::Generator" do
|
|
169
175
|
before do
|
|
170
176
|
$testit = nil
|
|
171
177
|
|
|
172
|
-
@c =
|
|
178
|
+
@c = model_class.call Sequel::Model do
|
|
173
179
|
def self.validates_blah
|
|
174
180
|
$testit = 1324
|
|
175
181
|
end
|
|
@@ -186,7 +192,7 @@ end
|
|
|
186
192
|
|
|
187
193
|
describe Sequel::Model do
|
|
188
194
|
before do
|
|
189
|
-
@c =
|
|
195
|
+
@c = model_class.call Sequel::Model do
|
|
190
196
|
columns :value
|
|
191
197
|
|
|
192
198
|
def self.filter(*args)
|
|
@@ -527,13 +533,8 @@ describe Sequel::Model do
|
|
|
527
533
|
end
|
|
528
534
|
|
|
529
535
|
specify "should raise an error if inclusion_of doesn't receive a valid :in option" do
|
|
530
|
-
lambda
|
|
531
|
-
|
|
532
|
-
}.should raise_error(ArgumentError)
|
|
533
|
-
|
|
534
|
-
lambda {
|
|
535
|
-
@c.validates_inclusion_of :value, :in => 1
|
|
536
|
-
}.should raise_error(ArgumentError)
|
|
536
|
+
lambda{@c.validates_inclusion_of :value}.should raise_error(ArgumentError)
|
|
537
|
+
lambda{@c.validates_inclusion_of :value, :in => 1}.should raise_error(ArgumentError)
|
|
537
538
|
end
|
|
538
539
|
|
|
539
540
|
specify "should raise an error if inclusion_of handles :allow_nil too" do
|
|
@@ -570,7 +571,6 @@ describe Sequel::Model do
|
|
|
570
571
|
|
|
571
572
|
specify "should validate uniqueness_of with if => false" do
|
|
572
573
|
@c.validates_uniqueness_of :value, :if => :skip
|
|
573
|
-
|
|
574
574
|
@m.value = 'a'
|
|
575
575
|
@m.should be_valid
|
|
576
576
|
end
|
|
@@ -578,15 +578,14 @@ describe Sequel::Model do
|
|
|
578
578
|
specify "should validate uniqueness_of with allow_missing => true" do
|
|
579
579
|
@c.validates_uniqueness_of :value, :allow_missing => true
|
|
580
580
|
@m.should be_valid
|
|
581
|
-
@m.value =
|
|
581
|
+
@m.value = 1
|
|
582
582
|
@m.should_not be_valid
|
|
583
583
|
end
|
|
584
584
|
end
|
|
585
585
|
|
|
586
586
|
describe "Superclass validations" do
|
|
587
587
|
before do
|
|
588
|
-
@c1 =
|
|
589
|
-
@c1.class_eval do
|
|
588
|
+
@c1 = model_class.call Sequel::Model do
|
|
590
589
|
columns :value
|
|
591
590
|
validates_length_of :value, :minimum => 5
|
|
592
591
|
end
|
|
@@ -602,16 +601,11 @@ describe "Superclass validations" do
|
|
|
602
601
|
o = @c2.new
|
|
603
602
|
o.value = 'ab'
|
|
604
603
|
o.valid?.should == false
|
|
605
|
-
o.errors.full_messages.should == [
|
|
606
|
-
'value is too short'
|
|
607
|
-
]
|
|
604
|
+
o.errors.full_messages.should == ['value is too short']
|
|
608
605
|
|
|
609
606
|
o.value = '12'
|
|
610
607
|
o.valid?.should == false
|
|
611
|
-
o.errors.full_messages.should == [
|
|
612
|
-
'value is too short',
|
|
613
|
-
'value is invalid'
|
|
614
|
-
]
|
|
608
|
+
o.errors.full_messages.should == ['value is too short', 'value is invalid']
|
|
615
609
|
|
|
616
610
|
o.value = 'abcde'
|
|
617
611
|
o.valid?.should be_true
|
|
@@ -626,9 +620,7 @@ describe "Superclass validations" do
|
|
|
626
620
|
|
|
627
621
|
o.value = '12'
|
|
628
622
|
o.valid?.should == false
|
|
629
|
-
o.errors.full_messages.should == [
|
|
630
|
-
'value is invalid'
|
|
631
|
-
]
|
|
623
|
+
o.errors.full_messages.should == ['value is invalid']
|
|
632
624
|
|
|
633
625
|
o.value = 'abcde'
|
|
634
626
|
o.valid?.should be_true
|
|
@@ -637,8 +629,7 @@ end
|
|
|
637
629
|
|
|
638
630
|
describe ".validates with block" do
|
|
639
631
|
specify "should support calling .each" do
|
|
640
|
-
@c =
|
|
641
|
-
@c.class_eval do
|
|
632
|
+
@c = model_class.call Sequel::Model do
|
|
642
633
|
columns :vvv
|
|
643
634
|
validates do
|
|
644
635
|
each :vvv do |o, a, v|
|
|
@@ -659,24 +650,36 @@ describe Sequel::Model, "Validations" do
|
|
|
659
650
|
|
|
660
651
|
before(:all) do
|
|
661
652
|
class ::Person < Sequel::Model
|
|
653
|
+
plugin :validation_class_methods
|
|
662
654
|
columns :id,:name,:first_name,:last_name,:middle_name,:initials,:age, :terms
|
|
663
655
|
end
|
|
664
656
|
|
|
665
657
|
class ::Smurf < Person
|
|
666
658
|
end
|
|
659
|
+
|
|
660
|
+
class ::Can < Sequel::Model
|
|
661
|
+
plugin :validation_class_methods
|
|
662
|
+
columns :id, :name
|
|
663
|
+
end
|
|
667
664
|
|
|
668
665
|
class ::Cow < Sequel::Model
|
|
666
|
+
plugin :validation_class_methods
|
|
669
667
|
columns :id, :name, :got_milk
|
|
670
668
|
end
|
|
671
669
|
|
|
672
670
|
class ::User < Sequel::Model
|
|
671
|
+
plugin :validation_class_methods
|
|
673
672
|
columns :id, :username, :password
|
|
674
673
|
end
|
|
675
674
|
|
|
676
675
|
class ::Address < Sequel::Model
|
|
676
|
+
plugin :validation_class_methods
|
|
677
677
|
columns :id, :zip_code
|
|
678
678
|
end
|
|
679
679
|
end
|
|
680
|
+
after(:all) do
|
|
681
|
+
[:Person, :Smurf, :Cow, :User, :Address].each{|c| Object.send(:remove_const, c)}
|
|
682
|
+
end
|
|
680
683
|
|
|
681
684
|
it "should validate the acceptance of a column" do
|
|
682
685
|
class ::Cow < Sequel::Model
|
|
@@ -754,8 +757,7 @@ describe Sequel::Model, "Validations" do
|
|
|
754
757
|
end
|
|
755
758
|
|
|
756
759
|
it "should validate that a column doesn't have a string value" do
|
|
757
|
-
p =
|
|
758
|
-
p.class_eval do
|
|
760
|
+
p = model_class.call Sequel::Model do
|
|
759
761
|
columns :age, :price, :confirmed
|
|
760
762
|
self.raise_on_typecast_failure = false
|
|
761
763
|
validates_not_string :age
|
|
@@ -824,22 +826,18 @@ describe Sequel::Model, "Validations" do
|
|
|
824
826
|
uniqueness_of :username
|
|
825
827
|
end
|
|
826
828
|
end
|
|
827
|
-
User.dataset.
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
yield({:v => 1})
|
|
838
|
-
when /username = '1record'/
|
|
839
|
-
yield({:id => 3, :username => "1record", :password => "test"})
|
|
840
|
-
end
|
|
829
|
+
User.dataset._fetch = proc do |sql|
|
|
830
|
+
case sql
|
|
831
|
+
when /COUNT.*username = '0records'/
|
|
832
|
+
{:v => 0}
|
|
833
|
+
when /COUNT.*username = '2records'/
|
|
834
|
+
{:v => 2}
|
|
835
|
+
when /COUNT.*username = '1record'/
|
|
836
|
+
{:v => 1}
|
|
837
|
+
when /username = '1record'/
|
|
838
|
+
{:id => 3, :username => "1record", :password => "test"}
|
|
841
839
|
end
|
|
842
|
-
|
|
840
|
+
end
|
|
843
841
|
|
|
844
842
|
@user = User.new(:username => "2records", :password => "anothertest")
|
|
845
843
|
@user.should_not be_valid
|
|
@@ -860,6 +858,12 @@ describe Sequel::Model, "Validations" do
|
|
|
860
858
|
@user = User.new(:username => "0records", :password => "anothertest")
|
|
861
859
|
@user.should be_valid
|
|
862
860
|
@user.errors.full_messages.should == []
|
|
861
|
+
|
|
862
|
+
User.db.sqls
|
|
863
|
+
@user = User.new(:password => "anothertest")
|
|
864
|
+
@user.should be_valid
|
|
865
|
+
@user.errors.full_messages.should == []
|
|
866
|
+
User.db.sqls.should == []
|
|
863
867
|
end
|
|
864
868
|
|
|
865
869
|
it "should validate the uniqueness of multiple columns" do
|
|
@@ -869,26 +873,22 @@ describe Sequel::Model, "Validations" do
|
|
|
869
873
|
uniqueness_of [:username, :password]
|
|
870
874
|
end
|
|
871
875
|
end
|
|
872
|
-
User.dataset.
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
yield({:id => 3, :username => "1record", :password => "anothertest"})
|
|
886
|
-
else
|
|
887
|
-
yield({:id => 4, :username => "1record", :password => "test"})
|
|
888
|
-
end
|
|
876
|
+
User.dataset._fetch = proc do |sql|
|
|
877
|
+
case sql
|
|
878
|
+
when /COUNT.*username = '0records'/
|
|
879
|
+
{:v => 0}
|
|
880
|
+
when /COUNT.*username = '2records'/
|
|
881
|
+
{:v => 2}
|
|
882
|
+
when /COUNT.*username = '1record'/
|
|
883
|
+
{:v => 1}
|
|
884
|
+
when /username = '1record'/
|
|
885
|
+
if sql =~ /password = 'anothertest'/
|
|
886
|
+
{:id => 3, :username => "1record", :password => "anothertest"}
|
|
887
|
+
else
|
|
888
|
+
{:id => 4, :username => "1record", :password => "test"}
|
|
889
889
|
end
|
|
890
890
|
end
|
|
891
|
-
|
|
891
|
+
end
|
|
892
892
|
|
|
893
893
|
@user = User.new(:username => "2records", :password => "anothertest")
|
|
894
894
|
@user.should_not be_valid
|
|
@@ -913,6 +913,18 @@ describe Sequel::Model, "Validations" do
|
|
|
913
913
|
@user = User.new(:username => "0records", :password => "anothertest")
|
|
914
914
|
@user.should be_valid
|
|
915
915
|
@user.errors.full_messages.should == []
|
|
916
|
+
|
|
917
|
+
User.db.sqls
|
|
918
|
+
@user = User.new(:password => "anothertest")
|
|
919
|
+
@user.should be_valid
|
|
920
|
+
@user.errors.full_messages.should == []
|
|
921
|
+
@user = User.new(:username => "0records")
|
|
922
|
+
@user.should be_valid
|
|
923
|
+
@user.errors.full_messages.should == []
|
|
924
|
+
@user = User.new
|
|
925
|
+
@user.should be_valid
|
|
926
|
+
@user.errors.full_messages.should == []
|
|
927
|
+
User.db.sqls.should == []
|
|
916
928
|
end
|
|
917
929
|
|
|
918
930
|
it "should have a validates block that contains multiple validations" do
|
|
@@ -962,8 +974,6 @@ describe Sequel::Model, "Validations" do
|
|
|
962
974
|
|
|
963
975
|
it "should validate correctly instances initialized with string keys" do
|
|
964
976
|
class ::Can < Sequel::Model
|
|
965
|
-
columns :id, :name
|
|
966
|
-
|
|
967
977
|
validates_length_of :name, :minimum => 4
|
|
968
978
|
end
|
|
969
979
|
|
|
@@ -975,8 +985,7 @@ end
|
|
|
975
985
|
|
|
976
986
|
describe "Model#save" do
|
|
977
987
|
before do
|
|
978
|
-
@c =
|
|
979
|
-
@c.class_eval do
|
|
988
|
+
@c = model_class.call Sequel::Model(:people) do
|
|
980
989
|
columns :id, :x
|
|
981
990
|
|
|
982
991
|
validates_each :x do |o, a, v|
|