sequel 4.22.0 → 4.23.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 +4 -4
- data/CHANGELOG +22 -0
- data/README.rdoc +6 -0
- data/Rakefile +59 -81
- data/doc/migration.rdoc +2 -0
- data/doc/release_notes/4.23.0.txt +65 -0
- data/doc/sharding.rdoc +16 -14
- data/doc/testing.rdoc +61 -77
- data/lib/sequel/adapters/jdbc.rb +1 -0
- data/lib/sequel/adapters/mock.rb +0 -1
- data/lib/sequel/adapters/postgres.rb +1 -0
- data/lib/sequel/adapters/postgresql.rb +1 -0
- data/lib/sequel/adapters/shared/postgres.rb +3 -3
- data/lib/sequel/connection_pool/sharded_threaded.rb +5 -0
- data/lib/sequel/connection_pool/threaded.rb +9 -1
- data/lib/sequel/database/connecting.rb +1 -1
- data/lib/sequel/database/transactions.rb +2 -1
- data/lib/sequel/dataset/prepared_statements.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +12 -12
- data/lib/sequel/extensions/date_arithmetic.rb +0 -4
- data/lib/sequel/extensions/pagination.rb +14 -2
- data/lib/sequel/extensions/pg_enum.rb +2 -2
- data/lib/sequel/extensions/pg_hstore.rb +1 -1
- data/lib/sequel/extensions/pg_json_ops.rb +2 -2
- data/lib/sequel/plugins/csv_serializer.rb +2 -0
- data/lib/sequel/plugins/delay_add_association.rb +50 -0
- data/lib/sequel/plugins/list.rb +2 -2
- data/lib/sequel/plugins/nested_attributes.rb +8 -28
- data/lib/sequel/plugins/update_refresh.rb +50 -0
- data/lib/sequel/plugins/validate_associated.rb +55 -0
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +29 -29
- data/spec/adapters/firebird_spec.rb +97 -103
- data/spec/adapters/informix_spec.rb +25 -25
- data/spec/adapters/mssql_spec.rb +156 -172
- data/spec/adapters/mysql_spec.rb +334 -359
- data/spec/adapters/oracle_spec.rb +67 -69
- data/spec/adapters/postgres_spec.rb +1298 -1249
- data/spec/adapters/spec_helper.rb +2 -35
- data/spec/adapters/sqlanywhere_spec.rb +39 -39
- data/spec/adapters/sqlite_spec.rb +203 -200
- data/spec/bin_spec.rb +57 -59
- data/spec/core/connection_pool_spec.rb +402 -401
- data/spec/core/database_spec.rb +953 -944
- data/spec/core/dataset_spec.rb +2178 -2168
- data/spec/core/deprecated_spec.rb +19 -19
- data/spec/core/expression_filters_spec.rb +415 -415
- data/spec/core/mock_adapter_spec.rb +212 -212
- data/spec/core/object_graph_spec.rb +73 -73
- data/spec/core/placeholder_literalizer_spec.rb +71 -71
- data/spec/core/schema_generator_spec.rb +44 -44
- data/spec/core/schema_spec.rb +470 -472
- data/spec/core/spec_helper.rb +5 -20
- data/spec/core/version_spec.rb +2 -2
- data/spec/core_extensions_spec.rb +320 -320
- data/spec/extensions/accessed_columns_spec.rb +12 -12
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +2 -2
- data/spec/extensions/arbitrary_servers_spec.rb +23 -23
- data/spec/extensions/association_dependencies_spec.rb +34 -34
- data/spec/extensions/association_pks_spec.rb +98 -98
- data/spec/extensions/association_proxies_spec.rb +33 -33
- data/spec/extensions/auto_validations_spec.rb +46 -46
- data/spec/extensions/blacklist_security_spec.rb +19 -18
- data/spec/extensions/blank_spec.rb +36 -36
- data/spec/extensions/boolean_readers_spec.rb +36 -36
- data/spec/extensions/caching_spec.rb +82 -82
- data/spec/extensions/class_table_inheritance_spec.rb +72 -72
- data/spec/extensions/column_conflicts_spec.rb +19 -14
- data/spec/extensions/column_select_spec.rb +19 -19
- data/spec/extensions/columns_introspection_spec.rb +43 -43
- data/spec/extensions/composition_spec.rb +64 -64
- data/spec/extensions/connection_validator_spec.rb +92 -90
- data/spec/extensions/constraint_validations_plugin_spec.rb +92 -92
- data/spec/extensions/constraint_validations_spec.rb +80 -80
- data/spec/extensions/core_refinements_spec.rb +220 -220
- data/spec/extensions/csv_serializer_spec.rb +44 -44
- data/spec/extensions/current_datetime_timestamp_spec.rb +8 -8
- data/spec/extensions/dataset_associations_spec.rb +65 -65
- data/spec/extensions/dataset_source_alias_spec.rb +16 -16
- data/spec/extensions/date_arithmetic_spec.rb +51 -58
- data/spec/extensions/defaults_setter_spec.rb +19 -19
- data/spec/extensions/delay_add_association_spec.rb +52 -0
- data/spec/extensions/dirty_spec.rb +51 -51
- data/spec/extensions/eager_each_spec.rb +8 -8
- data/spec/extensions/empty_array_ignore_nulls_spec.rb +10 -10
- data/spec/extensions/error_splitter_spec.rb +2 -2
- data/spec/extensions/error_sql_spec.rb +4 -4
- data/spec/extensions/eval_inspect_spec.rb +3 -3
- data/spec/extensions/filter_having_spec.rb +8 -8
- data/spec/extensions/force_encoding_spec.rb +30 -30
- data/spec/extensions/from_block_spec.rb +7 -7
- data/spec/extensions/graph_each_spec.rb +19 -19
- data/spec/extensions/hash_aliases_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +100 -100
- data/spec/extensions/inflector_spec.rb +54 -54
- data/spec/extensions/input_transformer_spec.rb +10 -10
- data/spec/extensions/insert_returning_select_spec.rb +8 -8
- data/spec/extensions/instance_filters_spec.rb +26 -26
- data/spec/extensions/instance_hooks_spec.rb +85 -85
- data/spec/extensions/json_serializer_spec.rb +68 -68
- data/spec/extensions/lazy_attributes_spec.rb +49 -49
- data/spec/extensions/list_spec.rb +77 -75
- data/spec/extensions/looser_typecasting_spec.rb +16 -16
- data/spec/extensions/many_through_many_spec.rb +627 -627
- data/spec/extensions/meta_def_spec.rb +7 -7
- data/spec/extensions/migration_spec.rb +217 -217
- data/spec/extensions/modification_detection_spec.rb +20 -20
- data/spec/extensions/mssql_optimistic_locking_spec.rb +21 -21
- data/spec/extensions/named_timezones_spec.rb +18 -18
- data/spec/extensions/nested_attributes_spec.rb +107 -107
- data/spec/extensions/null_dataset_spec.rb +24 -24
- data/spec/extensions/optimistic_locking_spec.rb +21 -21
- data/spec/extensions/pagination_spec.rb +52 -52
- data/spec/extensions/pg_array_associations_spec.rb +273 -273
- data/spec/extensions/pg_array_ops_spec.rb +52 -52
- data/spec/extensions/pg_array_spec.rb +152 -152
- data/spec/extensions/pg_enum_spec.rb +13 -13
- data/spec/extensions/pg_hstore_ops_spec.rb +63 -63
- data/spec/extensions/pg_hstore_spec.rb +84 -84
- data/spec/extensions/pg_inet_spec.rb +15 -15
- data/spec/extensions/pg_interval_spec.rb +29 -29
- data/spec/extensions/pg_json_ops_spec.rb +86 -84
- data/spec/extensions/pg_json_spec.rb +104 -104
- data/spec/extensions/pg_loose_count_spec.rb +6 -6
- data/spec/extensions/pg_range_ops_spec.rb +24 -24
- data/spec/extensions/pg_range_spec.rb +143 -143
- data/spec/extensions/pg_row_ops_spec.rb +14 -14
- data/spec/extensions/pg_row_plugin_spec.rb +12 -12
- data/spec/extensions/pg_row_spec.rb +118 -118
- data/spec/extensions/pg_static_cache_updater_spec.rb +28 -28
- data/spec/extensions/pg_typecast_on_load_spec.rb +21 -21
- data/spec/extensions/prepared_statements_associations_spec.rb +42 -42
- data/spec/extensions/prepared_statements_safe_spec.rb +18 -18
- data/spec/extensions/prepared_statements_spec.rb +28 -28
- data/spec/extensions/prepared_statements_with_pk_spec.rb +11 -11
- data/spec/extensions/pretty_table_spec.rb +16 -16
- data/spec/extensions/query_literals_spec.rb +37 -37
- data/spec/extensions/query_spec.rb +32 -32
- data/spec/extensions/rcte_tree_spec.rb +141 -141
- data/spec/extensions/round_timestamps_spec.rb +21 -21
- data/spec/extensions/schema_caching_spec.rb +8 -8
- data/spec/extensions/schema_dumper_spec.rb +78 -78
- data/spec/extensions/schema_spec.rb +31 -27
- data/spec/extensions/scissors_spec.rb +3 -3
- data/spec/extensions/select_remove_spec.rb +14 -14
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +28 -28
- data/spec/extensions/serialization_modification_detection_spec.rb +33 -33
- data/spec/extensions/serialization_spec.rb +79 -78
- data/spec/extensions/server_block_spec.rb +17 -17
- data/spec/extensions/set_overrides_spec.rb +30 -30
- data/spec/extensions/sharding_spec.rb +65 -65
- data/spec/extensions/shared_caching_spec.rb +29 -29
- data/spec/extensions/single_table_inheritance_spec.rb +79 -79
- data/spec/extensions/skip_create_refresh_spec.rb +3 -3
- data/spec/extensions/spec_helper.rb +4 -29
- data/spec/extensions/split_array_nil_spec.rb +9 -9
- data/spec/extensions/split_values_spec.rb +7 -7
- data/spec/extensions/sql_expr_spec.rb +32 -32
- data/spec/extensions/static_cache_spec.rb +123 -123
- data/spec/extensions/string_date_time_spec.rb +34 -34
- data/spec/extensions/string_stripper_spec.rb +15 -15
- data/spec/extensions/subclasses_spec.rb +31 -31
- data/spec/extensions/table_select_spec.rb +15 -15
- data/spec/extensions/tactical_eager_loading_spec.rb +23 -23
- data/spec/extensions/thread_local_timezones_spec.rb +13 -13
- data/spec/extensions/timestamps_spec.rb +40 -40
- data/spec/extensions/to_dot_spec.rb +34 -34
- data/spec/extensions/touch_spec.rb +52 -52
- data/spec/extensions/tree_spec.rb +72 -72
- data/spec/extensions/typecast_on_load_spec.rb +25 -25
- data/spec/extensions/unlimited_update_spec.rb +2 -2
- data/spec/extensions/update_or_create_spec.rb +36 -36
- data/spec/extensions/update_primary_key_spec.rb +35 -35
- data/spec/extensions/update_refresh_spec.rb +41 -0
- data/spec/extensions/validate_associated_spec.rb +52 -0
- data/spec/extensions/validation_class_methods_spec.rb +314 -317
- data/spec/extensions/validation_helpers_spec.rb +195 -195
- data/spec/extensions/xml_serializer_spec.rb +48 -48
- data/spec/guards_helper.rb +55 -0
- data/spec/integration/associations_test.rb +1089 -1088
- data/spec/integration/database_test.rb +29 -29
- data/spec/integration/dataset_test.rb +661 -661
- data/spec/integration/eager_loader_test.rb +147 -147
- data/spec/integration/migrator_test.rb +122 -122
- data/spec/integration/model_test.rb +70 -70
- data/spec/integration/plugin_test.rb +682 -640
- data/spec/integration/prepared_statement_test.rb +172 -172
- data/spec/integration/schema_test.rb +245 -245
- data/spec/integration/spec_helper.rb +1 -64
- data/spec/integration/timezone_test.rb +17 -17
- data/spec/integration/transaction_test.rb +87 -87
- data/spec/integration/type_test.rb +33 -33
- data/spec/model/association_reflection_spec.rb +130 -121
- data/spec/model/associations_spec.rb +1112 -1113
- data/spec/model/base_spec.rb +197 -196
- data/spec/model/class_dataset_methods_spec.rb +118 -118
- data/spec/model/dataset_methods_spec.rb +49 -49
- data/spec/model/eager_loading_spec.rb +705 -702
- data/spec/model/hooks_spec.rb +169 -168
- data/spec/model/inflector_spec.rb +5 -5
- data/spec/model/model_spec.rb +287 -297
- data/spec/model/plugins_spec.rb +47 -47
- data/spec/model/record_spec.rb +534 -535
- data/spec/model/spec_helper.rb +3 -21
- data/spec/model/validations_spec.rb +72 -70
- data/spec/spec_config.rb +8 -0
- metadata +41 -9
- data/lib/sequel/adapters/fdbsql.rb +0 -286
- data/lib/sequel/adapters/jdbc/fdbsql.rb +0 -66
- data/lib/sequel/adapters/openbase.rb +0 -54
- data/lib/sequel/adapters/shared/fdbsql.rb +0 -550
- data/spec/adapters/fdbsql_spec.rb +0 -429
- data/spec/rspec_helper.rb +0 -22
|
@@ -3,13 +3,13 @@ require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
|
|
|
3
3
|
Sequel.extension :string_date_time
|
|
4
4
|
|
|
5
5
|
describe "String#to_time" do
|
|
6
|
-
|
|
7
|
-
"2007-07-11".to_time.
|
|
8
|
-
"06:30".to_time.
|
|
6
|
+
it "should convert the string into a Time object" do
|
|
7
|
+
"2007-07-11".to_time.must_equal Time.parse("2007-07-11")
|
|
8
|
+
"06:30".to_time.must_equal Time.parse("06:30")
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
proc {'0000-00-00'.to_time}.
|
|
11
|
+
it "should raise InvalidValue for an invalid time" do
|
|
12
|
+
proc {'0000-00-00'.to_time}.must_raise(Sequel::InvalidValue)
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -18,21 +18,21 @@ describe "String#to_date" do
|
|
|
18
18
|
Sequel.convert_two_digit_years = true
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
"2007-07-11".to_date.
|
|
21
|
+
it "should convert the string into a Date object" do
|
|
22
|
+
"2007-07-11".to_date.must_equal Date.parse("2007-07-11")
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
"July 11, 07".to_date.
|
|
25
|
+
it "should convert 2 digit years by default" do
|
|
26
|
+
"July 11, 07".to_date.must_equal Date.parse("2007-07-11")
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
it "should not convert 2 digit years if set not to" do
|
|
30
30
|
Sequel.convert_two_digit_years = false
|
|
31
|
-
"July 11, 07".to_date.
|
|
31
|
+
"July 11, 07".to_date.must_equal Date.parse("0007-07-11")
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
proc {'0000-00-00'.to_date}.
|
|
34
|
+
it "should raise InvalidValue for an invalid date" do
|
|
35
|
+
proc {'0000-00-00'.to_date}.must_raise(Sequel::InvalidValue)
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
|
|
@@ -41,21 +41,21 @@ describe "String#to_datetime" do
|
|
|
41
41
|
Sequel.convert_two_digit_years = true
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
"2007-07-11 10:11:12a".to_datetime.
|
|
44
|
+
it "should convert the string into a DateTime object" do
|
|
45
|
+
"2007-07-11 10:11:12a".to_datetime.must_equal DateTime.parse("2007-07-11 10:11:12a")
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
"July 11, 07 10:11:12a".to_datetime.
|
|
48
|
+
it "should convert 2 digit years by default" do
|
|
49
|
+
"July 11, 07 10:11:12a".to_datetime.must_equal DateTime.parse("2007-07-11 10:11:12a")
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
it "should not convert 2 digit years if set not to" do
|
|
53
53
|
Sequel.convert_two_digit_years = false
|
|
54
|
-
"July 11, 07 10:11:12a".to_datetime.
|
|
54
|
+
"July 11, 07 10:11:12a".to_datetime.must_equal DateTime.parse("0007-07-11 10:11:12a")
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
proc {'0000-00-00'.to_datetime}.
|
|
57
|
+
it "should raise InvalidValue for an invalid date" do
|
|
58
|
+
proc {'0000-00-00'.to_datetime}.must_raise(Sequel::InvalidValue)
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
|
|
@@ -65,31 +65,31 @@ describe "String#to_sequel_time" do
|
|
|
65
65
|
Sequel.convert_two_digit_years = true
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
"2007-07-11 10:11:12a".to_sequel_time.class.
|
|
70
|
-
"2007-07-11 10:11:12a".to_sequel_time.
|
|
68
|
+
it "should convert the string into a Time object by default" do
|
|
69
|
+
"2007-07-11 10:11:12a".to_sequel_time.class.must_equal Time
|
|
70
|
+
"2007-07-11 10:11:12a".to_sequel_time.must_equal Time.parse("2007-07-11 10:11:12a")
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
it "should convert the string into a DateTime object if that is set" do
|
|
74
74
|
Sequel.datetime_class = DateTime
|
|
75
|
-
"2007-07-11 10:11:12a".to_sequel_time.class.
|
|
76
|
-
"2007-07-11 10:11:12a".to_sequel_time.
|
|
75
|
+
"2007-07-11 10:11:12a".to_sequel_time.class.must_equal DateTime
|
|
76
|
+
"2007-07-11 10:11:12a".to_sequel_time.must_equal DateTime.parse("2007-07-11 10:11:12a")
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
it "should convert 2 digit years by default if using DateTime class" do
|
|
80
80
|
Sequel.datetime_class = DateTime
|
|
81
|
-
"July 11, 07 10:11:12a".to_sequel_time.
|
|
81
|
+
"July 11, 07 10:11:12a".to_sequel_time.must_equal DateTime.parse("2007-07-11 10:11:12a")
|
|
82
82
|
end
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
it "should not convert 2 digit years if set not to when using DateTime class" do
|
|
85
85
|
Sequel.datetime_class = DateTime
|
|
86
86
|
Sequel.convert_two_digit_years = false
|
|
87
|
-
"July 11, 07 10:11:12a".to_sequel_time.
|
|
87
|
+
"July 11, 07 10:11:12a".to_sequel_time.must_equal DateTime.parse("0007-07-11 10:11:12a")
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
proc {'0000-00-00'.to_sequel_time}.
|
|
90
|
+
it "should raise InvalidValue for an invalid time" do
|
|
91
|
+
proc {'0000-00-00'.to_sequel_time}.must_raise(Sequel::InvalidValue)
|
|
92
92
|
Sequel.datetime_class = DateTime
|
|
93
|
-
proc {'0000-00-00'.to_sequel_time}.
|
|
93
|
+
proc {'0000-00-00'.to_sequel_time}.must_raise(Sequel::InvalidValue)
|
|
94
94
|
end
|
|
95
95
|
end
|
|
@@ -12,44 +12,44 @@ describe "Sequel::Plugins::StringStripper" do
|
|
|
12
12
|
|
|
13
13
|
it "should strip all input strings" do
|
|
14
14
|
@o.name = ' name '
|
|
15
|
-
@o.name.
|
|
15
|
+
@o.name.must_equal 'name'
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
it "should not affect other types" do
|
|
19
19
|
@o.name = 1
|
|
20
|
-
@o.name.
|
|
20
|
+
@o.name.must_equal 1
|
|
21
21
|
@o.name = Date.today
|
|
22
|
-
@o.name.
|
|
22
|
+
@o.name.must_equal Date.today
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
it "should not strip strings for blob arguments" do
|
|
26
26
|
v = Sequel.blob(' name ')
|
|
27
27
|
@o.name = v
|
|
28
|
-
@o.name.
|
|
28
|
+
@o.name.must_be_same_as(v)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
it "should not strip strings for blob columns" do
|
|
32
32
|
@o.b = ' name '
|
|
33
|
-
@o.b.
|
|
34
|
-
@o.b.
|
|
33
|
+
@o.b.must_be_kind_of(Sequel::SQL::Blob)
|
|
34
|
+
@o.b.must_equal Sequel.blob(' name ')
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
it "should allow skipping of columns using Model.skip_string_stripping" do
|
|
38
|
-
@c.skip_string_stripping?(:name).
|
|
38
|
+
@c.skip_string_stripping?(:name).must_equal false
|
|
39
39
|
@c.skip_string_stripping :name
|
|
40
|
-
@c.skip_string_stripping?(:name).
|
|
40
|
+
@c.skip_string_stripping?(:name).must_equal true
|
|
41
41
|
v = ' name '
|
|
42
42
|
@o.name = v
|
|
43
|
-
@o.name.
|
|
43
|
+
@o.name.must_be_same_as(v)
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
it "should work correctly in subclasses" do
|
|
47
47
|
o = Class.new(@c).new
|
|
48
48
|
o.name = ' name '
|
|
49
|
-
o.name.
|
|
49
|
+
o.name.must_equal 'name'
|
|
50
50
|
o.b = ' name '
|
|
51
|
-
o.b.
|
|
52
|
-
o.b.
|
|
51
|
+
o.b.must_be_kind_of(Sequel::SQL::Blob)
|
|
52
|
+
o.b.must_equal Sequel.blob(' name ')
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
it "should work correctly for dataset changes" do
|
|
@@ -60,9 +60,9 @@ describe "Sequel::Plugins::StringStripper" do
|
|
|
60
60
|
c.set_dataset(@db[:test2])
|
|
61
61
|
o = c.new
|
|
62
62
|
o.name = ' name '
|
|
63
|
-
o.name.
|
|
63
|
+
o.name.must_equal 'name'
|
|
64
64
|
o.b = ' name '
|
|
65
|
-
o.b.
|
|
66
|
-
o.b.
|
|
65
|
+
o.b.must_be_kind_of(Sequel::SQL::Blob)
|
|
66
|
+
o.b.must_equal Sequel.blob(' name ')
|
|
67
67
|
end
|
|
68
68
|
end
|
|
@@ -6,61 +6,61 @@ describe Sequel::Model, "Subclasses plugin" do
|
|
|
6
6
|
@c.plugin :subclasses
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
@c.subclasses.
|
|
9
|
+
it "#subclasses should record direct subclasses of the given model" do
|
|
10
|
+
@c.subclasses.must_equal []
|
|
11
11
|
|
|
12
12
|
sc1 = Class.new(@c)
|
|
13
|
-
@c.subclasses.
|
|
14
|
-
sc1.subclasses.
|
|
13
|
+
@c.subclasses.must_equal [sc1]
|
|
14
|
+
sc1.subclasses.must_equal []
|
|
15
15
|
|
|
16
16
|
sc2 = Class.new(@c)
|
|
17
|
-
@c.subclasses.
|
|
18
|
-
sc1.subclasses.
|
|
19
|
-
sc2.subclasses.
|
|
17
|
+
@c.subclasses.must_equal [sc1, sc2]
|
|
18
|
+
sc1.subclasses.must_equal []
|
|
19
|
+
sc2.subclasses.must_equal []
|
|
20
20
|
|
|
21
21
|
ssc1 = Class.new(sc1)
|
|
22
|
-
@c.subclasses.
|
|
23
|
-
sc1.subclasses.
|
|
24
|
-
sc2.subclasses.
|
|
22
|
+
@c.subclasses.must_equal [sc1, sc2]
|
|
23
|
+
sc1.subclasses.must_equal [ssc1]
|
|
24
|
+
sc2.subclasses.must_equal []
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
@c.descendents.
|
|
27
|
+
it "#descendents should record all descendent subclasses of the given model" do
|
|
28
|
+
@c.descendents.must_equal []
|
|
29
29
|
|
|
30
30
|
sc1 = Class.new(@c)
|
|
31
|
-
@c.descendents.
|
|
32
|
-
sc1.descendents.
|
|
31
|
+
@c.descendents.must_equal [sc1]
|
|
32
|
+
sc1.descendents.must_equal []
|
|
33
33
|
|
|
34
34
|
sc2 = Class.new(@c)
|
|
35
|
-
@c.descendents.
|
|
36
|
-
sc1.descendents.
|
|
37
|
-
sc2.descendents.
|
|
35
|
+
@c.descendents.must_equal [sc1, sc2]
|
|
36
|
+
sc1.descendents.must_equal []
|
|
37
|
+
sc2.descendents.must_equal []
|
|
38
38
|
|
|
39
39
|
ssc1 = Class.new(sc1)
|
|
40
|
-
@c.descendents.
|
|
41
|
-
sc1.descendents.
|
|
42
|
-
sc2.descendents.
|
|
43
|
-
ssc1.descendents.
|
|
40
|
+
@c.descendents.must_equal [sc1, ssc1, sc2]
|
|
41
|
+
sc1.descendents.must_equal [ssc1]
|
|
42
|
+
sc2.descendents.must_equal []
|
|
43
|
+
ssc1.descendents.must_equal []
|
|
44
44
|
|
|
45
45
|
sssc1 = Class.new(ssc1)
|
|
46
|
-
@c.descendents.
|
|
47
|
-
sc1.descendents.
|
|
48
|
-
sc2.descendents.
|
|
49
|
-
ssc1.descendents.
|
|
50
|
-
sssc1.descendents.
|
|
46
|
+
@c.descendents.must_equal [sc1, ssc1, sssc1, sc2]
|
|
47
|
+
sc1.descendents.must_equal [ssc1, sssc1]
|
|
48
|
+
sc2.descendents.must_equal []
|
|
49
|
+
ssc1.descendents.must_equal [sssc1]
|
|
50
|
+
sssc1.descendents.must_equal []
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
it "plugin block should be called with each subclass created" do
|
|
54
54
|
c = Class.new(Sequel::Model)
|
|
55
55
|
a = []
|
|
56
56
|
c.plugin(:subclasses){|sc| a << sc}
|
|
57
57
|
sc1 = Class.new(c)
|
|
58
|
-
a.
|
|
58
|
+
a.must_equal [sc1]
|
|
59
59
|
sc2 = Class.new(c)
|
|
60
|
-
a.
|
|
60
|
+
a.must_equal [sc1, sc2]
|
|
61
61
|
sc3 = Class.new(sc1)
|
|
62
|
-
a.
|
|
62
|
+
a.must_equal [sc1, sc2, sc3]
|
|
63
63
|
sc4 = Class.new(sc3)
|
|
64
|
-
a.
|
|
64
|
+
a.must_equal [sc1, sc2, sc3, sc4]
|
|
65
65
|
end
|
|
66
66
|
end
|
|
@@ -7,58 +7,58 @@ describe "Sequel::Plugins::TableSelect" do
|
|
|
7
7
|
|
|
8
8
|
it "should add a table.* selection to existing dataset without explicit selection" do
|
|
9
9
|
@Album.plugin :table_select
|
|
10
|
-
@Album.dataset.sql.
|
|
10
|
+
@Album.dataset.sql.must_equal 'SELECT albums.* FROM albums'
|
|
11
11
|
|
|
12
12
|
@Album.dataset = :albs
|
|
13
|
-
@Album.dataset.sql.
|
|
13
|
+
@Album.dataset.sql.must_equal 'SELECT albs.* FROM albs'
|
|
14
14
|
|
|
15
15
|
@Album.dataset = Sequel.identifier(:albs)
|
|
16
|
-
@Album.dataset.sql.
|
|
16
|
+
@Album.dataset.sql.must_equal 'SELECT albs.* FROM albs'
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it "should handle qualified tables" do
|
|
20
20
|
@Album.dataset = :s__albums
|
|
21
21
|
@Album.plugin :table_select
|
|
22
|
-
@Album.dataset.sql.
|
|
22
|
+
@Album.dataset.sql.must_equal 'SELECT s.albums.* FROM s.albums'
|
|
23
23
|
|
|
24
24
|
@Album.dataset = Sequel.qualify(:s2, :albums)
|
|
25
|
-
@Album.dataset.sql.
|
|
25
|
+
@Album.dataset.sql.must_equal 'SELECT s2.albums.* FROM s2.albums'
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
it "should handle aliases" do
|
|
29
29
|
@Album.dataset = :albums___a
|
|
30
30
|
@Album.plugin :table_select
|
|
31
|
-
@Album.dataset.sql.
|
|
31
|
+
@Album.dataset.sql.must_equal 'SELECT a.* FROM albums AS a'
|
|
32
32
|
|
|
33
33
|
@Album.dataset = Sequel.as(:albums, :b)
|
|
34
|
-
@Album.dataset.sql.
|
|
34
|
+
@Album.dataset.sql.must_equal 'SELECT b.* FROM albums AS b'
|
|
35
35
|
|
|
36
36
|
@Album.dataset = :s__albums___a
|
|
37
|
-
@Album.dataset.sql.
|
|
37
|
+
@Album.dataset.sql.must_equal 'SELECT a.* FROM s.albums AS a'
|
|
38
38
|
|
|
39
39
|
@Album.dataset = @Album.db[:albums].from_self
|
|
40
|
-
@Album.dataset.sql.
|
|
40
|
+
@Album.dataset.sql.must_equal 'SELECT t1.* FROM (SELECT * FROM albums) AS t1'
|
|
41
41
|
|
|
42
42
|
@Album.dataset = Sequel.as(@Album.db[:albums], :b)
|
|
43
|
-
@Album.dataset.sql.
|
|
43
|
+
@Album.dataset.sql.must_equal 'SELECT b.* FROM (SELECT * FROM albums) AS b'
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
it "should not add a table.* selection on existing dataset with explicit selection" do
|
|
47
47
|
@Album.dataset = @Album.dataset.select(:name)
|
|
48
48
|
@Album.plugin :table_select
|
|
49
|
-
@Album.dataset.sql.
|
|
49
|
+
@Album.dataset.sql.must_equal 'SELECT name FROM albums'
|
|
50
50
|
|
|
51
51
|
@Album.dataset = @Album.dataset.select(:name, :artist)
|
|
52
|
-
@Album.dataset.sql.
|
|
52
|
+
@Album.dataset.sql.must_equal 'SELECT name, artist FROM albums'
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
it "should not add a table.* selection on existing dataset with multiple tables" do
|
|
56
56
|
@Album.dataset = @Album.db.from(:a1, :a2)
|
|
57
57
|
@Album.plugin :table_select
|
|
58
|
-
@Album.dataset.sql.
|
|
58
|
+
@Album.dataset.sql.must_equal 'SELECT * FROM a1, a2'
|
|
59
59
|
|
|
60
60
|
@Album.dataset = @Album.db.from(:a1).cross_join(:a2)
|
|
61
|
-
@Album.dataset.sql.
|
|
61
|
+
@Album.dataset.sql.must_equal 'SELECT * FROM a1 CROSS JOIN a2'
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
it "works correctly when loaded on model without a dataset" do
|
|
@@ -66,6 +66,6 @@ describe "Sequel::Plugins::TableSelect" do
|
|
|
66
66
|
c.plugin :table_select
|
|
67
67
|
sc = Class.new(c)
|
|
68
68
|
sc.dataset = :a
|
|
69
|
-
sc.dataset.sql.
|
|
69
|
+
sc.dataset.sql.must_equal "SELECT a.* FROM a"
|
|
70
70
|
end
|
|
71
71
|
end
|
|
@@ -29,30 +29,30 @@ describe "Sequel::Plugins::TacticalEagerLoading" do
|
|
|
29
29
|
|
|
30
30
|
it "Dataset#all should set the retrieved_by and retrieved_with attributes" do
|
|
31
31
|
ts = @c.all
|
|
32
|
-
ts.map{|x| [x.retrieved_by, x.retrieved_with]}.
|
|
32
|
+
ts.map{|x| [x.retrieved_by, x.retrieved_with]}.must_equal [[@ds,ts], [@ds,ts], [@ds,ts], [@ds,ts]]
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
it "Dataset#all shouldn't raise an error if a Sequel::Model instance is not returned" do
|
|
36
|
-
|
|
36
|
+
@c.naked.all
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
it "association getter methods should eagerly load the association if the association isn't cached" do
|
|
40
|
-
DB.sqls.length.
|
|
40
|
+
DB.sqls.length.must_equal 0
|
|
41
41
|
ts = @c.all
|
|
42
|
-
DB.sqls.length.
|
|
43
|
-
ts.map{|x| x.parent}.
|
|
44
|
-
DB.sqls.length.
|
|
45
|
-
ts.map{|x| x.children}.
|
|
46
|
-
DB.sqls.length.
|
|
42
|
+
DB.sqls.length.must_equal 1
|
|
43
|
+
ts.map{|x| x.parent}.must_equal [ts[2], ts[3], nil, nil]
|
|
44
|
+
DB.sqls.length.must_equal 1
|
|
45
|
+
ts.map{|x| x.children}.must_equal [[], [], [ts[0]], [ts[1]]]
|
|
46
|
+
DB.sqls.length.must_equal 1
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
it "association getter methods should not eagerly load the association if the association is cached" do
|
|
50
|
-
DB.sqls.length.
|
|
50
|
+
DB.sqls.length.must_equal 0
|
|
51
51
|
ts = @c.all
|
|
52
|
-
DB.sqls.length.
|
|
53
|
-
ts.map{|x| x.parent}.
|
|
54
|
-
@ds.
|
|
55
|
-
ts.map{|x| x.parent}.
|
|
52
|
+
DB.sqls.length.must_equal 1
|
|
53
|
+
ts.map{|x| x.parent}.must_equal [ts[2], ts[3], nil, nil]
|
|
54
|
+
def @ds.eager_load(*) raise end
|
|
55
|
+
ts.map{|x| x.parent}.must_equal [ts[2], ts[3], nil, nil]
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
it "should handle case where an association is valid on an instance, but not on all instances" do
|
|
@@ -65,18 +65,18 @@ describe "Sequel::Plugins::TacticalEagerLoading" do
|
|
|
65
65
|
it "association getter methods should not eagerly load the association if an instance is frozen" do
|
|
66
66
|
ts = @c.all
|
|
67
67
|
ts.first.freeze
|
|
68
|
-
DB.sqls.length.
|
|
69
|
-
ts.map{|x| x.parent}.
|
|
70
|
-
DB.sqls.length.
|
|
71
|
-
ts.map{|x| x.children}.
|
|
72
|
-
DB.sqls.length.
|
|
73
|
-
ts.map{|x| x.parent}.
|
|
74
|
-
DB.sqls.length.
|
|
75
|
-
ts.map{|x| x.children}.
|
|
76
|
-
DB.sqls.length.
|
|
68
|
+
DB.sqls.length.must_equal 1
|
|
69
|
+
ts.map{|x| x.parent}.must_equal [ts[2], ts[3], nil, nil]
|
|
70
|
+
DB.sqls.length.must_equal 2
|
|
71
|
+
ts.map{|x| x.children}.must_equal [[], [], [ts[0]], [ts[1]]]
|
|
72
|
+
DB.sqls.length.must_equal 2
|
|
73
|
+
ts.map{|x| x.parent}.must_equal [ts[2], ts[3], nil, nil]
|
|
74
|
+
DB.sqls.length.must_equal 1
|
|
75
|
+
ts.map{|x| x.children}.must_equal [[], [], [ts[0]], [ts[1]]]
|
|
76
|
+
DB.sqls.length.must_equal 1
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
it "#marshallable should make marshalling not fail" do
|
|
80
|
-
|
|
80
|
+
Marshal.dump(@c.all.map{|x| x.marshallable!})
|
|
81
81
|
end
|
|
82
82
|
end
|
|
@@ -11,33 +11,33 @@ describe "Sequel thread_local_timezones extension" do
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
it "should allow specifying thread local timezones via thread_*_timezone=" do
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
Sequel.thread_application_timezone = :local
|
|
15
|
+
Sequel.thread_database_timezone = :utc
|
|
16
|
+
Sequel.thread_typecast_timezone = nil
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it "should use thread local timezone if available" do
|
|
20
20
|
Sequel.thread_application_timezone = :local
|
|
21
|
-
Sequel.application_timezone.
|
|
21
|
+
Sequel.application_timezone.must_equal :local
|
|
22
22
|
Sequel.thread_database_timezone = :utc
|
|
23
|
-
Sequel.database_timezone.
|
|
23
|
+
Sequel.database_timezone.must_equal :utc
|
|
24
24
|
Sequel.thread_typecast_timezone = nil
|
|
25
|
-
Sequel.typecast_timezone.
|
|
25
|
+
Sequel.typecast_timezone.must_equal nil
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
it "should fallback to default timezone if no thread_local timezone" do
|
|
29
29
|
Sequel.default_timezone = :utc
|
|
30
|
-
Sequel.application_timezone.
|
|
31
|
-
Sequel.database_timezone.
|
|
32
|
-
Sequel.typecast_timezone.
|
|
30
|
+
Sequel.application_timezone.must_equal :utc
|
|
31
|
+
Sequel.database_timezone.must_equal :utc
|
|
32
|
+
Sequel.typecast_timezone.must_equal :utc
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
it "should use a nil thread_local_timezone if set instead of falling back to the default timezone if thread_local_timezone is set to :nil" do
|
|
36
36
|
Sequel.typecast_timezone = :utc
|
|
37
37
|
Sequel.thread_typecast_timezone = nil
|
|
38
|
-
Sequel.typecast_timezone.
|
|
38
|
+
Sequel.typecast_timezone.must_equal :utc
|
|
39
39
|
Sequel.thread_typecast_timezone = :nil
|
|
40
|
-
Sequel.typecast_timezone.
|
|
40
|
+
Sequel.typecast_timezone.must_equal nil
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
it "should be thread safe" do
|
|
@@ -61,7 +61,7 @@ describe "Sequel thread_local_timezones extension" do
|
|
|
61
61
|
q1.push nil
|
|
62
62
|
t1.join
|
|
63
63
|
t2.join
|
|
64
|
-
tz1.
|
|
65
|
-
tz2.
|
|
64
|
+
tz1.must_equal :utc
|
|
65
|
+
tz2.must_equal :local
|
|
66
66
|
end
|
|
67
67
|
end
|