sequel 2.11.0 → 2.12.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 +168 -0
- data/README.rdoc +77 -95
- data/Rakefile +100 -80
- data/bin/sequel +2 -1
- data/doc/advanced_associations.rdoc +23 -32
- data/doc/cheat_sheet.rdoc +23 -40
- data/doc/dataset_filtering.rdoc +6 -6
- data/doc/prepared_statements.rdoc +22 -22
- data/doc/release_notes/2.12.0.txt +534 -0
- data/doc/schema.rdoc +3 -1
- data/doc/sharding.rdoc +8 -8
- data/doc/virtual_rows.rdoc +65 -0
- data/lib/sequel.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/ado.rb +3 -3
- data/lib/{sequel_core → sequel}/adapters/db2.rb +0 -0
- data/lib/{sequel_core → sequel}/adapters/dbi.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/do.rb +9 -5
- data/lib/{sequel_core → sequel}/adapters/do/mysql.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/do/postgres.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/do/sqlite.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/firebird.rb +84 -80
- data/lib/{sequel_core → sequel}/adapters/informix.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/jdbc.rb +21 -14
- data/lib/{sequel_core → sequel}/adapters/jdbc/h2.rb +14 -13
- data/lib/{sequel_core → sequel}/adapters/jdbc/mysql.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/jdbc/oracle.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/jdbc/postgresql.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/jdbc/sqlite.rb +1 -1
- data/lib/{sequel_core → sequel}/adapters/mysql.rb +60 -39
- data/lib/{sequel_core → sequel}/adapters/odbc.rb +8 -4
- data/lib/{sequel_core → sequel}/adapters/openbase.rb +0 -0
- data/lib/{sequel_core → sequel}/adapters/oracle.rb +38 -7
- data/lib/{sequel_core → sequel}/adapters/postgres.rb +24 -24
- data/lib/{sequel_core → sequel}/adapters/shared/mssql.rb +5 -5
- data/lib/{sequel_core → sequel}/adapters/shared/mysql.rb +126 -71
- data/lib/{sequel_core → sequel}/adapters/shared/oracle.rb +7 -10
- data/lib/{sequel_core → sequel}/adapters/shared/postgres.rb +159 -125
- data/lib/{sequel_core → sequel}/adapters/shared/progress.rb +1 -2
- data/lib/{sequel_core → sequel}/adapters/shared/sqlite.rb +72 -67
- data/lib/{sequel_core → sequel}/adapters/sqlite.rb +11 -7
- data/lib/{sequel_core → sequel}/adapters/utils/date_format.rb +0 -0
- data/lib/{sequel_core → sequel}/adapters/utils/stored_procedures.rb +0 -0
- data/lib/{sequel_core → sequel}/adapters/utils/unsupported.rb +19 -0
- data/lib/{sequel_core → sequel}/connection_pool.rb +7 -5
- data/lib/sequel/core.rb +221 -0
- data/lib/{sequel_core → sequel}/core_sql.rb +91 -49
- data/lib/{sequel_core → sequel}/database.rb +264 -149
- data/lib/{sequel_core/schema/generator.rb → sequel/database/schema_generator.rb} +6 -2
- data/lib/{sequel_core/database/schema.rb → sequel/database/schema_methods.rb} +12 -12
- data/lib/sequel/database/schema_sql.rb +224 -0
- data/lib/{sequel_core → sequel}/dataset.rb +78 -236
- data/lib/{sequel_core → sequel}/dataset/convenience.rb +99 -61
- data/lib/{sequel_core/object_graph.rb → sequel/dataset/graph.rb} +16 -14
- data/lib/{sequel_core → sequel}/dataset/prepared_statements.rb +1 -1
- data/lib/{sequel_core → sequel}/dataset/sql.rb +150 -99
- data/lib/sequel/deprecated.rb +593 -0
- data/lib/sequel/deprecated_migration.rb +91 -0
- data/lib/sequel/exceptions.rb +48 -0
- data/lib/sequel/extensions/blank.rb +42 -0
- data/lib/{sequel_model → sequel/extensions}/inflector.rb +8 -1
- data/lib/{sequel_core → sequel/extensions}/migration.rb +1 -1
- data/lib/{sequel_core/dataset → sequel/extensions}/pagination.rb +0 -0
- data/lib/{sequel_core → sequel/extensions}/pretty_table.rb +7 -0
- data/lib/{sequel_core/dataset → sequel/extensions}/query.rb +7 -0
- data/lib/sequel/extensions/string_date_time.rb +47 -0
- data/lib/sequel/metaprogramming.rb +43 -0
- data/lib/sequel/model.rb +110 -0
- data/lib/sequel/model/associations.rb +1300 -0
- data/lib/sequel/model/base.rb +937 -0
- data/lib/sequel/model/deprecated.rb +204 -0
- data/lib/sequel/model/deprecated_hooks.rb +103 -0
- data/lib/sequel/model/deprecated_inflector.rb +335 -0
- data/lib/sequel/model/deprecated_validations.rb +388 -0
- data/lib/sequel/model/errors.rb +39 -0
- data/lib/{sequel_model → sequel/model}/exceptions.rb +4 -4
- data/lib/sequel/model/inflections.rb +208 -0
- data/lib/sequel/model/plugins.rb +76 -0
- data/lib/sequel/plugins/caching.rb +122 -0
- data/lib/sequel/plugins/hook_class_methods.rb +122 -0
- data/lib/sequel/plugins/schema.rb +53 -0
- data/lib/sequel/plugins/serialization.rb +117 -0
- data/lib/sequel/plugins/single_table_inheritance.rb +63 -0
- data/lib/sequel/plugins/validation_class_methods.rb +384 -0
- data/lib/sequel/plugins/validation_helpers.rb +150 -0
- data/lib/{sequel_core → sequel}/sql.rb +125 -190
- data/lib/{sequel_core → sequel}/version.rb +2 -1
- data/lib/sequel_core.rb +1 -172
- data/lib/sequel_model.rb +1 -91
- data/spec/adapters/firebird_spec.rb +5 -5
- data/spec/adapters/informix_spec.rb +1 -1
- data/spec/adapters/mysql_spec.rb +128 -42
- data/spec/adapters/oracle_spec.rb +47 -19
- data/spec/adapters/postgres_spec.rb +64 -52
- data/spec/adapters/spec_helper.rb +1 -1
- data/spec/adapters/sqlite_spec.rb +12 -17
- data/spec/{sequel_core → core}/connection_pool_spec.rb +10 -10
- data/spec/{sequel_core → core}/core_ext_spec.rb +19 -19
- data/spec/{sequel_core → core}/core_sql_spec.rb +68 -71
- data/spec/{sequel_core → core}/database_spec.rb +135 -99
- data/spec/{sequel_core → core}/dataset_spec.rb +398 -242
- data/spec/{sequel_core → core}/expression_filters_spec.rb +13 -13
- data/spec/core/migration_spec.rb +263 -0
- data/spec/{sequel_core → core}/object_graph_spec.rb +10 -10
- data/spec/{sequel_core → core}/pretty_table_spec.rb +2 -2
- data/spec/{sequel_core → core}/schema_generator_spec.rb +0 -0
- data/spec/{sequel_core → core}/schema_spec.rb +8 -10
- data/spec/{sequel_core → core}/spec_helper.rb +29 -2
- data/spec/{sequel_core → core}/version_spec.rb +0 -0
- data/spec/extensions/blank_spec.rb +67 -0
- data/spec/extensions/caching_spec.rb +201 -0
- data/spec/{sequel_model/hooks_spec.rb → extensions/hook_class_methods_spec.rb} +8 -23
- data/spec/{sequel_model → extensions}/inflector_spec.rb +3 -0
- data/spec/{sequel_core → extensions}/migration_spec.rb +4 -4
- data/spec/extensions/pagination_spec.rb +99 -0
- data/spec/extensions/pretty_table_spec.rb +91 -0
- data/spec/extensions/query_spec.rb +85 -0
- data/spec/{sequel_model → extensions}/schema_spec.rb +22 -1
- data/spec/extensions/serialization_spec.rb +109 -0
- data/spec/extensions/single_table_inheritance_spec.rb +53 -0
- data/spec/{sequel_model → extensions}/spec_helper.rb +13 -4
- data/spec/extensions/string_date_time_spec.rb +93 -0
- data/spec/{sequel_model/validations_spec.rb → extensions/validation_class_methods_spec.rb} +15 -103
- data/spec/extensions/validation_helpers_spec.rb +291 -0
- data/spec/integration/dataset_test.rb +31 -0
- data/spec/integration/eager_loader_test.rb +17 -30
- data/spec/integration/schema_test.rb +8 -5
- data/spec/integration/spec_helper.rb +17 -0
- data/spec/integration/transaction_test.rb +68 -0
- data/spec/{sequel_model → model}/association_reflection_spec.rb +0 -0
- data/spec/{sequel_model → model}/associations_spec.rb +23 -10
- data/spec/{sequel_model → model}/base_spec.rb +29 -20
- data/spec/{sequel_model → model}/caching_spec.rb +16 -14
- data/spec/{sequel_model → model}/dataset_methods_spec.rb +0 -0
- data/spec/{sequel_model → model}/eager_loading_spec.rb +8 -8
- data/spec/model/hooks_spec.rb +472 -0
- data/spec/model/inflector_spec.rb +126 -0
- data/spec/{sequel_model → model}/model_spec.rb +25 -20
- data/spec/model/plugins_spec.rb +142 -0
- data/spec/{sequel_model → model}/record_spec.rb +121 -62
- data/spec/model/schema_spec.rb +92 -0
- data/spec/model/spec_helper.rb +124 -0
- data/spec/model/validations_spec.rb +1080 -0
- metadata +136 -107
- data/lib/sequel_core/core_ext.rb +0 -217
- data/lib/sequel_core/dataset/callback.rb +0 -13
- data/lib/sequel_core/dataset/schema.rb +0 -15
- data/lib/sequel_core/deprecated.rb +0 -26
- data/lib/sequel_core/exceptions.rb +0 -44
- data/lib/sequel_core/schema.rb +0 -2
- data/lib/sequel_core/schema/sql.rb +0 -325
- data/lib/sequel_model/association_reflection.rb +0 -267
- data/lib/sequel_model/associations.rb +0 -499
- data/lib/sequel_model/base.rb +0 -539
- data/lib/sequel_model/caching.rb +0 -82
- data/lib/sequel_model/dataset_methods.rb +0 -26
- data/lib/sequel_model/eager_loading.rb +0 -370
- data/lib/sequel_model/hooks.rb +0 -101
- data/lib/sequel_model/plugins.rb +0 -62
- data/lib/sequel_model/record.rb +0 -568
- data/lib/sequel_model/schema.rb +0 -49
- data/lib/sequel_model/validations.rb +0 -429
- data/spec/sequel_model/plugins_spec.rb +0 -80
|
@@ -1,7 +1,34 @@
|
|
|
1
1
|
require 'rubygems'
|
|
2
2
|
unless Object.const_defined?('Sequel')
|
|
3
3
|
$:.unshift(File.join(File.dirname(__FILE__), "../../lib/"))
|
|
4
|
-
require '
|
|
4
|
+
require 'sequel/core'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
Sequel.virtual_row_instance_eval = true
|
|
8
|
+
|
|
9
|
+
module Spec::Example::ExampleMethods
|
|
10
|
+
def deprec
|
|
11
|
+
output = Sequel::Deprecation.output = nil
|
|
12
|
+
begin
|
|
13
|
+
yield
|
|
14
|
+
ensure
|
|
15
|
+
Sequel::Deprecation.output = output
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module Spec::Example::ExampleGroupMethods
|
|
21
|
+
def deprec_specify(*args, &block)
|
|
22
|
+
specify(*args) do
|
|
23
|
+
output = Sequel::Deprecation.output
|
|
24
|
+
Sequel::Deprecation.output = nil
|
|
25
|
+
begin
|
|
26
|
+
instance_eval(&block)
|
|
27
|
+
ensure
|
|
28
|
+
Sequel::Deprecation.output = output
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
5
32
|
end
|
|
6
33
|
|
|
7
34
|
class MockDataset < Sequel::Dataset
|
|
@@ -38,7 +65,7 @@ class MockDatabase < Sequel::Database
|
|
|
38
65
|
@sqls = []
|
|
39
66
|
end
|
|
40
67
|
|
|
41
|
-
def transaction; yield; end
|
|
68
|
+
def transaction(opts={}); yield; end
|
|
42
69
|
|
|
43
70
|
def dataset; MockDataset.new(self); end
|
|
44
71
|
end
|
|
File without changes
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
context "Object#blank?" do
|
|
4
|
+
specify "it should be true if the object responds true to empty?" do
|
|
5
|
+
[].blank?.should == true
|
|
6
|
+
{}.blank?.should == true
|
|
7
|
+
o = Object.new
|
|
8
|
+
def o.empty?; true; end
|
|
9
|
+
o.blank?.should == true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
specify "it should be false if the object doesn't respond true to empty?" do
|
|
13
|
+
[2].blank?.should == false
|
|
14
|
+
{1=>2}.blank?.should == false
|
|
15
|
+
Object.new.blank?.should == false
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context "Numeric#blank?" do
|
|
20
|
+
specify "it should always be false" do
|
|
21
|
+
1.blank?.should == false
|
|
22
|
+
0.blank?.should == false
|
|
23
|
+
-1.blank?.should == false
|
|
24
|
+
1.0.blank?.should == false
|
|
25
|
+
0.0.blank?.should == false
|
|
26
|
+
-1.0.blank?.should == false
|
|
27
|
+
10000000000000000.blank?.should == false
|
|
28
|
+
-10000000000000000.blank?.should == false
|
|
29
|
+
10000000000000000.0.blank?.should == false
|
|
30
|
+
-10000000000000000.0.blank?.should == false
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "NilClass#blank?" do
|
|
35
|
+
specify "it should always be true" do
|
|
36
|
+
nil.blank?.should == true
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context "TrueClass#blank?" do
|
|
41
|
+
specify "it should always be false" do
|
|
42
|
+
true.blank?.should == false
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context "FalseClass#blank?" do
|
|
47
|
+
specify "it should always be true" do
|
|
48
|
+
false.blank?.should == true
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "String#blank?" do
|
|
53
|
+
specify "it should be true if the string is empty" do
|
|
54
|
+
''.blank?.should == true
|
|
55
|
+
end
|
|
56
|
+
specify "it should be true if the string is composed of just whitespace" do
|
|
57
|
+
' '.blank?.should == true
|
|
58
|
+
"\r\n\t".blank?.should == true
|
|
59
|
+
(' '*4000).blank?.should == true
|
|
60
|
+
("\r\n\t"*4000).blank?.should == true
|
|
61
|
+
end
|
|
62
|
+
specify "it should be false if the string has any non whitespace characters" do
|
|
63
|
+
'1'.blank?.should == false
|
|
64
|
+
("\r\n\t"*4000 + 'a').blank?.should == false
|
|
65
|
+
("\r\na\t"*4000).blank?.should == false
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
|
2
|
+
|
|
3
|
+
describe Sequel::Model, "caching" do
|
|
4
|
+
before do
|
|
5
|
+
MODEL_DB.reset
|
|
6
|
+
|
|
7
|
+
@cache_class = Class.new(Hash) do
|
|
8
|
+
attr_accessor :ttl
|
|
9
|
+
def set(k, v, ttl); self[k] = v; @ttl = ttl; end
|
|
10
|
+
def get(k); self[k]; end
|
|
11
|
+
end
|
|
12
|
+
cache = @cache_class.new
|
|
13
|
+
@cache = cache
|
|
14
|
+
|
|
15
|
+
@c = Class.new(Sequel::Model(:items))
|
|
16
|
+
@c.class_eval do
|
|
17
|
+
plugin :caching, cache
|
|
18
|
+
def self.name; 'Item' end
|
|
19
|
+
|
|
20
|
+
columns :name, :id
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
$cache_dataset_row = {:name => 'sharon', :id => 1}
|
|
24
|
+
@dataset = @c.dataset
|
|
25
|
+
$sqls = []
|
|
26
|
+
@dataset.extend(Module.new {
|
|
27
|
+
def fetch_rows(sql)
|
|
28
|
+
$sqls << sql
|
|
29
|
+
yield $cache_dataset_row
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def update(values)
|
|
33
|
+
$sqls << update_sql(values)
|
|
34
|
+
$cache_dataset_row.merge!(values)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def delete
|
|
38
|
+
$sqls << delete_sql
|
|
39
|
+
end
|
|
40
|
+
})
|
|
41
|
+
@c2 = Class.new(@c) do
|
|
42
|
+
def self.name; 'SubItem' end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should set the model's cache store" do
|
|
47
|
+
@c.cache_store.should be(@cache)
|
|
48
|
+
@c2.cache_store.should be(@cache)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should have a default ttl of 3600" do
|
|
52
|
+
@c.cache_ttl.should == 3600
|
|
53
|
+
@c2.cache_ttl.should == 3600
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should take a ttl option" do
|
|
57
|
+
@c.plugin :caching, @cache, :ttl => 1234
|
|
58
|
+
@c.cache_ttl.should == 1234
|
|
59
|
+
Class.new(@c).cache_ttl.should == 1234
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should offer a set_cache_ttl method for setting the ttl" do
|
|
63
|
+
@c.cache_ttl.should == 3600
|
|
64
|
+
@c.set_cache_ttl 1234
|
|
65
|
+
@c.cache_ttl.should == 1234
|
|
66
|
+
Class.new(@c).cache_ttl.should == 1234
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should generate a cache key appropriate to the class" do
|
|
70
|
+
m = @c.new
|
|
71
|
+
m.values[:id] = 1
|
|
72
|
+
m.cache_key.should == "#{m.class}:1"
|
|
73
|
+
m = @c2.new
|
|
74
|
+
m.values[:id] = 1
|
|
75
|
+
m.cache_key.should == "#{m.class}:1"
|
|
76
|
+
|
|
77
|
+
# custom primary key
|
|
78
|
+
@c.set_primary_key :ttt
|
|
79
|
+
m = @c.new
|
|
80
|
+
m.values[:ttt] = 333
|
|
81
|
+
m.cache_key.should == "#{m.class}:333"
|
|
82
|
+
c = Class.new(@c)
|
|
83
|
+
m = c.new
|
|
84
|
+
m.values[:ttt] = 333
|
|
85
|
+
m.cache_key.should == "#{m.class}:333"
|
|
86
|
+
|
|
87
|
+
# composite primary key
|
|
88
|
+
@c.set_primary_key [:a, :b, :c]
|
|
89
|
+
m = @c.new
|
|
90
|
+
m.values[:a] = 123
|
|
91
|
+
m.values[:c] = 456
|
|
92
|
+
m.values[:b] = 789
|
|
93
|
+
m.cache_key.should == "#{m.class}:123,789,456"
|
|
94
|
+
c = Class.new(@c)
|
|
95
|
+
m = c.new
|
|
96
|
+
m.values[:a] = 123
|
|
97
|
+
m.values[:c] = 456
|
|
98
|
+
m.values[:b] = 789
|
|
99
|
+
m.cache_key.should == "#{m.class}:123,789,456"
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should raise error if attempting to generate cache_key and primary key value is null" do
|
|
103
|
+
m = @c.new
|
|
104
|
+
proc {m.cache_key}.should raise_error(Sequel::Error)
|
|
105
|
+
m.values[:id] = 1
|
|
106
|
+
proc {m.cache_key}.should_not raise_error(Sequel::Error)
|
|
107
|
+
|
|
108
|
+
m = @c2.new
|
|
109
|
+
proc {m.cache_key}.should raise_error(Sequel::Error)
|
|
110
|
+
m.values[:id] = 1
|
|
111
|
+
proc {m.cache_key}.should_not raise_error(Sequel::Error)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should not raise error if trying to save a new record" do
|
|
115
|
+
proc {@c.new(:name=>'blah').save}.should_not raise_error
|
|
116
|
+
proc {@c.create(:name=>'blah')}.should_not raise_error
|
|
117
|
+
proc {@c2.new(:name=>'blah').save}.should_not raise_error
|
|
118
|
+
proc {@c2.create(:name=>'blah')}.should_not raise_error
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "should set the cache when reading from the database" do
|
|
122
|
+
$sqls.should == []
|
|
123
|
+
@cache.should be_empty
|
|
124
|
+
|
|
125
|
+
m = @c[1]
|
|
126
|
+
$sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
|
|
127
|
+
m.values.should == $cache_dataset_row
|
|
128
|
+
@cache[m.cache_key].should == m
|
|
129
|
+
m2 = @c[1]
|
|
130
|
+
$sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
|
|
131
|
+
m2.should == m
|
|
132
|
+
m2.values.should == $cache_dataset_row
|
|
133
|
+
|
|
134
|
+
$sqls.clear
|
|
135
|
+
m = @c2[1]
|
|
136
|
+
$sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
|
|
137
|
+
m.values.should == $cache_dataset_row
|
|
138
|
+
@cache[m.cache_key].should == m
|
|
139
|
+
m2 = @c2[1]
|
|
140
|
+
$sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
|
|
141
|
+
m2.should == m
|
|
142
|
+
m2.values.should == $cache_dataset_row
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it "should delete the cache when writing to the database" do
|
|
146
|
+
m = @c[1]
|
|
147
|
+
@cache[m.cache_key].should == m
|
|
148
|
+
m.name = 'hey'
|
|
149
|
+
m.save
|
|
150
|
+
@cache.has_key?(m.cache_key).should be_false
|
|
151
|
+
$sqls.last.should == "UPDATE items SET name = 'hey', id = 1 WHERE (id = 1)"
|
|
152
|
+
|
|
153
|
+
m = @c2[1]
|
|
154
|
+
@cache[m.cache_key].should == m
|
|
155
|
+
m.name = 'hey'
|
|
156
|
+
m.save
|
|
157
|
+
@cache.has_key?(m.cache_key).should be_false
|
|
158
|
+
$sqls.last.should == "UPDATE items SET name = 'hey', id = 1 WHERE (id = 1)"
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "should delete the cache when deleting the record" do
|
|
162
|
+
m = @c[1]
|
|
163
|
+
@cache[m.cache_key].should == m
|
|
164
|
+
m.delete
|
|
165
|
+
@cache.has_key?(m.cache_key).should be_false
|
|
166
|
+
$sqls.last.should == "DELETE FROM items WHERE (id = 1)"
|
|
167
|
+
|
|
168
|
+
m = @c2[1]
|
|
169
|
+
@cache[m.cache_key].should == m
|
|
170
|
+
m.delete
|
|
171
|
+
@cache.has_key?(m.cache_key).should be_false
|
|
172
|
+
$sqls.last.should == "DELETE FROM items WHERE (id = 1)"
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it "should support #[] as a shortcut to #find with hash" do
|
|
176
|
+
m = @c[:id => 3]
|
|
177
|
+
@cache[m.cache_key].should be_nil
|
|
178
|
+
$sqls.last.should == "SELECT * FROM items WHERE (id = 3) LIMIT 1"
|
|
179
|
+
m = @c[1]
|
|
180
|
+
@cache[m.cache_key].should == m
|
|
181
|
+
$sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
|
|
182
|
+
"SELECT * FROM items WHERE (id = 1) LIMIT 1"]
|
|
183
|
+
@c[:id => 4]
|
|
184
|
+
$sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
|
|
185
|
+
"SELECT * FROM items WHERE (id = 1) LIMIT 1", \
|
|
186
|
+
"SELECT * FROM items WHERE (id = 4) LIMIT 1"]
|
|
187
|
+
|
|
188
|
+
$sqls.clear
|
|
189
|
+
m = @c2[:id => 3]
|
|
190
|
+
@cache[m.cache_key].should be_nil
|
|
191
|
+
$sqls.last.should == "SELECT * FROM items WHERE (id = 3) LIMIT 1"
|
|
192
|
+
m = @c2[1]
|
|
193
|
+
@cache[m.cache_key].should == m
|
|
194
|
+
$sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
|
|
195
|
+
"SELECT * FROM items WHERE (id = 1) LIMIT 1"]
|
|
196
|
+
@c2[:id => 4]
|
|
197
|
+
$sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
|
|
198
|
+
"SELECT * FROM items WHERE (id = 1) LIMIT 1", \
|
|
199
|
+
"SELECT * FROM items WHERE (id = 4) LIMIT 1"]
|
|
200
|
+
end
|
|
201
|
+
end
|
|
@@ -5,16 +5,6 @@ describe "Model hooks" do
|
|
|
5
5
|
MODEL_DB.reset
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
specify "should be definable using def <hook name>" do
|
|
9
|
-
c = Class.new(Sequel::Model) do
|
|
10
|
-
def before_save
|
|
11
|
-
"hi there"
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
c.new.before_save.should == 'hi there'
|
|
16
|
-
end
|
|
17
|
-
|
|
18
8
|
specify "should be definable using a block" do
|
|
19
9
|
$adds = []
|
|
20
10
|
c = Class.new(Sequel::Model)
|
|
@@ -201,7 +191,7 @@ describe "Model#after_initialize" do
|
|
|
201
191
|
end
|
|
202
192
|
|
|
203
193
|
describe "Model#before_create && Model#after_create" do
|
|
204
|
-
|
|
194
|
+
before do
|
|
205
195
|
MODEL_DB.reset
|
|
206
196
|
|
|
207
197
|
@c = Class.new(Sequel::Model(:items))
|
|
@@ -239,7 +229,7 @@ describe "Model#before_create && Model#after_create" do
|
|
|
239
229
|
end
|
|
240
230
|
|
|
241
231
|
describe "Model#before_update && Model#after_update" do
|
|
242
|
-
|
|
232
|
+
before do
|
|
243
233
|
MODEL_DB.reset
|
|
244
234
|
|
|
245
235
|
@c = Class.new(Sequel::Model(:items))
|
|
@@ -275,7 +265,7 @@ describe "Model#before_update && Model#after_update" do
|
|
|
275
265
|
end
|
|
276
266
|
|
|
277
267
|
describe "Model#before_save && Model#after_save" do
|
|
278
|
-
|
|
268
|
+
before do
|
|
279
269
|
MODEL_DB.reset
|
|
280
270
|
|
|
281
271
|
@c = Class.new(Sequel::Model(:items))
|
|
@@ -323,7 +313,7 @@ describe "Model#before_save && Model#after_save" do
|
|
|
323
313
|
end
|
|
324
314
|
|
|
325
315
|
describe "Model#before_destroy && Model#after_destroy" do
|
|
326
|
-
|
|
316
|
+
before do
|
|
327
317
|
MODEL_DB.reset
|
|
328
318
|
|
|
329
319
|
@c = Class.new(Sequel::Model(:items))
|
|
@@ -362,7 +352,7 @@ describe "Model#before_destroy && Model#after_destroy" do
|
|
|
362
352
|
end
|
|
363
353
|
|
|
364
354
|
describe "Model#before_validation && Model#after_validation" do
|
|
365
|
-
|
|
355
|
+
before do
|
|
366
356
|
MODEL_DB.reset
|
|
367
357
|
|
|
368
358
|
@c = Class.new(Sequel::Model(:items))
|
|
@@ -372,11 +362,6 @@ describe "Model#before_validation && Model#after_validation" do
|
|
|
372
362
|
def self.validate(o)
|
|
373
363
|
o.errors[:id] << 'not valid' unless o[:id] == 2233
|
|
374
364
|
end
|
|
375
|
-
|
|
376
|
-
def save!(*columns)
|
|
377
|
-
MODEL_DB << "CREATE BLAH"
|
|
378
|
-
self
|
|
379
|
-
end
|
|
380
365
|
columns :id
|
|
381
366
|
end
|
|
382
367
|
end
|
|
@@ -397,7 +382,7 @@ describe "Model#before_validation && Model#after_validation" do
|
|
|
397
382
|
@c.before_validation{MODEL_DB << "BLAH before"}
|
|
398
383
|
m = @c.load(:id => 2233)
|
|
399
384
|
m.save.should == m
|
|
400
|
-
MODEL_DB.sqls.should == ['BLAH before', 'BLAH after', '
|
|
385
|
+
MODEL_DB.sqls.should == ['BLAH before', 'BLAH after', 'UPDATE items SET id = 2233 WHERE (id = 2233)']
|
|
401
386
|
|
|
402
387
|
MODEL_DB.sqls.clear
|
|
403
388
|
m = @c.load(:id => 22)
|
|
@@ -422,7 +407,7 @@ describe "Model#before_validation && Model#after_validation" do
|
|
|
422
407
|
end
|
|
423
408
|
|
|
424
409
|
describe "Model.has_hooks?" do
|
|
425
|
-
|
|
410
|
+
before do
|
|
426
411
|
@c = Class.new(Sequel::Model(:items))
|
|
427
412
|
end
|
|
428
413
|
|
|
@@ -442,7 +427,7 @@ describe "Model.has_hooks?" do
|
|
|
442
427
|
end
|
|
443
428
|
|
|
444
429
|
describe "Model#add_hook_type" do
|
|
445
|
-
|
|
430
|
+
before do
|
|
446
431
|
class Foo < Sequel::Model(:items)
|
|
447
432
|
add_hook_type :before_bar, :after_bar
|
|
448
433
|
|
|
@@ -86,6 +86,9 @@ describe String::Inflections do
|
|
|
86
86
|
String.inflections.plurals.replace(@plurals)
|
|
87
87
|
String.inflections.singulars.replace(@singulars)
|
|
88
88
|
String.inflections.uncountables.replace(@uncountables)
|
|
89
|
+
Sequel.inflections.plurals.replace(@plurals)
|
|
90
|
+
Sequel.inflections.singulars.replace(@singulars)
|
|
91
|
+
Sequel.inflections.uncountables.replace(@uncountables)
|
|
89
92
|
end
|
|
90
93
|
|
|
91
94
|
it "should be possible to clear the list of singulars, plurals, and uncountables" do
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
2
2
|
|
|
3
3
|
context "Migration classes" do
|
|
4
|
-
|
|
4
|
+
before do
|
|
5
5
|
Sequel::Migration.descendants.clear
|
|
6
6
|
end
|
|
7
7
|
|
|
@@ -21,7 +21,7 @@ context "Migration classes" do
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
context "Migration#apply" do
|
|
24
|
-
|
|
24
|
+
before do
|
|
25
25
|
@c = Class.new do
|
|
26
26
|
define_method(:one) {|x| [1111, x]}
|
|
27
27
|
define_method(:two) {|x| [2222, x]}
|
|
@@ -129,7 +129,7 @@ MIGRATION_005 = %[
|
|
|
129
129
|
]
|
|
130
130
|
|
|
131
131
|
context "Sequel::Migrator" do
|
|
132
|
-
|
|
132
|
+
before do
|
|
133
133
|
@db = DummyMigrationDB.new
|
|
134
134
|
|
|
135
135
|
File.open('001_create_sessions.rb', 'w') {|f| f << MIGRATION_001}
|
|
@@ -140,7 +140,7 @@ context "Sequel::Migrator" do
|
|
|
140
140
|
@db[:schema_info].version = nil
|
|
141
141
|
end
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
after do
|
|
144
144
|
Object.send(:remove_const, "CreateSessions") if Object.const_defined?("CreateSessions")
|
|
145
145
|
Object.send(:remove_const, "CreateNodes") if Object.const_defined?("CreateNodes")
|
|
146
146
|
Object.send(:remove_const, "CreateUsers") if Object.const_defined?("CreateUsers")
|