sequel 4.39.0 → 4.40.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +34 -0
  3. data/README.rdoc +8 -4
  4. data/doc/active_record.rdoc +1 -1
  5. data/doc/advanced_associations.rdoc +7 -7
  6. data/doc/association_basics.rdoc +7 -7
  7. data/doc/cheat_sheet.rdoc +5 -3
  8. data/doc/core_extensions.rdoc +3 -3
  9. data/doc/dataset_filtering.rdoc +1 -1
  10. data/doc/object_model.rdoc +16 -7
  11. data/doc/postgresql.rdoc +3 -3
  12. data/doc/querying.rdoc +3 -3
  13. data/doc/release_notes/4.40.0.txt +179 -0
  14. data/doc/security.rdoc +2 -1
  15. data/doc/sql.rdoc +34 -18
  16. data/doc/testing.rdoc +1 -0
  17. data/doc/virtual_rows.rdoc +11 -2
  18. data/lib/sequel/adapters/jdbc/derby.rb +7 -1
  19. data/lib/sequel/adapters/jdbc/h2.rb +15 -1
  20. data/lib/sequel/adapters/oracle.rb +9 -5
  21. data/lib/sequel/adapters/postgres.rb +0 -1
  22. data/lib/sequel/adapters/shared/cubrid.rb +11 -11
  23. data/lib/sequel/adapters/shared/db2.rb +4 -8
  24. data/lib/sequel/adapters/shared/mssql.rb +41 -28
  25. data/lib/sequel/adapters/shared/mysql.rb +9 -6
  26. data/lib/sequel/adapters/shared/oracle.rb +16 -5
  27. data/lib/sequel/adapters/shared/postgres.rb +84 -45
  28. data/lib/sequel/adapters/shared/sqlanywhere.rb +29 -15
  29. data/lib/sequel/adapters/shared/sqlite.rb +6 -6
  30. data/lib/sequel/core.rb +61 -10
  31. data/lib/sequel/database/connecting.rb +2 -1
  32. data/lib/sequel/database/features.rb +7 -0
  33. data/lib/sequel/database/query.rb +1 -1
  34. data/lib/sequel/database/schema_methods.rb +30 -3
  35. data/lib/sequel/database/transactions.rb +4 -2
  36. data/lib/sequel/dataset/actions.rb +1 -1
  37. data/lib/sequel/dataset/graph.rb +6 -1
  38. data/lib/sequel/dataset/query.rb +14 -7
  39. data/lib/sequel/dataset/sql.rb +2 -2
  40. data/lib/sequel/extensions/core_extensions.rb +2 -1
  41. data/lib/sequel/extensions/pg_row.rb +2 -2
  42. data/lib/sequel/extensions/s.rb +57 -0
  43. data/lib/sequel/extensions/set_overrides.rb +5 -1
  44. data/lib/sequel/extensions/sql_expr.rb +1 -0
  45. data/lib/sequel/extensions/symbol_aref.rb +71 -0
  46. data/lib/sequel/extensions/symbol_aref_refinement.rb +41 -0
  47. data/lib/sequel/extensions/symbol_as.rb +23 -0
  48. data/lib/sequel/extensions/symbol_as_refinement.rb +35 -0
  49. data/lib/sequel/model/base.rb +3 -3
  50. data/lib/sequel/plugins/class_table_inheritance.rb +14 -3
  51. data/lib/sequel/plugins/column_select.rb +4 -2
  52. data/lib/sequel/plugins/dataset_associations.rb +12 -4
  53. data/lib/sequel/plugins/insert_returning_select.rb +1 -1
  54. data/lib/sequel/plugins/mssql_optimistic_locking.rb +1 -1
  55. data/lib/sequel/plugins/prepared_statements.rb +1 -0
  56. data/lib/sequel/sql.rb +40 -8
  57. data/lib/sequel/version.rb +1 -1
  58. data/spec/adapters/firebird_spec.rb +3 -3
  59. data/spec/adapters/mssql_spec.rb +40 -40
  60. data/spec/adapters/mysql_spec.rb +5 -5
  61. data/spec/adapters/oracle_spec.rb +4 -4
  62. data/spec/adapters/postgres_spec.rb +135 -124
  63. data/spec/adapters/spec_helper.rb +1 -0
  64. data/spec/adapters/sqlite_spec.rb +6 -6
  65. data/spec/core/dataset_spec.rb +2 -2
  66. data/spec/core/expression_filters_spec.rb +43 -2
  67. data/spec/core/schema_spec.rb +35 -1
  68. data/spec/core_extensions_spec.rb +27 -0
  69. data/spec/extensions/class_table_inheritance_spec.rb +8 -0
  70. data/spec/extensions/column_select_spec.rb +8 -0
  71. data/spec/extensions/core_refinements_spec.rb +1 -1
  72. data/spec/extensions/dataset_associations_spec.rb +9 -0
  73. data/spec/extensions/insert_returning_select_spec.rb +20 -0
  74. data/spec/extensions/prepared_statements_spec.rb +7 -0
  75. data/spec/extensions/s_spec.rb +60 -0
  76. data/spec/extensions/symbol_aref_refinement_spec.rb +28 -0
  77. data/spec/extensions/symbol_as_refinement_spec.rb +21 -0
  78. data/spec/integration/associations_test.rb +62 -57
  79. data/spec/integration/dataset_test.rb +54 -54
  80. data/spec/integration/eager_loader_test.rb +7 -7
  81. data/spec/integration/plugin_test.rb +20 -20
  82. data/spec/integration/prepared_statement_test.rb +1 -1
  83. data/spec/integration/schema_test.rb +21 -0
  84. data/spec/integration/spec_helper.rb +1 -0
  85. metadata +12 -2
@@ -178,7 +178,7 @@ describe "has_many :through has_many and has_one :through belongs_to" do
178
178
  class ::Firm < Sequel::Model
179
179
  one_to_many :clients
180
180
  one_to_many :invoices, :read_only=>true, \
181
- :dataset=>proc{Invoice.eager_graph(:client).filter(:client__firm_id=>pk)}, \
181
+ :dataset=>proc{Invoice.eager_graph(:client).filter(Sequel[:client][:firm_id]=>pk)}, \
182
182
  :after_load=>(proc do |firm, invs|
183
183
  invs.each do |inv|
184
184
  inv.client.associations[:firm] = inv.associations[:firm] = firm
@@ -187,7 +187,7 @@ describe "has_many :through has_many and has_one :through belongs_to" do
187
187
  :eager_loader=>(proc do |eo|
188
188
  id_map = eo[:id_map]
189
189
  eo[:rows].each{|firm| firm.associations[:invoices] = []}
190
- Invoice.eager_graph(:client).filter(:client__firm_id=>id_map.keys).all do |inv|
190
+ Invoice.eager_graph(:client).filter(Sequel[:client][:firm_id]=>id_map.keys).all do |inv|
191
191
  id_map[inv.client.firm_id].each do |firm|
192
192
  firm.associations[:invoices] << inv
193
193
  end
@@ -211,7 +211,7 @@ describe "has_many :through has_many and has_one :through belongs_to" do
211
211
  class ::Invoice < Sequel::Model
212
212
  many_to_one :client
213
213
  many_to_one :firm, :key=>nil, :read_only=>true, \
214
- :dataset=>proc{Firm.eager_graph(:clients).filter(:clients__id=>client_id)}, \
214
+ :dataset=>proc{Firm.eager_graph(:clients).filter(Sequel[:clients][:id]=>client_id)}, \
215
215
  :after_load=>(proc do |inv, firm|
216
216
  # Delete the cached associations from firm, because it only has the
217
217
  # client with this invoice, instead of all clients of the firm
@@ -226,7 +226,7 @@ describe "has_many :through has_many and has_one :through belongs_to" do
226
226
  inv.associations[:firm] = nil
227
227
  (id_map[inv.client_id] ||= []) << inv
228
228
  end
229
- Firm.eager_graph(:clients).filter(:clients__id=>id_map.keys).all do |firm|
229
+ Firm.eager_graph(:clients).filter(Sequel[:clients][:id]=>id_map.keys).all do |firm|
230
230
  # Delete the cached associations from firm, because it only has the
231
231
  # clients related the invoices being eagerly loaded, instead of all
232
232
  # clients of the firm.
@@ -666,19 +666,19 @@ describe "one to one associations" do
666
666
  end
667
667
 
668
668
  it "should be eager loadable" do
669
- bk1, bk2 = Book.filter(:books__id=>[1,2]).eager(:first_page).all
669
+ bk1, bk2 = Book.filter(Sequel[:books][:id]=>[1,2]).eager(:first_page).all
670
670
  bk1.first_page.must_equal @page1
671
671
  bk2.first_page.must_equal @page3
672
672
  end
673
673
 
674
674
  it "should be eager graphable" do
675
- bk1, bk2 = Book.filter(:books__id=>[1,2]).eager_graph(:first_page).all
675
+ bk1, bk2 = Book.filter(Sequel[:books][:id]=>[1,2]).eager_graph(:first_page).all
676
676
  bk1.first_page.must_equal @page1
677
677
  bk2.first_page.must_equal @page3
678
678
  end
679
679
 
680
680
  it "should be eager graphable two at once" do
681
- bk1, bk2 = Book.filter(:books__id=>[1,2]).eager_graph(:first_page, :second_page).all
681
+ bk1, bk2 = Book.filter(Sequel[:books][:id]=>[1,2]).eager_graph(:first_page, :second_page).all
682
682
  bk1.first_page.must_equal @page1
683
683
  bk1.second_page.must_equal @page2
684
684
  bk2.first_page.must_equal @page3
@@ -123,7 +123,7 @@ describe "Class Table Inheritance Plugin" do
123
123
  end
124
124
 
125
125
  it "should handle associations only defined in subclasses" do
126
- Employee.filter(:employees__id=>@i2).all.first.manager.id.must_equal @i4
126
+ Employee.filter(Sequel[:employees][:id]=>@i2).all.first.manager.id.must_equal @i4
127
127
  end
128
128
 
129
129
  it "should insert rows into all tables" do
@@ -248,10 +248,10 @@ describe "Many Through Many Plugin" do
248
248
  Artist.filter(:id=>@artist3.id).eager(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'B C'
249
249
  Artist.filter(:id=>@artist4.id).eager(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'B D'
250
250
 
251
- Artist.filter(:artists__id=>@artist1.id).eager_graph(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'A D'
252
- Artist.filter(:artists__id=>@artist2.id).eager_graph(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'A C'
253
- Artist.filter(:artists__id=>@artist3.id).eager_graph(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'B C'
254
- Artist.filter(:artists__id=>@artist4.id).eager_graph(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'B D'
251
+ Artist.filter(Sequel[:artists][:id]=>@artist1.id).eager_graph(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'A D'
252
+ Artist.filter(Sequel[:artists][:id]=>@artist2.id).eager_graph(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'A C'
253
+ Artist.filter(Sequel[:artists][:id]=>@artist3.id).eager_graph(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'B C'
254
+ Artist.filter(Sequel[:artists][:id]=>@artist4.id).eager_graph(:albums).all.map{|x| x.albums.map{|a| a.name}}.flatten.sort.must_equal %w'B D'
255
255
 
256
256
  Artist.filter(:albums=>@album1).all.map{|a| a.name}.sort.must_equal %w'1 2'
257
257
  Artist.filter(:albums=>@album2).all.map{|a| a.name}.sort.must_equal %w'3 4'
@@ -289,8 +289,8 @@ describe "Many Through Many Plugin" do
289
289
  c.exclude(:albums=>[@album1, @album3]).all.map{|a| a.name}.sort.must_equal %w'4'
290
290
  c.exclude(:albums=>[@album2, @album4]).all.map{|a| a.name}.sort.must_equal %w'2'
291
291
 
292
- c.filter(:albums=>self_join(Album).filter(:albums__id=>[@album1.id, @album3.id])).all.map{|a| a.name}.sort.must_equal %w'1 2 3'
293
- c.exclude(:albums=>self_join(Album).filter(:albums__id=>[@album1.id, @album3.id])).all.map{|a| a.name}.sort.must_equal %w'4'
292
+ c.filter(:albums=>self_join(Album).filter(Sequel[:albums][:id]=>[@album1.id, @album3.id])).all.map{|a| a.name}.sort.must_equal %w'1 2 3'
293
+ c.exclude(:albums=>self_join(Album).filter(Sequel[:albums][:id]=>[@album1.id, @album3.id])).all.map{|a| a.name}.sort.must_equal %w'4'
294
294
  end
295
295
 
296
296
  it "should handle typical case with 3 join tables" do
@@ -311,10 +311,10 @@ describe "Many Through Many Plugin" do
311
311
  Artist.filter(:id=>@artist3.id).eager(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'2 3 4'
312
312
  Artist.filter(:id=>@artist4.id).eager(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'1 3 4'
313
313
 
314
- Artist.filter(:artists__id=>@artist1.id).eager_graph(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'1 2 4'
315
- Artist.filter(:artists__id=>@artist2.id).eager_graph(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'1 2 3'
316
- Artist.filter(:artists__id=>@artist3.id).eager_graph(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'2 3 4'
317
- Artist.filter(:artists__id=>@artist4.id).eager_graph(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'1 3 4'
314
+ Artist.filter(Sequel[:artists][:id]=>@artist1.id).eager_graph(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'1 2 4'
315
+ Artist.filter(Sequel[:artists][:id]=>@artist2.id).eager_graph(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'1 2 3'
316
+ Artist.filter(Sequel[:artists][:id]=>@artist3.id).eager_graph(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'2 3 4'
317
+ Artist.filter(Sequel[:artists][:id]=>@artist4.id).eager_graph(:related_artists).all.map{|x| x.related_artists.map{|a| a.name}}.flatten.sort.must_equal %w'1 3 4'
318
318
 
319
319
  Artist.filter(:related_artists=>@artist1).all.map{|a| a.name}.sort.must_equal %w'1 2 4'
320
320
  Artist.filter(:related_artists=>@artist2).all.map{|a| a.name}.sort.must_equal %w'1 2 3'
@@ -346,8 +346,8 @@ describe "Many Through Many Plugin" do
346
346
  c.filter(:related_artists=>[@artist1, @artist4]).all.map{|a| a.name}.sort.must_equal %w'1 2 3 4'
347
347
  c.exclude(:related_artists=>[@artist1, @artist4]).all.map{|a| a.name}.sort.must_equal %w''
348
348
 
349
- c.filter(:related_artists=>c.filter(:artists__id=>@artist1.id)).all.map{|a| a.name}.sort.must_equal %w'1 2 4'
350
- c.exclude(:related_artists=>c.filter(:artists__id=>@artist1.id)).all.map{|a| a.name}.sort.must_equal %w'3'
349
+ c.filter(:related_artists=>c.filter(Sequel[:artists][:id]=>@artist1.id)).all.map{|a| a.name}.sort.must_equal %w'1 2 4'
350
+ c.exclude(:related_artists=>c.filter(Sequel[:artists][:id]=>@artist1.id)).all.map{|a| a.name}.sort.must_equal %w'3'
351
351
  end
352
352
 
353
353
  it "should handle extreme case with 5 join tables" do
@@ -377,10 +377,10 @@ describe "Many Through Many Plugin" do
377
377
  Artist.filter(:id=>@artist3.id).eager(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'A B D'
378
378
  Artist.filter(:id=>@artist4.id).eager(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'B D'
379
379
 
380
- Artist.filter(:artists__id=>@artist1.id).eager_graph(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'A B C'
381
- Artist.filter(:artists__id=>@artist2.id).eager_graph(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'A B C D'
382
- Artist.filter(:artists__id=>@artist3.id).eager_graph(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'A B D'
383
- Artist.filter(:artists__id=>@artist4.id).eager_graph(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'B D'
380
+ Artist.filter(Sequel[:artists][:id]=>@artist1.id).eager_graph(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'A B C'
381
+ Artist.filter(Sequel[:artists][:id]=>@artist2.id).eager_graph(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'A B C D'
382
+ Artist.filter(Sequel[:artists][:id]=>@artist3.id).eager_graph(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'A B D'
383
+ Artist.filter(Sequel[:artists][:id]=>@artist4.id).eager_graph(:related_albums).all.map{|x| x.related_albums.map{|a| a.name}}.flatten.sort.must_equal %w'B D'
384
384
 
385
385
  Artist.filter(:related_albums=>@album1).all.map{|a| a.name}.sort.must_equal %w'1 2 3'
386
386
  Artist.filter(:related_albums=>@album2).all.map{|a| a.name}.sort.must_equal %w'1 2 3 4'
@@ -418,8 +418,8 @@ describe "Many Through Many Plugin" do
418
418
  c.exclude(:related_albums=>[@album1, @album3]).all.map{|a| a.name}.sort.must_equal %w'4'
419
419
  c.exclude(:related_albums=>[@album2, @album4]).all.map{|a| a.name}.sort.must_equal %w''
420
420
 
421
- c.filter(:related_albums=>self_join(Album).filter(:albums__id=>[@album1.id, @album3.id])).all.map{|a| a.name}.sort.must_equal %w'1 2 3'
422
- c.exclude(:related_albums=>self_join(Album).filter(:albums__id=>[@album1.id, @album3.id])).all.map{|a| a.name}.sort.must_equal %w'4'
421
+ c.filter(:related_albums=>self_join(Album).filter(Sequel[:albums][:id]=>[@album1.id, @album3.id])).all.map{|a| a.name}.sort.must_equal %w'1 2 3'
422
+ c.exclude(:related_albums=>self_join(Album).filter(Sequel[:albums][:id]=>[@album1.id, @album3.id])).all.map{|a| a.name}.sort.must_equal %w'4'
423
423
  end
424
424
  end
425
425
 
@@ -1893,7 +1893,7 @@ describe "Sequel::Plugins::PreparedStatements with schema changes" do
1893
1893
  @c = Class.new(Sequel::Model(@db[:ps_test]))
1894
1894
  @c.many_to_one :ps_test, :key=>:id, :class=>@c
1895
1895
  @c.one_to_many :ps_tests, :key=>:id, :class=>@c
1896
- @c.many_to_many :mps_tests, :left_key=>:id, :right_key=>:id, :class=>@c, :join_table=>:ps_test___x
1896
+ @c.many_to_many :mps_tests, :left_key=>:id, :right_key=>:id, :class=>@c, :join_table=>Sequel[:ps_test].as(:x)
1897
1897
  @c.plugin :prepared_statements
1898
1898
  @c.plugin :prepared_statements_associations
1899
1899
  end
@@ -444,7 +444,7 @@ describe "Dataset#unbind" do
444
444
 
445
445
  it "should handle QualifiedIdentifiers" do
446
446
  @ct[Integer, 10]
447
- @u[@ds.filter{items__c > 1}].must_equal(:c=>10)
447
+ @u[@ds.filter{items[:c] > 1}].must_equal(:c=>10)
448
448
  end
449
449
 
450
450
  cspecify "should handle deep nesting", :h2 do
@@ -515,6 +515,27 @@ describe "Database schema modifiers" do
515
515
  proc{@ds.insert(:id=>nil)}.must_raise(Sequel::NotNullConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
516
516
  end
517
517
 
518
+ it "should not allow NULLs when adding a primary key column" do
519
+ @db.create_table!(:items){String :foo}
520
+ @db.alter_table(:items){add_column :id, String, :primary_key=>true, :default=>'a'}
521
+ proc{@ds.insert(:id=>nil)}.must_raise(Sequel::NotNullConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
522
+ end
523
+
524
+ it "should not allow NULLs when creating table with primary key constraint" do
525
+ @db.create_table!(:items){String :id1; String :id2; primary_key [:id1, :id2]}
526
+ proc{@ds.insert(:id1=>nil, :id2=>nil)}.must_raise(Sequel::NotNullConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
527
+ proc{@ds.insert(:id1=>nil, :id2=>'1')}.must_raise(Sequel::NotNullConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
528
+ proc{@ds.insert(:id1=>'1', :id2=>nil)}.must_raise(Sequel::NotNullConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
529
+ end
530
+
531
+ it "should not allow NULLs when adding a primary key constraint" do
532
+ @db.create_table!(:items){String :id1; String :id2}
533
+ @db.alter_table(:items){add_primary_key [:id1, :id2]}
534
+ proc{@ds.insert(:id1=>nil, :id2=>nil)}.must_raise(Sequel::NotNullConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
535
+ proc{@ds.insert(:id1=>nil, :id2=>'1')}.must_raise(Sequel::NotNullConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
536
+ proc{@ds.insert(:id1=>'1', :id2=>nil)}.must_raise(Sequel::NotNullConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
537
+ end
538
+
518
539
  it "should rename columns correctly" do
519
540
  @db.create_table!(:items){Integer :id}
520
541
  @ds.insert(:id=>10)
@@ -16,6 +16,7 @@ rescue LoadError
16
16
  end
17
17
  Sequel::Deprecation.backtrace_filter = lambda{|line, lineno| lineno < 4 || line =~ /_(spec|test)\.rb/}
18
18
 
19
+ Sequel.split_symbols = false if ENV['SEQUEL_NO_SPLIT_SYMBOLS']
19
20
  Sequel::Database.extension :columns_introspection if ENV['SEQUEL_COLUMNS_INTROSPECTION']
20
21
  Sequel::Model.cache_associations = false if ENV['SEQUEL_NO_CACHE_ASSOCIATIONS']
21
22
  Sequel::Model.use_transactions = false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.39.0
4
+ version: 4.40.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-01 00:00:00.000000000 Z
11
+ date: 2016-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -240,6 +240,7 @@ extra_rdoc_files:
240
240
  - doc/release_notes/4.37.0.txt
241
241
  - doc/release_notes/4.38.0.txt
242
242
  - doc/release_notes/4.39.0.txt
243
+ - doc/release_notes/4.40.0.txt
243
244
  files:
244
245
  - CHANGELOG
245
246
  - MIT-LICENSE
@@ -369,6 +370,7 @@ files:
369
370
  - doc/release_notes/4.38.0.txt
370
371
  - doc/release_notes/4.39.0.txt
371
372
  - doc/release_notes/4.4.0.txt
373
+ - doc/release_notes/4.40.0.txt
372
374
  - doc/release_notes/4.5.0.txt
373
375
  - doc/release_notes/4.6.0.txt
374
376
  - doc/release_notes/4.7.0.txt
@@ -531,6 +533,7 @@ files:
531
533
  - lib/sequel/extensions/query_literals.rb
532
534
  - lib/sequel/extensions/round_timestamps.rb
533
535
  - lib/sequel/extensions/ruby18_symbol_extensions.rb
536
+ - lib/sequel/extensions/s.rb
534
537
  - lib/sequel/extensions/schema_caching.rb
535
538
  - lib/sequel/extensions/schema_dumper.rb
536
539
  - lib/sequel/extensions/select_remove.rb
@@ -543,6 +546,10 @@ files:
543
546
  - lib/sequel/extensions/sql_expr.rb
544
547
  - lib/sequel/extensions/string_agg.rb
545
548
  - lib/sequel/extensions/string_date_time.rb
549
+ - lib/sequel/extensions/symbol_aref.rb
550
+ - lib/sequel/extensions/symbol_aref_refinement.rb
551
+ - lib/sequel/extensions/symbol_as.rb
552
+ - lib/sequel/extensions/symbol_as_refinement.rb
546
553
  - lib/sequel/extensions/thread_local_timezones.rb
547
554
  - lib/sequel/extensions/to_dot.rb
548
555
  - lib/sequel/model.rb
@@ -757,6 +764,7 @@ files:
757
764
  - spec/extensions/query_spec.rb
758
765
  - spec/extensions/rcte_tree_spec.rb
759
766
  - spec/extensions/round_timestamps_spec.rb
767
+ - spec/extensions/s_spec.rb
760
768
  - spec/extensions/schema_caching_spec.rb
761
769
  - spec/extensions/schema_dumper_spec.rb
762
770
  - spec/extensions/schema_spec.rb
@@ -784,6 +792,8 @@ files:
784
792
  - spec/extensions/string_stripper_spec.rb
785
793
  - spec/extensions/subclasses_spec.rb
786
794
  - spec/extensions/subset_conditions_spec.rb
795
+ - spec/extensions/symbol_aref_refinement_spec.rb
796
+ - spec/extensions/symbol_as_refinement_spec.rb
787
797
  - spec/extensions/table_select_spec.rb
788
798
  - spec/extensions/tactical_eager_loading_spec.rb
789
799
  - spec/extensions/thread_local_timezones_spec.rb