sequel 3.4.0 → 3.5.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 (93) hide show
  1. data/CHANGELOG +84 -0
  2. data/Rakefile +1 -1
  3. data/doc/cheat_sheet.rdoc +5 -2
  4. data/doc/opening_databases.rdoc +2 -0
  5. data/doc/release_notes/3.5.0.txt +510 -0
  6. data/lib/sequel/adapters/ado.rb +3 -1
  7. data/lib/sequel/adapters/ado/mssql.rb +2 -2
  8. data/lib/sequel/adapters/do.rb +2 -11
  9. data/lib/sequel/adapters/do/mysql.rb +7 -0
  10. data/lib/sequel/adapters/do/postgres.rb +2 -2
  11. data/lib/sequel/adapters/firebird.rb +3 -3
  12. data/lib/sequel/adapters/informix.rb +3 -3
  13. data/lib/sequel/adapters/jdbc/h2.rb +3 -3
  14. data/lib/sequel/adapters/jdbc/mssql.rb +7 -0
  15. data/lib/sequel/adapters/mysql.rb +60 -21
  16. data/lib/sequel/adapters/odbc.rb +1 -1
  17. data/lib/sequel/adapters/openbase.rb +3 -3
  18. data/lib/sequel/adapters/oracle.rb +1 -5
  19. data/lib/sequel/adapters/postgres.rb +3 -3
  20. data/lib/sequel/adapters/shared/mssql.rb +142 -33
  21. data/lib/sequel/adapters/shared/mysql.rb +54 -31
  22. data/lib/sequel/adapters/shared/oracle.rb +17 -6
  23. data/lib/sequel/adapters/shared/postgres.rb +7 -7
  24. data/lib/sequel/adapters/shared/progress.rb +3 -3
  25. data/lib/sequel/adapters/shared/sqlite.rb +3 -17
  26. data/lib/sequel/connection_pool.rb +4 -6
  27. data/lib/sequel/core.rb +29 -113
  28. data/lib/sequel/database.rb +14 -12
  29. data/lib/sequel/dataset.rb +8 -21
  30. data/lib/sequel/dataset/convenience.rb +1 -1
  31. data/lib/sequel/dataset/graph.rb +9 -2
  32. data/lib/sequel/dataset/sql.rb +170 -104
  33. data/lib/sequel/exceptions.rb +3 -0
  34. data/lib/sequel/extensions/looser_typecasting.rb +21 -0
  35. data/lib/sequel/extensions/named_timezones.rb +61 -0
  36. data/lib/sequel/extensions/schema_dumper.rb +7 -1
  37. data/lib/sequel/extensions/sql_expr.rb +122 -0
  38. data/lib/sequel/extensions/string_date_time.rb +4 -4
  39. data/lib/sequel/extensions/thread_local_timezones.rb +48 -0
  40. data/lib/sequel/model/associations.rb +105 -45
  41. data/lib/sequel/model/base.rb +37 -28
  42. data/lib/sequel/plugins/active_model.rb +35 -0
  43. data/lib/sequel/plugins/association_dependencies.rb +96 -0
  44. data/lib/sequel/plugins/class_table_inheritance.rb +214 -0
  45. data/lib/sequel/plugins/force_encoding.rb +61 -0
  46. data/lib/sequel/plugins/many_through_many.rb +32 -11
  47. data/lib/sequel/plugins/nested_attributes.rb +7 -2
  48. data/lib/sequel/plugins/subclasses.rb +45 -0
  49. data/lib/sequel/plugins/touch.rb +118 -0
  50. data/lib/sequel/plugins/typecast_on_load.rb +61 -0
  51. data/lib/sequel/sql.rb +31 -30
  52. data/lib/sequel/timezones.rb +161 -0
  53. data/lib/sequel/version.rb +1 -1
  54. data/spec/adapters/mssql_spec.rb +262 -0
  55. data/spec/adapters/mysql_spec.rb +46 -8
  56. data/spec/adapters/postgres_spec.rb +6 -3
  57. data/spec/adapters/spec_helper.rb +21 -0
  58. data/spec/adapters/sqlite_spec.rb +1 -1
  59. data/spec/core/connection_pool_spec.rb +1 -1
  60. data/spec/core/database_spec.rb +27 -1
  61. data/spec/core/dataset_spec.rb +63 -1
  62. data/spec/core/object_graph_spec.rb +1 -1
  63. data/spec/core/schema_spec.rb +1 -0
  64. data/spec/extensions/active_model_spec.rb +47 -0
  65. data/spec/extensions/association_dependencies_spec.rb +108 -0
  66. data/spec/extensions/class_table_inheritance_spec.rb +252 -0
  67. data/spec/extensions/force_encoding_spec.rb +75 -0
  68. data/spec/extensions/looser_typecasting_spec.rb +39 -0
  69. data/spec/extensions/many_through_many_spec.rb +60 -2
  70. data/spec/extensions/named_timezones_spec.rb +72 -0
  71. data/spec/extensions/nested_attributes_spec.rb +29 -1
  72. data/spec/extensions/schema_dumper_spec.rb +10 -0
  73. data/spec/extensions/spec_helper.rb +1 -1
  74. data/spec/extensions/sql_expr_spec.rb +89 -0
  75. data/spec/extensions/subclasses_spec.rb +52 -0
  76. data/spec/extensions/thread_local_timezones_spec.rb +45 -0
  77. data/spec/extensions/touch_spec.rb +155 -0
  78. data/spec/extensions/typecast_on_load_spec.rb +60 -0
  79. data/spec/integration/database_test.rb +8 -0
  80. data/spec/integration/dataset_test.rb +9 -9
  81. data/spec/integration/plugin_test.rb +139 -0
  82. data/spec/integration/schema_test.rb +7 -7
  83. data/spec/integration/spec_helper.rb +32 -1
  84. data/spec/integration/timezone_test.rb +3 -3
  85. data/spec/integration/transaction_test.rb +1 -1
  86. data/spec/integration/type_test.rb +6 -6
  87. data/spec/model/association_reflection_spec.rb +18 -0
  88. data/spec/model/associations_spec.rb +169 -9
  89. data/spec/model/base_spec.rb +2 -0
  90. data/spec/model/eager_loading_spec.rb +82 -2
  91. data/spec/model/model_spec.rb +8 -1
  92. data/spec/model/record_spec.rb +52 -9
  93. metadata +33 -23
@@ -350,6 +350,8 @@ describe Sequel::Model, ".[] optimization" do
350
350
  @c.simple_pk.should == nil
351
351
  @c.set_primary_key :b, :a
352
352
  @c.simple_pk.should == nil
353
+ @c.set_primary_key [:b, :a]
354
+ @c.simple_pk.should == nil
353
355
  end
354
356
 
355
357
  it "should have simple table set if passed a Symbol to set_dataset" do
@@ -314,7 +314,7 @@ describe Sequel::Model, "#eager" do
314
314
  a = EagerBand.eager(:graph_members).all
315
315
  a.should == [EagerBand.load(:id=>2)]
316
316
  MODEL_DB.sqls.should == ['SELECT * FROM bands',
317
- 'SELECT members.id, bands.id AS bands_id, bands.p_k, bm.band_id AS x_foreign_key_x FROM members INNER JOIN bm ON ((bm.member_id = members.id) AND (bm.band_id IN (2))) LEFT OUTER JOIN bm AS bm_0 ON (bm_0.member_id = members.id) LEFT OUTER JOIN bands ON (bands.id = bm_0.band_id) ORDER BY bands.id']
317
+ 'SELECT members.id, bands.id AS bands_id, bands.p_k, bm.band_id AS x_foreign_key_x FROM (SELECT members.* FROM members INNER JOIN bm ON ((bm.member_id = members.id) AND (bm.band_id IN (2)))) AS members LEFT OUTER JOIN bm AS bm_0 ON (bm_0.member_id = members.id) LEFT OUTER JOIN bands ON (bands.id = bm_0.band_id) ORDER BY bands.id']
318
318
  a = a.first
319
319
  a.graph_members.should == [EagerBandMember.load(:id=>5)]
320
320
  a.graph_members.first.bands.should == [EagerBand.load(:id=>2, :p_k=>6), EagerBand.load(:id=>3, :p_k=>6)]
@@ -363,7 +363,7 @@ describe Sequel::Model, "#eager" do
363
363
  })
364
364
  a = EagerBand.load(:id=>2)
365
365
  a.graph_members.should == [EagerBandMember.load(:id=>5)]
366
- MODEL_DB.sqls.should == ['SELECT members.id, bands.id AS bands_id, bands.p_k FROM members INNER JOIN bm ON ((bm.member_id = members.id) AND (bm.band_id = 2)) LEFT OUTER JOIN bm AS bm_0 ON (bm_0.member_id = members.id) LEFT OUTER JOIN bands ON (bands.id = bm_0.band_id) ORDER BY bands.id']
366
+ MODEL_DB.sqls.should == ['SELECT members.id, bands.id AS bands_id, bands.p_k FROM (SELECT members.* FROM members INNER JOIN bm ON ((bm.member_id = members.id) AND (bm.band_id = 2))) AS members LEFT OUTER JOIN bm AS bm_0 ON (bm_0.member_id = members.id) LEFT OUTER JOIN bands ON (bands.id = bm_0.band_id) ORDER BY bands.id']
367
367
  a.graph_members.first.bands.should == [EagerBand.load(:id=>2, :p_k=>6), EagerBand.load(:id=>3, :p_k=>6)]
368
368
  MODEL_DB.sqls.length.should == 1
369
369
  end
@@ -504,7 +504,50 @@ describe Sequel::Model, "#eager" do
504
504
  as.length.should == 1
505
505
  as.first.special_tracks.should == [EagerTrack.load(:album_id=>2, :id=>1)]
506
506
  end
507
+
508
+ it "should respect the many_to_one association's composite keys" do
509
+ EagerAlbum.many_to_one :special_band, :class=>:EagerBand, :primary_key=>[:id, :p_k], :key=>[:band_id, :id]
510
+ EagerBand.dataset.extend(Module.new {
511
+ def fetch_rows(sql)
512
+ MODEL_DB.sqls << sql
513
+ yield({:p_k=>1, :id=>2})
514
+ end
515
+ })
516
+ as = EagerAlbum.eager(:special_band).all
517
+ MODEL_DB.sqls.should == ['SELECT * FROM albums', "SELECT * FROM bands WHERE ((bands.id, bands.p_k) IN ((2, 1)))"]
518
+ as.length.should == 1
519
+ as.first.special_band.should == EagerBand.load(:p_k=>1, :id=>2)
520
+ end
521
+
522
+ it "should respect the one_to_many association's composite keys" do
523
+ EagerAlbum.one_to_many :special_tracks, :class=>:EagerTrack, :primary_key=>[:band_id, :id], :key=>[:id, :album_id]
524
+ EagerTrack.dataset.extend(Module.new {
525
+ def fetch_rows(sql)
526
+ MODEL_DB.sqls << sql
527
+ yield({:album_id=>1, :id=>2})
528
+ end
529
+ })
530
+ as = EagerAlbum.eager(:special_tracks).all
531
+ MODEL_DB.sqls.should == ['SELECT * FROM albums', "SELECT * FROM tracks WHERE ((tracks.id, tracks.album_id) IN ((2, 1)))"]
532
+ as.length.should == 1
533
+ as.first.special_tracks.should == [EagerTrack.load(:album_id=>1, :id=>2)]
534
+ end
507
535
 
536
+ it "should respect many_to_many association's composite keys" do
537
+ EagerAlbum.many_to_many :special_genres, :class=>:EagerGenre, :left_primary_key=>[:band_id, :id], :left_key=>[:l1, :l2], :right_primary_key=>[:xxx, :id], :right_key=>[:r1, :r2], :join_table=>:ag
538
+ EagerGenre.dataset.extend(Module.new {
539
+ def fetch_rows(sql)
540
+ MODEL_DB.sqls << sql
541
+ yield({:x_foreign_key_0_x=>2, :x_foreign_key_1_x=>1, :id=>5})
542
+ yield({:x_foreign_key_0_x=>2, :x_foreign_key_1_x=>1, :id=>6})
543
+ end
544
+ })
545
+ as = EagerAlbum.eager(:special_genres).all
546
+ MODEL_DB.sqls.should == ['SELECT * FROM albums', "SELECT genres.*, ag.l1 AS x_foreign_key_0_x, ag.l2 AS x_foreign_key_1_x FROM genres INNER JOIN ag ON ((ag.r1 = genres.xxx) AND (ag.r2 = genres.id) AND ((ag.l1, ag.l2) IN ((2, 1))))"]
547
+ as.length.should == 1
548
+ as.first.special_genres.should == [EagerGenre.load(:id=>5), EagerGenre.load(:id=>6)]
549
+ end
550
+
508
551
  it "should respect many_to_many association's :left_primary_key and :right_primary_key options" do
509
552
  EagerAlbum.many_to_many :special_genres, :class=>:EagerGenre, :left_primary_key=>:band_id, :left_key=>:album_id, :right_primary_key=>:xxx, :right_key=>:genre_id, :join_table=>:ag
510
553
  EagerGenre.dataset.extend(Module.new {
@@ -1059,6 +1102,43 @@ describe Sequel::Model, "#eager_graph" do
1059
1102
  as.should == [GraphAlbum.load(:id=>3, :band_id=>2)]
1060
1103
  as.first.right_tracks.should == [GraphTrack.load(:id=>5, :album_id=>2), GraphTrack.load(:id=>6, :album_id=>2)]
1061
1104
  end
1105
+
1106
+ it "should respect many_to_one association's composite keys" do
1107
+ GraphAlbum.many_to_one :inner_band, :class=>'GraphBand', :key=>[:band_id, :id], :primary_key=>[:vocalist_id, :id]
1108
+ ds = GraphAlbum.eager_graph(:inner_band)
1109
+ ds.sql.should == 'SELECT albums.id, albums.band_id, inner_band.id AS inner_band_id, inner_band.vocalist_id FROM albums LEFT OUTER JOIN bands AS inner_band ON ((inner_band.vocalist_id = albums.band_id) AND (inner_band.id = albums.id))'
1110
+ def ds.fetch_rows(sql, &block)
1111
+ yield({:id=>3, :band_id=>2, :inner_band_id=>3, :vocalist_id=>2})
1112
+ end
1113
+ as = ds.all
1114
+ as.should == [GraphAlbum.load(:id=>3, :band_id=>2)]
1115
+ as.first.inner_band.should == GraphBand.load(:id=>3, :vocalist_id=>2)
1116
+ end
1117
+
1118
+ it "should respect one_to_many association's composite keys" do
1119
+ GraphAlbum.one_to_many :right_tracks, :class=>'GraphTrack', :key=>[:album_id, :id], :primary_key=>[:band_id, :id]
1120
+ ds = GraphAlbum.eager_graph(:right_tracks)
1121
+ ds.sql.should == 'SELECT albums.id, albums.band_id, right_tracks.id AS right_tracks_id, right_tracks.album_id FROM albums LEFT OUTER JOIN tracks AS right_tracks ON ((right_tracks.album_id = albums.band_id) AND (right_tracks.id = albums.id))'
1122
+ def ds.fetch_rows(sql, &block)
1123
+ yield({:id=>3, :band_id=>2, :right_tracks_id=>3, :album_id=>2})
1124
+ end
1125
+ as = ds.all
1126
+ as.should == [GraphAlbum.load(:id=>3, :band_id=>2)]
1127
+ as.first.right_tracks.should == [GraphTrack.load(:id=>3, :album_id=>2)]
1128
+ end
1129
+
1130
+ it "should respect many_to_many association's composite keys" do
1131
+ GraphAlbum.many_to_many :sbands, :class=>'GraphBand', :left_key=>[:l1, :l2], :left_primary_key=>[:band_id, :id], :right_key=>[:r1, :r2], :right_primary_key=>[:vocalist_id, :id], :join_table=>:b
1132
+ ds = GraphAlbum.eager_graph(:sbands)
1133
+ ds.sql.should == 'SELECT albums.id, albums.band_id, sbands.id AS sbands_id, sbands.vocalist_id FROM albums LEFT OUTER JOIN b ON ((b.l1 = albums.band_id) AND (b.l2 = albums.id)) LEFT OUTER JOIN bands AS sbands ON ((sbands.vocalist_id = b.r1) AND (sbands.id = b.r2))'
1134
+ def ds.fetch_rows(sql, &block)
1135
+ yield({:id=>3, :band_id=>2, :sbands_id=>5, :vocalist_id=>6})
1136
+ yield({:id=>3, :band_id=>2, :sbands_id=>6, :vocalist_id=>22})
1137
+ end
1138
+ as = ds.all
1139
+ as.should == [GraphAlbum.load(:id=>3, :band_id=>2)]
1140
+ as.first.sbands.should == [GraphBand.load(:id=>5, :vocalist_id=>6), GraphBand.load(:id=>6, :vocalist_id=>22)]
1141
+ end
1062
1142
 
1063
1143
  it "should respect many_to_many association's :left_primary_key and :right_primary_key options" do
1064
1144
  GraphAlbum.many_to_many :inner_genres, :class=>'GraphGenre', :left_key=>:album_id, :left_primary_key=>:band_id, :right_key=>:genre_id, :right_primary_key=>:xxx, :join_table=>:ag
@@ -436,12 +436,19 @@ describe Sequel::Model, ".[]" do
436
436
  $sqls.last.should == "SELECT * FROM items WHERE (name = 'sharon') LIMIT 1"
437
437
  end
438
438
 
439
- it "should work correctly for composite primary key" do
439
+ it "should work correctly for composite primary key specified as array" do
440
440
  @c.set_primary_key [:node_id, :kind]
441
441
  @c[3921, 201].should be_a_kind_of(@c)
442
442
  $sqls.last.should =~ \
443
443
  /^SELECT \* FROM items WHERE \((\(node_id = 3921\) AND \(kind = 201\))|(\(kind = 201\) AND \(node_id = 3921\))\) LIMIT 1$/
444
444
  end
445
+
446
+ it "should work correctly for composite primary key specified as separate arguments" do
447
+ @c.set_primary_key :node_id, :kind
448
+ @c[3921, 201].should be_a_kind_of(@c)
449
+ $sqls.last.should =~ \
450
+ /^SELECT \* FROM items WHERE \((\(node_id = 3921\) AND \(kind = 201\))|(\(kind = 201\) AND \(node_id = 3921\))\) LIMIT 1$/
451
+ end
445
452
  end
446
453
 
447
454
  context "Model#inspect" do
@@ -192,27 +192,70 @@ describe "Model#save" do
192
192
  end
193
193
  end
194
194
 
195
- describe "Model#save_changes" do
196
-
197
- before(:each) do
195
+ describe "Model#modified?" do
196
+ before do
197
+ @c = Class.new(Sequel::Model(:items))
198
+ @c.class_eval do
199
+ columns :id, :x
200
+ @db_schema = {:x => {:type => :integer}}
201
+ end
198
202
  MODEL_DB.reset
203
+ end
204
+
205
+ it "should be true if the object is new" do
206
+ @c.new.modified?.should == true
207
+ end
208
+
209
+ it "should be false if the object has not been modified" do
210
+ @c.load(:id=>1).modified?.should == false
211
+ end
212
+
213
+ it "should be true if the object has been modified" do
214
+ o = @c.load(:id=>1, :x=>2)
215
+ o.x = 3
216
+ o.modified?.should == true
217
+ end
218
+
219
+ it "should be false if a column value is set that is the same as the current value after typecasting" do
220
+ o = @c.load(:id=>1, :x=>2)
221
+ o.x = '2'
222
+ o.modified?.should == false
223
+ end
224
+
225
+ it "should be true if a column value is set that is the different as the current value after typecasting" do
226
+ o = @c.load(:id=>1, :x=>'2')
227
+ o.x = '2'
228
+ o.modified?.should == true
229
+ end
230
+ end
199
231
 
232
+ describe "Model#save_changes" do
233
+
234
+ before do
200
235
  @c = Class.new(Sequel::Model(:items)) do
201
236
  unrestrict_primary_key
202
237
  columns :id, :x, :y
203
238
  end
239
+ MODEL_DB.reset
204
240
  end
205
241
 
206
- it "should do nothing if no changed columns" do
207
- o = @c.new(:id => 3, :x => 1, :y => nil)
242
+ it "should always save if the object is new" do
243
+ o = @c.new(:x => 1)
208
244
  o.save_changes
209
-
210
- MODEL_DB.sqls.should be_empty
245
+ MODEL_DB.sqls.first.should == "INSERT INTO items (x) VALUES (1)"
246
+ end
211
247
 
248
+ it "should do nothing if no changed columns" do
212
249
  o = @c.load(:id => 3, :x => 1, :y => nil)
213
250
  o.save_changes
214
-
215
- MODEL_DB.sqls.should be_empty
251
+ MODEL_DB.sqls.should == []
252
+ end
253
+
254
+ it "should do nothing if modified? is false" do
255
+ o = @c.load(:id => 3, :x => 1, :y => nil)
256
+ def o.modified?; false; end
257
+ o.save_changes
258
+ MODEL_DB.sqls.should == []
216
259
  end
217
260
 
218
261
  it "should update only changed columns" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.0
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-02 00:00:00 -07:00
12
+ date: 2009-10-01 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -55,6 +55,7 @@ extra_rdoc_files:
55
55
  - doc/release_notes/3.2.0.txt
56
56
  - doc/release_notes/3.3.0.txt
57
57
  - doc/release_notes/3.4.0.txt
58
+ - doc/release_notes/3.5.0.txt
58
59
  files:
59
60
  - COPYING
60
61
  - CHANGELOG
@@ -67,7 +68,6 @@ files:
67
68
  - doc/opening_databases.rdoc
68
69
  - doc/prepared_statements.rdoc
69
70
  - doc/reflection.rdoc
70
- - doc/release_notes
71
71
  - doc/release_notes/1.0.txt
72
72
  - doc/release_notes/1.1.txt
73
73
  - doc/release_notes/1.3.txt
@@ -91,10 +91,10 @@ files:
91
91
  - doc/release_notes/3.2.0.txt
92
92
  - doc/release_notes/3.3.0.txt
93
93
  - doc/release_notes/3.4.0.txt
94
+ - doc/release_notes/3.5.0.txt
94
95
  - doc/schema.rdoc
95
96
  - doc/sharding.rdoc
96
97
  - doc/virtual_rows.rdoc
97
- - spec/adapters
98
98
  - spec/adapters/firebird_spec.rb
99
99
  - spec/adapters/informix_spec.rb
100
100
  - spec/adapters/mysql_spec.rb
@@ -102,7 +102,7 @@ files:
102
102
  - spec/adapters/postgres_spec.rb
103
103
  - spec/adapters/spec_helper.rb
104
104
  - spec/adapters/sqlite_spec.rb
105
- - spec/core
105
+ - spec/adapters/mssql_spec.rb
106
106
  - spec/core/connection_pool_spec.rb
107
107
  - spec/core/core_sql_spec.rb
108
108
  - spec/core/database_spec.rb
@@ -113,7 +113,6 @@ files:
113
113
  - spec/core/schema_spec.rb
114
114
  - spec/core/spec_helper.rb
115
115
  - spec/core/version_spec.rb
116
- - spec/extensions
117
116
  - spec/extensions/blank_spec.rb
118
117
  - spec/extensions/caching_spec.rb
119
118
  - spec/extensions/hook_class_methods_spec.rb
@@ -139,7 +138,17 @@ files:
139
138
  - spec/extensions/instance_hooks_spec.rb
140
139
  - spec/extensions/boolean_readers_spec.rb
141
140
  - spec/extensions/nested_attributes_spec.rb
142
- - spec/integration
141
+ - spec/extensions/looser_typecasting_spec.rb
142
+ - spec/extensions/typecast_on_load_spec.rb
143
+ - spec/extensions/subclasses_spec.rb
144
+ - spec/extensions/active_model_spec.rb
145
+ - spec/extensions/association_dependencies_spec.rb
146
+ - spec/extensions/sql_expr_spec.rb
147
+ - spec/extensions/touch_spec.rb
148
+ - spec/extensions/named_timezones_spec.rb
149
+ - spec/extensions/thread_local_timezones_spec.rb
150
+ - spec/extensions/force_encoding_spec.rb
151
+ - spec/extensions/class_table_inheritance_spec.rb
143
152
  - spec/integration/database_test.rb
144
153
  - spec/integration/dataset_test.rb
145
154
  - spec/integration/eager_loader_test.rb
@@ -149,7 +158,7 @@ files:
149
158
  - spec/integration/transaction_test.rb
150
159
  - spec/integration/type_test.rb
151
160
  - spec/integration/timezone_test.rb
152
- - spec/model
161
+ - spec/integration/plugin_test.rb
153
162
  - spec/model/association_reflection_spec.rb
154
163
  - spec/model/associations_spec.rb
155
164
  - spec/model/base_spec.rb
@@ -167,21 +176,17 @@ files:
167
176
  - spec/spec_config.rb
168
177
  - spec/spec_config.rb.example
169
178
  - lib/sequel.rb
170
- - lib/sequel
171
- - lib/sequel/adapters
172
179
  - lib/sequel/adapters/ado.rb
173
180
  - lib/sequel/adapters/amalgalite.rb
174
181
  - lib/sequel/adapters/db2.rb
175
182
  - lib/sequel/adapters/dbi.rb
176
183
  - lib/sequel/adapters/do.rb
177
- - lib/sequel/adapters/do
178
184
  - lib/sequel/adapters/do/mysql.rb
179
185
  - lib/sequel/adapters/do/postgres.rb
180
186
  - lib/sequel/adapters/do/sqlite.rb
181
187
  - lib/sequel/adapters/firebird.rb
182
188
  - lib/sequel/adapters/informix.rb
183
189
  - lib/sequel/adapters/jdbc.rb
184
- - lib/sequel/adapters/jdbc
185
190
  - lib/sequel/adapters/jdbc/h2.rb
186
191
  - lib/sequel/adapters/jdbc/mysql.rb
187
192
  - lib/sequel/adapters/jdbc/oracle.rb
@@ -193,7 +198,6 @@ files:
193
198
  - lib/sequel/adapters/openbase.rb
194
199
  - lib/sequel/adapters/oracle.rb
195
200
  - lib/sequel/adapters/postgres.rb
196
- - lib/sequel/adapters/shared
197
201
  - lib/sequel/adapters/shared/mssql.rb
198
202
  - lib/sequel/adapters/shared/mysql.rb
199
203
  - lib/sequel/adapters/shared/oracle.rb
@@ -201,28 +205,22 @@ files:
201
205
  - lib/sequel/adapters/shared/progress.rb
202
206
  - lib/sequel/adapters/shared/sqlite.rb
203
207
  - lib/sequel/adapters/sqlite.rb
204
- - lib/sequel/adapters/utils
205
208
  - lib/sequel/adapters/utils/stored_procedures.rb
206
- - lib/sequel/adapters/ado
207
209
  - lib/sequel/adapters/ado/mssql.rb
208
- - lib/sequel/adapters/odbc
209
210
  - lib/sequel/adapters/odbc/mssql.rb
210
211
  - lib/sequel/connection_pool.rb
211
212
  - lib/sequel/core.rb
212
213
  - lib/sequel/core_sql.rb
213
214
  - lib/sequel/database.rb
214
- - lib/sequel/database
215
215
  - lib/sequel/database/schema_generator.rb
216
216
  - lib/sequel/database/schema_methods.rb
217
217
  - lib/sequel/database/schema_sql.rb
218
218
  - lib/sequel/dataset.rb
219
- - lib/sequel/dataset
220
219
  - lib/sequel/dataset/convenience.rb
221
220
  - lib/sequel/dataset/graph.rb
222
221
  - lib/sequel/dataset/prepared_statements.rb
223
222
  - lib/sequel/dataset/sql.rb
224
223
  - lib/sequel/exceptions.rb
225
- - lib/sequel/extensions
226
224
  - lib/sequel/extensions/blank.rb
227
225
  - lib/sequel/extensions/inflector.rb
228
226
  - lib/sequel/extensions/migration.rb
@@ -231,9 +229,12 @@ files:
231
229
  - lib/sequel/extensions/query.rb
232
230
  - lib/sequel/extensions/schema_dumper.rb
233
231
  - lib/sequel/extensions/string_date_time.rb
232
+ - lib/sequel/extensions/looser_typecasting.rb
233
+ - lib/sequel/extensions/sql_expr.rb
234
+ - lib/sequel/extensions/named_timezones.rb
235
+ - lib/sequel/extensions/thread_local_timezones.rb
234
236
  - lib/sequel/metaprogramming.rb
235
237
  - lib/sequel/model.rb
236
- - lib/sequel/model
237
238
  - lib/sequel/model/associations.rb
238
239
  - lib/sequel/model/base.rb
239
240
  - lib/sequel/model/errors.rb
@@ -241,7 +242,6 @@ files:
241
242
  - lib/sequel/model/inflections.rb
242
243
  - lib/sequel/model/plugins.rb
243
244
  - lib/sequel/model/default_inflections.rb
244
- - lib/sequel/plugins
245
245
  - lib/sequel/plugins/caching.rb
246
246
  - lib/sequel/plugins/hook_class_methods.rb
247
247
  - lib/sequel/plugins/identity_map.rb
@@ -258,12 +258,22 @@ files:
258
258
  - lib/sequel/plugins/boolean_readers.rb
259
259
  - lib/sequel/plugins/instance_hooks.rb
260
260
  - lib/sequel/plugins/nested_attributes.rb
261
+ - lib/sequel/plugins/touch.rb
262
+ - lib/sequel/plugins/typecast_on_load.rb
263
+ - lib/sequel/plugins/subclasses.rb
264
+ - lib/sequel/plugins/active_model.rb
265
+ - lib/sequel/plugins/association_dependencies.rb
266
+ - lib/sequel/plugins/force_encoding.rb
267
+ - lib/sequel/plugins/class_table_inheritance.rb
261
268
  - lib/sequel/sql.rb
262
269
  - lib/sequel/version.rb
270
+ - lib/sequel/timezones.rb
263
271
  - lib/sequel_core.rb
264
272
  - lib/sequel_model.rb
265
273
  has_rdoc: true
266
274
  homepage: http://sequel.rubyforge.org
275
+ licenses: []
276
+
267
277
  post_install_message:
268
278
  rdoc_options:
269
279
  - --quiet
@@ -290,9 +300,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
290
300
  requirements: []
291
301
 
292
302
  rubyforge_project: sequel
293
- rubygems_version: 1.3.1
303
+ rubygems_version: 1.3.5
294
304
  signing_key:
295
- specification_version: 2
305
+ specification_version: 3
296
306
  summary: The Database Toolkit for Ruby
297
307
  test_files: []
298
308