sequel 3.4.0 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
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