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.
Files changed (162) hide show
  1. data/CHANGELOG +168 -0
  2. data/README.rdoc +77 -95
  3. data/Rakefile +100 -80
  4. data/bin/sequel +2 -1
  5. data/doc/advanced_associations.rdoc +23 -32
  6. data/doc/cheat_sheet.rdoc +23 -40
  7. data/doc/dataset_filtering.rdoc +6 -6
  8. data/doc/prepared_statements.rdoc +22 -22
  9. data/doc/release_notes/2.12.0.txt +534 -0
  10. data/doc/schema.rdoc +3 -1
  11. data/doc/sharding.rdoc +8 -8
  12. data/doc/virtual_rows.rdoc +65 -0
  13. data/lib/sequel.rb +1 -1
  14. data/lib/{sequel_core → sequel}/adapters/ado.rb +3 -3
  15. data/lib/{sequel_core → sequel}/adapters/db2.rb +0 -0
  16. data/lib/{sequel_core → sequel}/adapters/dbi.rb +1 -1
  17. data/lib/{sequel_core → sequel}/adapters/do.rb +9 -5
  18. data/lib/{sequel_core → sequel}/adapters/do/mysql.rb +1 -1
  19. data/lib/{sequel_core → sequel}/adapters/do/postgres.rb +1 -1
  20. data/lib/{sequel_core → sequel}/adapters/do/sqlite.rb +1 -1
  21. data/lib/{sequel_core → sequel}/adapters/firebird.rb +84 -80
  22. data/lib/{sequel_core → sequel}/adapters/informix.rb +1 -1
  23. data/lib/{sequel_core → sequel}/adapters/jdbc.rb +21 -14
  24. data/lib/{sequel_core → sequel}/adapters/jdbc/h2.rb +14 -13
  25. data/lib/{sequel_core → sequel}/adapters/jdbc/mysql.rb +1 -1
  26. data/lib/{sequel_core → sequel}/adapters/jdbc/oracle.rb +1 -1
  27. data/lib/{sequel_core → sequel}/adapters/jdbc/postgresql.rb +1 -1
  28. data/lib/{sequel_core → sequel}/adapters/jdbc/sqlite.rb +1 -1
  29. data/lib/{sequel_core → sequel}/adapters/mysql.rb +60 -39
  30. data/lib/{sequel_core → sequel}/adapters/odbc.rb +8 -4
  31. data/lib/{sequel_core → sequel}/adapters/openbase.rb +0 -0
  32. data/lib/{sequel_core → sequel}/adapters/oracle.rb +38 -7
  33. data/lib/{sequel_core → sequel}/adapters/postgres.rb +24 -24
  34. data/lib/{sequel_core → sequel}/adapters/shared/mssql.rb +5 -5
  35. data/lib/{sequel_core → sequel}/adapters/shared/mysql.rb +126 -71
  36. data/lib/{sequel_core → sequel}/adapters/shared/oracle.rb +7 -10
  37. data/lib/{sequel_core → sequel}/adapters/shared/postgres.rb +159 -125
  38. data/lib/{sequel_core → sequel}/adapters/shared/progress.rb +1 -2
  39. data/lib/{sequel_core → sequel}/adapters/shared/sqlite.rb +72 -67
  40. data/lib/{sequel_core → sequel}/adapters/sqlite.rb +11 -7
  41. data/lib/{sequel_core → sequel}/adapters/utils/date_format.rb +0 -0
  42. data/lib/{sequel_core → sequel}/adapters/utils/stored_procedures.rb +0 -0
  43. data/lib/{sequel_core → sequel}/adapters/utils/unsupported.rb +19 -0
  44. data/lib/{sequel_core → sequel}/connection_pool.rb +7 -5
  45. data/lib/sequel/core.rb +221 -0
  46. data/lib/{sequel_core → sequel}/core_sql.rb +91 -49
  47. data/lib/{sequel_core → sequel}/database.rb +264 -149
  48. data/lib/{sequel_core/schema/generator.rb → sequel/database/schema_generator.rb} +6 -2
  49. data/lib/{sequel_core/database/schema.rb → sequel/database/schema_methods.rb} +12 -12
  50. data/lib/sequel/database/schema_sql.rb +224 -0
  51. data/lib/{sequel_core → sequel}/dataset.rb +78 -236
  52. data/lib/{sequel_core → sequel}/dataset/convenience.rb +99 -61
  53. data/lib/{sequel_core/object_graph.rb → sequel/dataset/graph.rb} +16 -14
  54. data/lib/{sequel_core → sequel}/dataset/prepared_statements.rb +1 -1
  55. data/lib/{sequel_core → sequel}/dataset/sql.rb +150 -99
  56. data/lib/sequel/deprecated.rb +593 -0
  57. data/lib/sequel/deprecated_migration.rb +91 -0
  58. data/lib/sequel/exceptions.rb +48 -0
  59. data/lib/sequel/extensions/blank.rb +42 -0
  60. data/lib/{sequel_model → sequel/extensions}/inflector.rb +8 -1
  61. data/lib/{sequel_core → sequel/extensions}/migration.rb +1 -1
  62. data/lib/{sequel_core/dataset → sequel/extensions}/pagination.rb +0 -0
  63. data/lib/{sequel_core → sequel/extensions}/pretty_table.rb +7 -0
  64. data/lib/{sequel_core/dataset → sequel/extensions}/query.rb +7 -0
  65. data/lib/sequel/extensions/string_date_time.rb +47 -0
  66. data/lib/sequel/metaprogramming.rb +43 -0
  67. data/lib/sequel/model.rb +110 -0
  68. data/lib/sequel/model/associations.rb +1300 -0
  69. data/lib/sequel/model/base.rb +937 -0
  70. data/lib/sequel/model/deprecated.rb +204 -0
  71. data/lib/sequel/model/deprecated_hooks.rb +103 -0
  72. data/lib/sequel/model/deprecated_inflector.rb +335 -0
  73. data/lib/sequel/model/deprecated_validations.rb +388 -0
  74. data/lib/sequel/model/errors.rb +39 -0
  75. data/lib/{sequel_model → sequel/model}/exceptions.rb +4 -4
  76. data/lib/sequel/model/inflections.rb +208 -0
  77. data/lib/sequel/model/plugins.rb +76 -0
  78. data/lib/sequel/plugins/caching.rb +122 -0
  79. data/lib/sequel/plugins/hook_class_methods.rb +122 -0
  80. data/lib/sequel/plugins/schema.rb +53 -0
  81. data/lib/sequel/plugins/serialization.rb +117 -0
  82. data/lib/sequel/plugins/single_table_inheritance.rb +63 -0
  83. data/lib/sequel/plugins/validation_class_methods.rb +384 -0
  84. data/lib/sequel/plugins/validation_helpers.rb +150 -0
  85. data/lib/{sequel_core → sequel}/sql.rb +125 -190
  86. data/lib/{sequel_core → sequel}/version.rb +2 -1
  87. data/lib/sequel_core.rb +1 -172
  88. data/lib/sequel_model.rb +1 -91
  89. data/spec/adapters/firebird_spec.rb +5 -5
  90. data/spec/adapters/informix_spec.rb +1 -1
  91. data/spec/adapters/mysql_spec.rb +128 -42
  92. data/spec/adapters/oracle_spec.rb +47 -19
  93. data/spec/adapters/postgres_spec.rb +64 -52
  94. data/spec/adapters/spec_helper.rb +1 -1
  95. data/spec/adapters/sqlite_spec.rb +12 -17
  96. data/spec/{sequel_core → core}/connection_pool_spec.rb +10 -10
  97. data/spec/{sequel_core → core}/core_ext_spec.rb +19 -19
  98. data/spec/{sequel_core → core}/core_sql_spec.rb +68 -71
  99. data/spec/{sequel_core → core}/database_spec.rb +135 -99
  100. data/spec/{sequel_core → core}/dataset_spec.rb +398 -242
  101. data/spec/{sequel_core → core}/expression_filters_spec.rb +13 -13
  102. data/spec/core/migration_spec.rb +263 -0
  103. data/spec/{sequel_core → core}/object_graph_spec.rb +10 -10
  104. data/spec/{sequel_core → core}/pretty_table_spec.rb +2 -2
  105. data/spec/{sequel_core → core}/schema_generator_spec.rb +0 -0
  106. data/spec/{sequel_core → core}/schema_spec.rb +8 -10
  107. data/spec/{sequel_core → core}/spec_helper.rb +29 -2
  108. data/spec/{sequel_core → core}/version_spec.rb +0 -0
  109. data/spec/extensions/blank_spec.rb +67 -0
  110. data/spec/extensions/caching_spec.rb +201 -0
  111. data/spec/{sequel_model/hooks_spec.rb → extensions/hook_class_methods_spec.rb} +8 -23
  112. data/spec/{sequel_model → extensions}/inflector_spec.rb +3 -0
  113. data/spec/{sequel_core → extensions}/migration_spec.rb +4 -4
  114. data/spec/extensions/pagination_spec.rb +99 -0
  115. data/spec/extensions/pretty_table_spec.rb +91 -0
  116. data/spec/extensions/query_spec.rb +85 -0
  117. data/spec/{sequel_model → extensions}/schema_spec.rb +22 -1
  118. data/spec/extensions/serialization_spec.rb +109 -0
  119. data/spec/extensions/single_table_inheritance_spec.rb +53 -0
  120. data/spec/{sequel_model → extensions}/spec_helper.rb +13 -4
  121. data/spec/extensions/string_date_time_spec.rb +93 -0
  122. data/spec/{sequel_model/validations_spec.rb → extensions/validation_class_methods_spec.rb} +15 -103
  123. data/spec/extensions/validation_helpers_spec.rb +291 -0
  124. data/spec/integration/dataset_test.rb +31 -0
  125. data/spec/integration/eager_loader_test.rb +17 -30
  126. data/spec/integration/schema_test.rb +8 -5
  127. data/spec/integration/spec_helper.rb +17 -0
  128. data/spec/integration/transaction_test.rb +68 -0
  129. data/spec/{sequel_model → model}/association_reflection_spec.rb +0 -0
  130. data/spec/{sequel_model → model}/associations_spec.rb +23 -10
  131. data/spec/{sequel_model → model}/base_spec.rb +29 -20
  132. data/spec/{sequel_model → model}/caching_spec.rb +16 -14
  133. data/spec/{sequel_model → model}/dataset_methods_spec.rb +0 -0
  134. data/spec/{sequel_model → model}/eager_loading_spec.rb +8 -8
  135. data/spec/model/hooks_spec.rb +472 -0
  136. data/spec/model/inflector_spec.rb +126 -0
  137. data/spec/{sequel_model → model}/model_spec.rb +25 -20
  138. data/spec/model/plugins_spec.rb +142 -0
  139. data/spec/{sequel_model → model}/record_spec.rb +121 -62
  140. data/spec/model/schema_spec.rb +92 -0
  141. data/spec/model/spec_helper.rb +124 -0
  142. data/spec/model/validations_spec.rb +1080 -0
  143. metadata +136 -107
  144. data/lib/sequel_core/core_ext.rb +0 -217
  145. data/lib/sequel_core/dataset/callback.rb +0 -13
  146. data/lib/sequel_core/dataset/schema.rb +0 -15
  147. data/lib/sequel_core/deprecated.rb +0 -26
  148. data/lib/sequel_core/exceptions.rb +0 -44
  149. data/lib/sequel_core/schema.rb +0 -2
  150. data/lib/sequel_core/schema/sql.rb +0 -325
  151. data/lib/sequel_model/association_reflection.rb +0 -267
  152. data/lib/sequel_model/associations.rb +0 -499
  153. data/lib/sequel_model/base.rb +0 -539
  154. data/lib/sequel_model/caching.rb +0 -82
  155. data/lib/sequel_model/dataset_methods.rb +0 -26
  156. data/lib/sequel_model/eager_loading.rb +0 -370
  157. data/lib/sequel_model/hooks.rb +0 -101
  158. data/lib/sequel_model/plugins.rb +0 -62
  159. data/lib/sequel_model/record.rb +0 -568
  160. data/lib/sequel_model/schema.rb +0 -49
  161. data/lib/sequel_model/validations.rb +0 -429
  162. data/spec/sequel_model/plugins_spec.rb +0 -80
@@ -43,8 +43,8 @@ context "Blockless Ruby Filters" do
43
43
  it "should support = via Hash" do
44
44
  @d.l(:x => 100).should == '(x = 100)'
45
45
  @d.l(:x => 'a').should == '(x = \'a\')'
46
- @d.l(:x => true).should == '(x = \'t\')'
47
- @d.l(:x => false).should == '(x = \'f\')'
46
+ @d.l(:x => true).should == '(x IS TRUE)'
47
+ @d.l(:x => false).should == '(x IS FALSE)'
48
48
  @d.l(:x => nil).should == '(x IS NULL)'
49
49
  @d.l(:x => [1,2,3]).should == '(x IN (1, 2, 3))'
50
50
  end
@@ -52,8 +52,8 @@ context "Blockless Ruby Filters" do
52
52
  it "should support != via Hash#~" do
53
53
  @d.l(~{:x => 100}).should == '(x != 100)'
54
54
  @d.l(~{:x => 'a'}).should == '(x != \'a\')'
55
- @d.l(~{:x => true}).should == '(x != \'t\')'
56
- @d.l(~{:x => false}).should == '(x != \'f\')'
55
+ @d.l(~{:x => true}).should == '(x IS NOT TRUE)'
56
+ @d.l(~{:x => false}).should == '(x IS NOT FALSE)'
57
57
  @d.l(~{:x => nil}).should == '(x IS NOT NULL)'
58
58
  end
59
59
 
@@ -198,49 +198,49 @@ context "Blockless Ruby Filters" do
198
198
 
199
199
  it "should support hashes by ANDing the conditions" do
200
200
  @d.l(:x => 100, :y => 'a')[1...-1].split(' AND ').sort.should == ['(x = 100)', '(y = \'a\')']
201
- @d.l(:x => true, :y => false)[1...-1].split(' AND ').sort.should == ['(x = \'t\')', '(y = \'f\')']
201
+ @d.l(:x => true, :y => false)[1...-1].split(' AND ').sort.should == ['(x IS TRUE)', '(y IS FALSE)']
202
202
  @d.l(:x => nil, :y => [1,2,3])[1...-1].split(' AND ').sort.should == ['(x IS NULL)', '(y IN (1, 2, 3))']
203
203
  end
204
204
 
205
205
  it "should support sql_negate on hashes" do
206
206
  @d.l({:x => 100, :y => 'a'}.sql_negate)[1...-1].split(' AND ').sort.should == ['(x != 100)', '(y != \'a\')']
207
- @d.l({:x => true, :y => false}.sql_negate)[1...-1].split(' AND ').sort.should == ['(x != \'t\')', '(y != \'f\')']
207
+ @d.l({:x => true, :y => false}.sql_negate)[1...-1].split(' AND ').sort.should == ['(x IS NOT TRUE)', '(y IS NOT FALSE)']
208
208
  @d.l({:x => nil, :y => [1,2,3]}.sql_negate)[1...-1].split(' AND ').sort.should == ['(x IS NOT NULL)', '(y NOT IN (1, 2, 3))']
209
209
  end
210
210
 
211
211
  it "should support ~ on hashes" do
212
212
  @d.l(~{:x => 100, :y => 'a'})[1...-1].split(' OR ').sort.should == ['(x != 100)', '(y != \'a\')']
213
- @d.l(~{:x => true, :y => false})[1...-1].split(' OR ').sort.should == ['(x != \'t\')', '(y != \'f\')']
213
+ @d.l(~{:x => true, :y => false})[1...-1].split(' OR ').sort.should == ['(x IS NOT TRUE)', '(y IS NOT FALSE)']
214
214
  @d.l(~{:x => nil, :y => [1,2,3]})[1...-1].split(' OR ').sort.should == ['(x IS NOT NULL)', '(y NOT IN (1, 2, 3))']
215
215
  end
216
216
 
217
217
  it "should support sql_or on hashes" do
218
218
  @d.l({:x => 100, :y => 'a'}.sql_or)[1...-1].split(' OR ').sort.should == ['(x = 100)', '(y = \'a\')']
219
- @d.l({:x => true, :y => false}.sql_or)[1...-1].split(' OR ').sort.should == ['(x = \'t\')', '(y = \'f\')']
219
+ @d.l({:x => true, :y => false}.sql_or)[1...-1].split(' OR ').sort.should == ['(x IS TRUE)', '(y IS FALSE)']
220
220
  @d.l({:x => nil, :y => [1,2,3]}.sql_or)[1...-1].split(' OR ').sort.should == ['(x IS NULL)', '(y IN (1, 2, 3))']
221
221
  end
222
222
 
223
223
  it "should support arrays with all two pairs the same as hashes" do
224
224
  @d.l([[:x, 100],[:y, 'a']]).should == '((x = 100) AND (y = \'a\'))'
225
- @d.l([[:x, true], [:y, false]]).should == '((x = \'t\') AND (y = \'f\'))'
225
+ @d.l([[:x, true], [:y, false]]).should == '((x IS TRUE) AND (y IS FALSE))'
226
226
  @d.l([[:x, nil], [:y, [1,2,3]]]).should == '((x IS NULL) AND (y IN (1, 2, 3)))'
227
227
  end
228
228
 
229
229
  it "should support sql_negate on arrays with all two pairs" do
230
230
  @d.l([[:x, 100],[:y, 'a']].sql_negate).should == '((x != 100) AND (y != \'a\'))'
231
- @d.l([[:x, true], [:y, false]].sql_negate).should == '((x != \'t\') AND (y != \'f\'))'
231
+ @d.l([[:x, true], [:y, false]].sql_negate).should == '((x IS NOT TRUE) AND (y IS NOT FALSE))'
232
232
  @d.l([[:x, nil], [:y, [1,2,3]]].sql_negate).should == '((x IS NOT NULL) AND (y NOT IN (1, 2, 3)))'
233
233
  end
234
234
 
235
235
  it "should support ~ on arrays with all two pairs" do
236
236
  @d.l(~[[:x, 100],[:y, 'a']]).should == '((x != 100) OR (y != \'a\'))'
237
- @d.l(~[[:x, true], [:y, false]]).should == '((x != \'t\') OR (y != \'f\'))'
237
+ @d.l(~[[:x, true], [:y, false]]).should == '((x IS NOT TRUE) OR (y IS NOT FALSE))'
238
238
  @d.l(~[[:x, nil], [:y, [1,2,3]]]).should == '((x IS NOT NULL) OR (y NOT IN (1, 2, 3)))'
239
239
  end
240
240
 
241
241
  it "should support sql_or on arrays with all two pairs" do
242
242
  @d.l([[:x, 100],[:y, 'a']].sql_or).should == '((x = 100) OR (y = \'a\'))'
243
- @d.l([[:x, true], [:y, false]].sql_or).should == '((x = \'t\') OR (y = \'f\'))'
243
+ @d.l([[:x, true], [:y, false]].sql_or).should == '((x IS TRUE) OR (y IS FALSE))'
244
244
  @d.l([[:x, nil], [:y, [1,2,3]]].sql_or).should == '((x IS NULL) OR (y IN (1, 2, 3)))'
245
245
  end
246
246
 
@@ -249,7 +249,7 @@ context "Blockless Ruby Filters" do
249
249
  @d.lit([:x].sql_string_join(', ')).should == '(x)'
250
250
  @d.lit([:x, :y].sql_string_join).should == '(x || y)'
251
251
  @d.lit([:x, :y].sql_string_join(', ')).should == "(x || ', ' || y)"
252
- @d.lit([:x.sql_function(1), :y|1].sql_string_join).should == '(x(1) || y[1])'
252
+ @d.lit([:x.sql_function(1), :y.sql_subscript(1)].sql_string_join).should == '(x(1) || y[1])'
253
253
  @d.lit([:x.sql_function(1), 'y.z'.lit].sql_string_join(', ')).should == "(x(1) || ', ' || y.z)"
254
254
  @d.lit([:x, 1, :y].sql_string_join).should == "(x || '1' || y)"
255
255
  @d.lit([:x, 1, :y].sql_string_join(', ')).should == "(x || ', ' || '1' || ', ' || y)"
@@ -0,0 +1,263 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ context "Migration classes" do
4
+ before do
5
+ deprec{Sequel::Migration.descendants.clear}
6
+ end
7
+
8
+ deprec_specify "should be registred in Migration.descendants" do
9
+ @class = Class.new(Sequel::Migration)
10
+
11
+ Sequel::Migration.descendants.should == [@class]
12
+ end
13
+
14
+ deprec_specify "should be registered in the right order" do
15
+ @c1 = Class.new(Sequel::Migration)
16
+ @c2 = Class.new(Sequel::Migration)
17
+ @c3 = Class.new(Sequel::Migration)
18
+
19
+ Sequel::Migration.descendants.should == [@c1, @c2, @c3]
20
+ end
21
+ end
22
+
23
+ context "Migration#apply" do
24
+ before do
25
+ @c = Class.new do
26
+ define_method(:one) {|x| [1111, x]}
27
+ define_method(:two) {|x| [2222, x]}
28
+ end
29
+ @db = @c.new
30
+
31
+ deprec do
32
+ @migration = Class.new(Sequel::Migration) do
33
+ define_method(:up) {one(3333)}
34
+ define_method(:down) {two(4444)}
35
+ end
36
+ end
37
+ end
38
+
39
+ deprec_specify "should raise for an invalid direction" do
40
+ proc {@migration.apply(@db, :hahaha)}.should raise_error(ArgumentError)
41
+ end
42
+
43
+ deprec_specify "should apply the up direction correctly" do
44
+ @migration.apply(@db, :up).should == [1111, 3333]
45
+ end
46
+
47
+ deprec_specify "should apply the down direction correctly" do
48
+ @migration.apply(@db, :down).should == [2222, 4444]
49
+ end
50
+ end
51
+
52
+ class DummyMigrationDataset
53
+ attr_reader :from
54
+
55
+ def initialize(x); @from = x; end
56
+
57
+ @@version = nil
58
+
59
+ def version; @@version; end
60
+ def version=(x); @@version = x; end
61
+ def first; @@version ? {:version => @@version} : nil; end
62
+ def update(h); @@version = h[:version]; end
63
+ def <<(h); @@version = h[:version]; end
64
+ end
65
+
66
+ class DummyMigrationDB
67
+ attr_reader :creates, :drops, :table_created
68
+
69
+ def initialize
70
+ @creates = []
71
+ @drops = []
72
+ end
73
+
74
+ def create(x); @creates << x; end
75
+ def drop(x); @drops << x; end
76
+
77
+ def [](x); DummyMigrationDataset.new(x); end
78
+
79
+ def create_table(x); raise if @table_created == x; @table_created = x; end
80
+ def table_exists?(x); @table_created == x; end
81
+
82
+ def transaction; yield; end
83
+ end
84
+
85
+ MIGRATION_001 = %[
86
+ class CreateSessions < Sequel::Migration
87
+ def up
88
+ create(1111)
89
+ end
90
+
91
+ def down
92
+ drop(1111)
93
+ end
94
+ end
95
+ ]
96
+
97
+ MIGRATION_002 = %[
98
+ class CreateNodes < Sequel::Migration
99
+ def up
100
+ create(2222)
101
+ end
102
+
103
+ def down
104
+ drop(2222)
105
+ end
106
+ end
107
+ ]
108
+
109
+ MIGRATION_003 = %[
110
+ class CreateUsers < Sequel::Migration
111
+ def up
112
+ create(3333)
113
+ end
114
+
115
+ def down
116
+ drop(3333)
117
+ end
118
+ end
119
+ ]
120
+
121
+ MIGRATION_005 = %[
122
+ class CreateAttributes < Sequel::Migration
123
+ def up
124
+ create(5555)
125
+ end
126
+
127
+ def down
128
+ drop(5555)
129
+ end
130
+ end
131
+ ]
132
+
133
+ context "Sequel::Migrator" do
134
+ before do
135
+ @db = DummyMigrationDB.new
136
+
137
+ File.open('001_create_sessions.rb', 'w') {|f| f << MIGRATION_001}
138
+ File.open('002_create_nodes.rb', 'w') {|f| f << MIGRATION_002}
139
+ File.open('003_create_users.rb', 'w') {|f| f << MIGRATION_003}
140
+ File.open('005_create_attributes.rb', 'w') {|f| f << MIGRATION_005}
141
+
142
+ @db[:schema_info].version = nil
143
+ end
144
+
145
+ after do
146
+ Object.send(:remove_const, "CreateSessions") if Object.const_defined?("CreateSessions")
147
+ Object.send(:remove_const, "CreateNodes") if Object.const_defined?("CreateNodes")
148
+ Object.send(:remove_const, "CreateUsers") if Object.const_defined?("CreateUsers")
149
+ Object.send(:remove_const, "CreateAttributes") if Object.const_defined?("CreateAttributes")
150
+
151
+ File.delete('001_create_sessions.rb')
152
+ File.delete('002_create_nodes.rb')
153
+ File.delete('003_create_users.rb')
154
+ File.delete('005_create_attributes.rb')
155
+ end
156
+
157
+ deprec_specify "should return the list of files for a specified version range" do
158
+ Sequel::Migrator.migration_files('.', 1..1).should == \
159
+ ['./001_create_sessions.rb']
160
+
161
+ Sequel::Migrator.migration_files('.', 1..3).should == \
162
+ ['./001_create_sessions.rb', './002_create_nodes.rb', './003_create_users.rb']
163
+
164
+ Sequel::Migrator.migration_files('.', 3..5).should == \
165
+ ['./003_create_users.rb', './005_create_attributes.rb']
166
+
167
+ Sequel::Migrator.migration_files('.', 7..8).should == []
168
+ end
169
+
170
+ deprec_specify "should return the latest version available" do
171
+ Sequel::Migrator.latest_migration_version('.').should == 5
172
+ end
173
+
174
+ deprec_specify "should load the migration classes for the specified range" do
175
+ Sequel::Migrator.migration_classes('.', 3, 0, :up).should == \
176
+ [CreateSessions, CreateNodes, CreateUsers]
177
+ end
178
+
179
+ deprec_specify "should load the migration classes for the specified range" do
180
+ Sequel::Migrator.migration_classes('.', 0, 5, :down).should == \
181
+ [CreateAttributes, CreateUsers, CreateNodes, CreateSessions]
182
+ end
183
+
184
+ deprec_specify "should start from current + 1 for the up direction" do
185
+ Sequel::Migrator.migration_classes('.', 3, 1, :up).should == \
186
+ [CreateNodes, CreateUsers]
187
+ end
188
+
189
+ deprec_specify "should end on current + 1 for the down direction" do
190
+ Sequel::Migrator.migration_classes('.', 2, 5, :down).should == \
191
+ [CreateAttributes, CreateUsers]
192
+ end
193
+
194
+ deprec_specify "should automatically create the schema_info table" do
195
+ @db.table_exists?(:schema_info).should be_false
196
+ Sequel::Migrator.schema_info_dataset(@db)
197
+ @db.table_exists?(:schema_info).should be_true
198
+
199
+ # should not raise if table already exists
200
+ proc {Sequel::Migrator.schema_info_dataset(@db)}.should_not raise_error
201
+ end
202
+
203
+ deprec_specify "should return a dataset for the schema_info table" do
204
+ d = Sequel::Migrator.schema_info_dataset(@db)
205
+ d.from.should == :schema_info
206
+ end
207
+
208
+ deprec_specify "should get the migration version stored in the database" do
209
+ # default is 0
210
+ Sequel::Migrator.get_current_migration_version(@db).should == 0
211
+
212
+ Sequel::Migrator.schema_info_dataset(@db) << {:version => 4321}
213
+
214
+ Sequel::Migrator.get_current_migration_version(@db).should == 4321
215
+ end
216
+
217
+ deprec_specify "should set the migration version stored in the database" do
218
+ Sequel::Migrator.get_current_migration_version(@db).should == 0
219
+ Sequel::Migrator.set_current_migration_version(@db, 6666)
220
+ Sequel::Migrator.get_current_migration_version(@db).should == 6666
221
+ end
222
+
223
+ deprec_specify "should apply migrations correctly in the up direction" do
224
+ Sequel::Migrator.apply(@db, '.', 3, 2)
225
+ @db.creates.should == [3333]
226
+
227
+ Sequel::Migrator.get_current_migration_version(@db).should == 3
228
+
229
+ Sequel::Migrator.apply(@db, '.', 5)
230
+ @db.creates.should == [3333, 5555]
231
+
232
+ Sequel::Migrator.get_current_migration_version(@db).should == 5
233
+ end
234
+
235
+ deprec_specify "should apply migrations correctly in the down direction" do
236
+ Sequel::Migrator.apply(@db, '.', 1, 5)
237
+ @db.drops.should == [5555, 3333, 2222]
238
+
239
+ Sequel::Migrator.get_current_migration_version(@db).should == 1
240
+ end
241
+
242
+ deprec_specify "should apply migrations up to the latest version if no target is given" do
243
+ Sequel::Migrator.apply(@db, '.')
244
+ @db.creates.should == [1111, 2222, 3333, 5555]
245
+
246
+ Sequel::Migrator.get_current_migration_version(@db).should == 5
247
+ end
248
+
249
+ deprec_specify "should apply migrations down to 0 version correctly" do
250
+ Sequel::Migrator.apply(@db, '.', 0, 5)
251
+ @db.drops.should == [5555, 3333, 2222, 1111]
252
+
253
+ Sequel::Migrator.get_current_migration_version(@db).should == 0
254
+ end
255
+
256
+ deprec_specify "should return the target version" do
257
+ Sequel::Migrator.apply(@db, '.', 3, 2).should == 3
258
+
259
+ Sequel::Migrator.apply(@db, '.', 0).should == 0
260
+
261
+ Sequel::Migrator.apply(@db, '.').should == 5
262
+ end
263
+ end
@@ -206,6 +206,14 @@ describe Sequel::Dataset, " graphing" do
206
206
  results[3].should == {:points=>{:id=>3, :x=>5, :y=>6}, :lines=>{:id=>7, :x=>5, :y=>8, :graph_id=>9}, :graphs=>{:id=>9, :name=>10, :x=>10, :y=>11, :lines_x=>12}}
207
207
  end
208
208
 
209
+ it "#graph_each should not give a nil value instead of a hash when any value for a table is false" do
210
+ ds = @ds1.graph(@ds2, :x=>:id)
211
+ def ds.fetch_rows(sql, &block)
212
+ block.call(:id=>1,:x=>2,:y=>3,:lines_id=>nil,:lines_x=>false,:lines_y=>nil,:graph_id=>nil)
213
+ end
214
+ ds.all.should == [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>nil, :x=>false, :y=>nil, :graph_id=>nil}}]
215
+ end
216
+
209
217
  it "#graph_each should not included tables graphed with the :select => false option in the result set" do
210
218
  ds = @ds1.graph(:lines, {:x=>:id}, :select=>false).graph(:graphs, :id=>:graph_id)
211
219
  def ds.fetch_rows(sql, &block)
@@ -250,23 +258,15 @@ describe Sequel::Dataset, " graphing" do
250
258
  results.first.should == {:points=>{:z1=>2}, :lines=>{:z2=>3}}
251
259
  end
252
260
 
253
- it "#graph_each should run the row_proc and transform for graphed datasets" do
261
+ it "#graph_each should run the row_proc for graphed datasets" do
254
262
  @ds1.row_proc = proc{|h| h.keys.each{|k| h[k] *= 2}; h}
255
263
  @ds2.row_proc = proc{|h| h.keys.each{|k| h[k] *= 3}; h}
256
- @ds1.transform(:x=>[
257
- proc{|v| 123},
258
- proc{|v| 123}
259
- ])
260
- @ds2.transform(:x=>[
261
- proc{|v| 321},
262
- proc{|v| 321}
263
- ])
264
264
  ds = @ds1.graph(@ds2, :x=>:id)
265
265
  def ds.fetch_rows(sql, &block)
266
266
  yield({:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7})
267
267
  end
268
268
  results = ds.all
269
269
  results.length.should == 1
270
- results.first.should == {:points=>{:id=>2, :x=>246, :y=>6}, :lines=>{:id=>12, :x=>963, :y=>18, :graph_id=>21}}
270
+ results.first.should == {:points=>{:id=>2, :x=>4, :y=>6}, :lines=>{:id=>12, :x=>15, :y=>18, :graph_id=>21}}
271
271
  end
272
272
  end
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
3
3
  require 'stringio'
4
4
 
5
5
  context "PrettyTable" do
6
- setup do
6
+ before do
7
7
  @data1 = [
8
8
  {:x => 3, :y => 4}
9
9
  ]
@@ -24,7 +24,7 @@ context "PrettyTable" do
24
24
  $stdout = @output
25
25
  end
26
26
 
27
- teardown do
27
+ after do
28
28
  $stdout = @orig_stdout
29
29
  end
30
30
 
File without changes
@@ -1,7 +1,7 @@
1
1
  require File.join(File.dirname(__FILE__), 'spec_helper')
2
2
 
3
3
  context "DB#create_table" do
4
- setup do
4
+ before do
5
5
  @db = SchemaDummyDatabase.new
6
6
  end
7
7
 
@@ -492,7 +492,7 @@ context "DB#create_table" do
492
492
  end
493
493
 
494
494
  context "DB#create_table!" do
495
- setup do
495
+ before do
496
496
  @db = SchemaDummyDatabase.new
497
497
  end
498
498
 
@@ -503,7 +503,7 @@ context "DB#create_table!" do
503
503
  end
504
504
 
505
505
  context "DB#drop_table" do
506
- setup do
506
+ before do
507
507
  @db = SchemaDummyDatabase.new
508
508
  end
509
509
 
@@ -514,7 +514,7 @@ context "DB#drop_table" do
514
514
  end
515
515
 
516
516
  context "DB#alter_table" do
517
- setup do
517
+ before do
518
518
  @db = SchemaDummyDatabase.new
519
519
  end
520
520
 
@@ -680,7 +680,7 @@ context "DB#alter_table" do
680
680
  end
681
681
 
682
682
  context "Schema Parser" do
683
- setup do
683
+ before do
684
684
  @sqls = []
685
685
  @db = Sequel::Database.new
686
686
  end
@@ -710,7 +710,7 @@ context "Schema Parser" do
710
710
  @sqls.should == ['x', 'x']
711
711
  end
712
712
 
713
- specify "should parse the schema correctly for all tables" do
713
+ deprec_specify "should parse the schema correctly for all tables" do
714
714
  sqls = @sqls
715
715
  proc{@db.schema}.should raise_error(Sequel::Error)
716
716
  @db.meta_def(:tables){[:x]}
@@ -732,14 +732,12 @@ context "Schema Parser" do
732
732
  end
733
733
  s1 = @db.schema(:x)
734
734
  s1.should == [['x', {:db_type=>'x'}]]
735
- @db.schema[:x].object_id.should == s1.object_id
735
+ @db.schema(:x).object_id.should == s1.object_id
736
736
  @db.schema(:x.identifier).object_id.should == s1.object_id
737
- @db.schema[:x.identifier].object_id.should == s1.object_id
738
737
  s2 = @db.schema(:x__y)
739
738
  s2.should == [['y', {:db_type=>'y'}]]
740
- @db.schema[:x__y].object_id.should == s2.object_id
739
+ @db.schema(:x__y).object_id.should == s2.object_id
741
740
  @db.schema(:y.qualify(:x)).object_id.should == s2.object_id
742
- @db.schema[:y.qualify(:x)].object_id.should == s2.object_id
743
741
  end
744
742
 
745
743
  specify "should correctly parse all supported data types" do