sequel 4.27.0 → 4.28.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +12 -0
- data/doc/release_notes/4.28.0.txt +57 -0
- data/doc/transactions.rdoc +4 -1
- data/doc/validations.rdoc +1 -1
- data/lib/sequel/adapters/postgres.rb +5 -3
- data/lib/sequel/model/base.rb +2 -2
- data/lib/sequel/plugins/boolean_subsets.rb +56 -0
- data/lib/sequel/plugins/csv_serializer.rb +1 -1
- data/lib/sequel/plugins/list.rb +9 -9
- data/lib/sequel/plugins/subset_conditions.rb +36 -0
- data/lib/sequel/version.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +47 -0
- data/spec/extensions/list_spec.rb +11 -0
- data/spec/extensions/subset_conditions_spec.rb +38 -0
- data/spec/model/record_spec.rb +7 -1
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4342ce776d6f7e929b8ef1e9621f79f4544357b4
|
4
|
+
data.tar.gz: 64ed417591b155d46f3ca0abdbe38f515ea9e15f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e672203108c7301da9abcaf7596368a1aa09b8302175bb6f49d9bc189993a84e7089343e16fcdb69b9409d3677746694b36e7cbb25d1c179779ab605cd63343
|
7
|
+
data.tar.gz: 198aa8d381bd263e27bb03b646f0fa50d45225b5370084236d6da55eb1f6032396c6548f114c8ccf0d187091ab2a195c5d298e62e5a185bf992ce4fb06615d15
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
=== 4.28.0 (2015-11-02)
|
2
|
+
|
3
|
+
* Add boolean_subsets plugin, which adds a subset for each boolean column (jeremyevans)
|
4
|
+
|
5
|
+
* Add subset_conditions plugin, which adds a method for each subset returning the filter conditions for the subset (jeremyevans)
|
6
|
+
|
7
|
+
* Make the list plugin work better with the auto_validations plugin when there is a validation on the position column (jeremyevans)
|
8
|
+
|
9
|
+
* Make to_csv for model datasets call instance methods, just like Model#to_csv, in the csv_serializer plugin (skrobul) (#1088)
|
10
|
+
|
11
|
+
* Raise Sequel::NoExistingObject instead of generic error if Model#refresh can't find the related row (jeremyevans)
|
12
|
+
|
1
13
|
=== 4.27.0 (2015-10-01)
|
2
14
|
|
3
15
|
* Don't stub Sequel.synchronize on MRI (YorickPeterse) (#1083)
|
@@ -0,0 +1,57 @@
|
|
1
|
+
= New Features
|
2
|
+
|
3
|
+
* A subset_conditions plugin has been added, which adds a method
|
4
|
+
for each subset that returns the filter conditions for the
|
5
|
+
subset. This makes it easier to reuse the subset conditions:
|
6
|
+
|
7
|
+
class Foo < Sequel::Model
|
8
|
+
plugin :subset_conditions
|
9
|
+
subset :active, :active=>true
|
10
|
+
end
|
11
|
+
|
12
|
+
Foo.exclude(Foo.active_conditions)
|
13
|
+
Foo.where(:a=>1).or(Foo.active_conditions)
|
14
|
+
|
15
|
+
* A boolean_subsets plugin has been added, which adds a subset for each
|
16
|
+
boolean column:
|
17
|
+
|
18
|
+
# Assume boolean column :active
|
19
|
+
Foo.plugin :boolean_subsets
|
20
|
+
|
21
|
+
Foo.active
|
22
|
+
# SELECT * FROM foos WHERE (active IS TRUE)
|
23
|
+
|
24
|
+
You can provide a block to the plugin to change the arguments passed
|
25
|
+
to subset:
|
26
|
+
|
27
|
+
Foo.plugin :boolean_subsets do |column|
|
28
|
+
[:"where_#{column}", column]
|
29
|
+
end
|
30
|
+
|
31
|
+
Foo.where_active
|
32
|
+
# SELECT * FROM foos WHERE active
|
33
|
+
|
34
|
+
As with similar plugins, you can add the boolean_subsets plugin to
|
35
|
+
Sequel::Model itself, and all subclasses created afterward will have
|
36
|
+
the boolean subset methods automatically created.
|
37
|
+
|
38
|
+
= Other Improvements
|
39
|
+
|
40
|
+
* If Model#refresh can't find the related row, Sequel now raises a
|
41
|
+
Sequel::NoExistingObject exception instead of a generic
|
42
|
+
Sequel::Error exception.
|
43
|
+
|
44
|
+
* In the csv_serializer plugin, when calling #to_csv on a model class
|
45
|
+
or dataset, instead of using #[] to access data, #send is used to
|
46
|
+
call methods. This is more similar to other plugins as well as
|
47
|
+
Model#to_csv.
|
48
|
+
|
49
|
+
* The list plugin now works better with the auto_validations plugin,
|
50
|
+
or any other time there is a validation on the position column.
|
51
|
+
|
52
|
+
= Backwards Compatibility
|
53
|
+
|
54
|
+
* The change to the csv_serializer plugin can change results if you
|
55
|
+
are overriding any of the column accessor methods. It can also
|
56
|
+
break existing code if one of the columns being used isn't defined
|
57
|
+
as a method or the method requires more than one argument.
|
data/doc/transactions.rdoc
CHANGED
@@ -6,7 +6,10 @@ Sequel uses autocommit mode by default for all of its database adapters, so in g
|
|
6
6
|
* Model#save
|
7
7
|
* Model#destroy
|
8
8
|
* Migrations if the database supports transactional schema
|
9
|
-
*
|
9
|
+
* Database#use_cursor in the postgres adapter
|
10
|
+
* Dataset#lock on PostgreSQL if given a block
|
11
|
+
* setter methods created by the association_pks plugin
|
12
|
+
* move* methods in the list plugin
|
10
13
|
|
11
14
|
Everywhere else, it is up to you to use a database transaction if you want to.
|
12
15
|
|
data/doc/validations.rdoc
CHANGED
@@ -674,9 +674,11 @@ module Sequel
|
|
674
674
|
end
|
675
675
|
|
676
676
|
# Uses a cursor for fetching records, instead of fetching the entire result
|
677
|
-
# set at once.
|
678
|
-
#
|
679
|
-
#
|
677
|
+
# set at once. Note this uses a transaction around the cursor usage by
|
678
|
+
# default and can be changed using `hold: true` as described below.
|
679
|
+
# Cursors can be used to process large datasets without holding all rows
|
680
|
+
# in memory (which is what the underlying drivers may do by default).
|
681
|
+
# Options:
|
680
682
|
#
|
681
683
|
# :cursor_name :: The name assigned to the cursor (default 'sequel_cursor').
|
682
684
|
# Nested cursors require different names.
|
data/lib/sequel/model/base.rb
CHANGED
@@ -1867,7 +1867,7 @@ module Sequel
|
|
1867
1867
|
# Refresh using a particular dataset, used inside save to make sure the same server
|
1868
1868
|
# is used for reading newly inserted values from the database
|
1869
1869
|
def _refresh(dataset)
|
1870
|
-
_refresh_set_values(_refresh_get(dataset) || raise(
|
1870
|
+
_refresh_set_values(_refresh_get(dataset) || raise(NoExistingObject, "Record not found"))
|
1871
1871
|
changed_columns.clear
|
1872
1872
|
end
|
1873
1873
|
|
@@ -1939,7 +1939,7 @@ module Sequel
|
|
1939
1939
|
# default values of all columns. Separated from _save so it
|
1940
1940
|
# can be overridden to avoid the refresh.
|
1941
1941
|
def _save_refresh
|
1942
|
-
_save_set_values(_refresh_get(this.server?(:default)) || raise(
|
1942
|
+
_save_set_values(_refresh_get(this.server?(:default)) || raise(NoExistingObject, "Record not found"))
|
1943
1943
|
changed_columns.clear
|
1944
1944
|
end
|
1945
1945
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Sequel
|
2
|
+
module Plugins
|
3
|
+
# The boolean_subsets plugin allows for the automatic creation of subsets for
|
4
|
+
# for boolean columns, which can DRY up model classes that define such subsets
|
5
|
+
# manually. By default, subsets are created for all columns of type :boolean,
|
6
|
+
# with the subset name being the same as column name, and the conditions being
|
7
|
+
# <tt>column IS TRUE</tt> (assuming the database supports that syntax).
|
8
|
+
#
|
9
|
+
# You can provide a block to the plugin, which will be called with column name
|
10
|
+
# symbol, and should return an array of arguments to pass to +subset+.
|
11
|
+
# Using this, you can change the method name and arguments for each column.
|
12
|
+
# This block is executed in the context of the model class.
|
13
|
+
#
|
14
|
+
# Usage:
|
15
|
+
#
|
16
|
+
# # Add boolean subset methods for all columns of type :boolean
|
17
|
+
# # in all model subclasses (called before loading subclasses)
|
18
|
+
# Sequel::Model.plugin :boolean_subsets
|
19
|
+
#
|
20
|
+
# # Add subsets for all boolean columns in the Album class
|
21
|
+
# Album.plugin(:boolean_subsets)
|
22
|
+
#
|
23
|
+
# # Remove is_ from the front of the column name when creating the subset
|
24
|
+
# # method name, and use (column = 'Y') as the filter conditions
|
25
|
+
# Sequel::Model.plugin :boolean_subsets do |column|
|
26
|
+
# [column.to_s.sub(/\Ais_/, ''), {column=>'Y'}]
|
27
|
+
# end
|
28
|
+
module BooleanSubsets
|
29
|
+
# Add the boolean_attribute? class method to the model, and create
|
30
|
+
# attribute? boolean reader methods for the class's columns if the class has a dataset.
|
31
|
+
def self.configure(model, &block)
|
32
|
+
model.instance_eval do
|
33
|
+
(class << self; self; end).send(:define_method, :boolean_subset_args, &block) if block
|
34
|
+
send(:create_boolean_subsets) if @dataset
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
module ClassMethods
|
39
|
+
Plugins.after_set_dataset(self, :create_boolean_subsets)
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# The arguments to use when automatically defining a boolean subset for the given column.
|
44
|
+
def boolean_subset_args(c)
|
45
|
+
[c, {c=>true}]
|
46
|
+
end
|
47
|
+
|
48
|
+
# Add subset methods for all of the boolean columns in this model.
|
49
|
+
def create_boolean_subsets
|
50
|
+
cs = columns rescue return
|
51
|
+
cs.each{|c| subset(*boolean_subset_args(c)) if db_schema[c][:type] == :boolean}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/sequel/plugins/list.rb
CHANGED
@@ -87,15 +87,6 @@ module Sequel
|
|
87
87
|
list_dataset.first(position_field => p)
|
88
88
|
end
|
89
89
|
|
90
|
-
# Set the value of the position_field to the maximum value plus 1 unless the
|
91
|
-
# position field already has a value.
|
92
|
-
def before_create
|
93
|
-
unless get_column_value(position_field)
|
94
|
-
set_column_value("#{position_field}=", list_dataset.max(position_field).to_i+1)
|
95
|
-
end
|
96
|
-
super
|
97
|
-
end
|
98
|
-
|
99
90
|
# When destroying an instance, move all entries after the instance down
|
100
91
|
# one position, so that there aren't any gaps
|
101
92
|
def after_destroy
|
@@ -179,6 +170,15 @@ module Sequel
|
|
179
170
|
|
180
171
|
private
|
181
172
|
|
173
|
+
# Set the value of the position_field to the maximum value plus 1 unless the
|
174
|
+
# position field already has a value.
|
175
|
+
def _before_validation
|
176
|
+
unless get_column_value(position_field)
|
177
|
+
set_column_value("#{position_field}=", list_dataset.max(position_field).to_i+1)
|
178
|
+
end
|
179
|
+
super
|
180
|
+
end
|
181
|
+
|
182
182
|
# The model's position field, an instance method for ease of use.
|
183
183
|
def position_field
|
184
184
|
model.position_field
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Sequel
|
2
|
+
module Plugins
|
3
|
+
# The subset_conditions plugin creates an additional *_conditions method
|
4
|
+
# for every subset created, which returns the filter conditions the subset
|
5
|
+
# uses. This can be useful if you want to use the conditions for a separate
|
6
|
+
# filter or combine them with OR.
|
7
|
+
#
|
8
|
+
# Usage:
|
9
|
+
#
|
10
|
+
# # Add subset_conditions in the Album class
|
11
|
+
# Album.plugin :subset_conditions
|
12
|
+
#
|
13
|
+
# # This will now create a published_conditions method
|
14
|
+
# Album.subset :published, :published => true
|
15
|
+
#
|
16
|
+
# Album.where(Album.published_conditions).sql
|
17
|
+
# # SELECT * FROM albums WHERE (published IS TRUE)
|
18
|
+
#
|
19
|
+
# Album.exclude(Album.published_conditions).sql
|
20
|
+
# # SELECT * FROM albums WHERE (published IS NOT TRUE)
|
21
|
+
#
|
22
|
+
# Album.where(Sequel.|(Album.published_conditions, :ready=>true)).sql
|
23
|
+
# # SELECT * FROM albums WHERE ((published IS TRUE) OR (ready IS TRUE))
|
24
|
+
module SubsetConditions
|
25
|
+
module ClassMethods
|
26
|
+
# Also create a method that returns the conditions the filter uses.
|
27
|
+
def subset(name, *args, &block)
|
28
|
+
super
|
29
|
+
cond = args
|
30
|
+
cond = cond.first if cond.size == 1
|
31
|
+
def_dataset_method(:"#{name}_conditions"){filter_expr(cond, &block)}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/sequel/version.rb
CHANGED
@@ -3,7 +3,7 @@ module Sequel
|
|
3
3
|
MAJOR = 4
|
4
4
|
# The minor version of Sequel. Bumped for every non-patch level
|
5
5
|
# release, generally around once a month.
|
6
|
-
MINOR =
|
6
|
+
MINOR = 28
|
7
7
|
# The tiny version of Sequel. Usually 0, only bumped for bugfix
|
8
8
|
# releases that fix regressions from previous versions.
|
9
9
|
TINY = 0
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
2
|
+
|
3
|
+
describe "boolean_subsets plugin" do
|
4
|
+
before do
|
5
|
+
@db = Sequel::Database.new
|
6
|
+
def @db.supports_schema_parsing?() true end
|
7
|
+
def @db.schema(*args)
|
8
|
+
[[:asdaf9898as, {}], [:active, {:type=>:boolean}]]
|
9
|
+
end
|
10
|
+
|
11
|
+
@c = Class.new(Sequel::Model(@db[:items]))
|
12
|
+
@p = proc do
|
13
|
+
@columns = [:asdaf9898as, :active]
|
14
|
+
def columns; @columns; end
|
15
|
+
end
|
16
|
+
@c.instance_eval(&@p)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should create subsets only for boolean attributes" do
|
20
|
+
@c.plugin(:boolean_subsets)
|
21
|
+
@c.active.sql.must_equal "SELECT * FROM items WHERE (active IS TRUE)"
|
22
|
+
@c.respond_to?(:asdaf9898as).must_equal false
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should handle a block passed to the plugin" do
|
26
|
+
@c.plugin(:boolean_subsets){|c| ["where_#{c}", c]}
|
27
|
+
@c.where_active.sql.must_equal "SELECT * FROM items WHERE active"
|
28
|
+
@c.respond_to?(:active).must_equal false
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should create boolean subsets when set_dataset is called" do
|
32
|
+
c = Class.new(Sequel::Model(@db))
|
33
|
+
c.instance_eval(&@p)
|
34
|
+
c.plugin(:boolean_subsets)
|
35
|
+
c.respond_to?(:active).must_equal false
|
36
|
+
|
37
|
+
c.set_dataset(@db[:items])
|
38
|
+
c.active.sql.must_equal "SELECT * FROM items WHERE (active IS TRUE)"
|
39
|
+
c.respond_to?(:asdaf9898as).must_equal false
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should handle cases where getting the columns raises an error" do
|
43
|
+
@c.meta_def(:columns){raise Sequel::Error}
|
44
|
+
@c.plugin(:boolean_subsets)
|
45
|
+
@c.respond_to?(:active).must_equal false
|
46
|
+
end
|
47
|
+
end
|
@@ -264,4 +264,15 @@ describe "List plugin" do
|
|
264
264
|
@o.prev(-1).must_equal @c.load(:id=>9, :position=>4)
|
265
265
|
@db.sqls.must_equal ["SELECT * FROM items WHERE (position = 4) ORDER BY position LIMIT 1"]
|
266
266
|
end
|
267
|
+
|
268
|
+
it "should work correctly with validation on position" do
|
269
|
+
@c.class_eval do
|
270
|
+
def validate
|
271
|
+
super
|
272
|
+
errors.add(:position, "not set") unless position
|
273
|
+
end
|
274
|
+
end
|
275
|
+
@c.create
|
276
|
+
@db.sqls.must_equal ["SELECT max(position) AS max FROM items LIMIT 1", "INSERT INTO items (position) VALUES (2)", "SELECT * FROM items WHERE (id = 10) ORDER BY position LIMIT 1"]
|
277
|
+
end
|
267
278
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
|
2
|
+
|
3
|
+
describe "subset_conditions plugin" do
|
4
|
+
before do
|
5
|
+
@c = Class.new(Sequel::Model(:a))
|
6
|
+
@c.plugin :subset_conditions
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should provide *_conditions method return the arguments passed" do
|
10
|
+
@c.subset(:published, :published => true)
|
11
|
+
@c.where(@c.published_conditions).sql.must_equal @c.published.sql
|
12
|
+
|
13
|
+
@c.subset(:active, :active)
|
14
|
+
@c.where(@c.active_conditions).sql.must_equal @c.active.sql
|
15
|
+
|
16
|
+
@c.subset(:active_published, :active, :published => true)
|
17
|
+
@c.where(@c.active_published_conditions).sql.must_equal @c.active_published.sql
|
18
|
+
@c.where(Sequel.&(@c.active_conditions, @c.published_conditions)).sql.must_equal @c.active_published.sql
|
19
|
+
@c.where(Sequel.|(@c.active_conditions, @c.published_conditions)).sql.must_equal "SELECT * FROM a WHERE (active OR (published IS TRUE))"
|
20
|
+
@c.where(Sequel.|(@c.active_published_conditions, :foo)).sql.must_equal "SELECT * FROM a WHERE ((active AND (published IS TRUE)) OR foo)"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should work with blocks" do
|
24
|
+
p1 = proc{{:published=>true}}
|
25
|
+
@c.subset(:published, &p1)
|
26
|
+
@c.where(@c.published_conditions).sql.must_equal @c.published.sql
|
27
|
+
|
28
|
+
p2 = proc{:active}
|
29
|
+
@c.subset(:active, &p2)
|
30
|
+
@c.where(@c.active_conditions).sql.must_equal @c.active.sql
|
31
|
+
|
32
|
+
@c.subset(:active_published, p2, &p1)
|
33
|
+
@c.where(@c.active_published_conditions).sql.must_equal @c.active_published.sql
|
34
|
+
@c.where(Sequel.&(@c.active_conditions, @c.published_conditions)).sql.must_equal @c.active_published.sql
|
35
|
+
@c.where(Sequel.|(@c.active_conditions, @c.published_conditions)).sql.must_equal "SELECT * FROM a WHERE (active OR (published IS TRUE))"
|
36
|
+
@c.where(Sequel.|(@c.active_published_conditions, :foo)).sql.must_equal "SELECT * FROM a WHERE ((active AND (published IS TRUE)) OR foo)"
|
37
|
+
end
|
38
|
+
end
|
data/spec/model/record_spec.rb
CHANGED
@@ -67,6 +67,12 @@ describe "Model#save" do
|
|
67
67
|
DB.sqls.must_equal ["INSERT INTO items (x) VALUES (1)", "SELECT * FROM items WHERE (id = 13) LIMIT 1"]
|
68
68
|
end
|
69
69
|
|
70
|
+
it "should raise if the object can't be refreshed after save" do
|
71
|
+
o = @c.new(:x => 1)
|
72
|
+
@c.instance_dataset._fetch =@c.dataset._fetch = []
|
73
|
+
proc{o.save}.must_raise(Sequel::NoExistingObject)
|
74
|
+
end
|
75
|
+
|
70
76
|
it "should use dataset's insert_select method if present" do
|
71
77
|
ds = @c.instance_dataset
|
72
78
|
ds._fetch = {:y=>2}
|
@@ -1738,7 +1744,7 @@ describe Sequel::Model, "#refresh" do
|
|
1738
1744
|
it "should raise if the instance is not found" do
|
1739
1745
|
@m = @c.new(:id => 555)
|
1740
1746
|
@c.instance_dataset._fetch =@c.dataset._fetch = []
|
1741
|
-
proc {@m.refresh}.must_raise(Sequel::
|
1747
|
+
proc {@m.refresh}.must_raise(Sequel::NoExistingObject)
|
1742
1748
|
DB.sqls.must_equal ["SELECT * FROM items WHERE (id = 555) LIMIT 1"]
|
1743
1749
|
end
|
1744
1750
|
|
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.
|
4
|
+
version: 4.28.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: 2015-
|
11
|
+
date: 2015-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -228,6 +228,7 @@ extra_rdoc_files:
|
|
228
228
|
- doc/release_notes/4.25.0.txt
|
229
229
|
- doc/release_notes/4.26.0.txt
|
230
230
|
- doc/release_notes/4.27.0.txt
|
231
|
+
- doc/release_notes/4.28.0.txt
|
231
232
|
files:
|
232
233
|
- CHANGELOG
|
233
234
|
- MIT-LICENSE
|
@@ -343,6 +344,7 @@ files:
|
|
343
344
|
- doc/release_notes/4.25.0.txt
|
344
345
|
- doc/release_notes/4.26.0.txt
|
345
346
|
- doc/release_notes/4.27.0.txt
|
347
|
+
- doc/release_notes/4.28.0.txt
|
346
348
|
- doc/release_notes/4.3.0.txt
|
347
349
|
- doc/release_notes/4.4.0.txt
|
348
350
|
- doc/release_notes/4.5.0.txt
|
@@ -535,6 +537,7 @@ files:
|
|
535
537
|
- lib/sequel/plugins/before_after_save.rb
|
536
538
|
- lib/sequel/plugins/blacklist_security.rb
|
537
539
|
- lib/sequel/plugins/boolean_readers.rb
|
540
|
+
- lib/sequel/plugins/boolean_subsets.rb
|
538
541
|
- lib/sequel/plugins/caching.rb
|
539
542
|
- lib/sequel/plugins/class_table_inheritance.rb
|
540
543
|
- lib/sequel/plugins/column_conflicts.rb
|
@@ -584,6 +587,7 @@ files:
|
|
584
587
|
- lib/sequel/plugins/static_cache.rb
|
585
588
|
- lib/sequel/plugins/string_stripper.rb
|
586
589
|
- lib/sequel/plugins/subclasses.rb
|
590
|
+
- lib/sequel/plugins/subset_conditions.rb
|
587
591
|
- lib/sequel/plugins/table_select.rb
|
588
592
|
- lib/sequel/plugins/tactical_eager_loading.rb
|
589
593
|
- lib/sequel/plugins/timestamps.rb
|
@@ -637,6 +641,7 @@ files:
|
|
637
641
|
- spec/extensions/blacklist_security_spec.rb
|
638
642
|
- spec/extensions/blank_spec.rb
|
639
643
|
- spec/extensions/boolean_readers_spec.rb
|
644
|
+
- spec/extensions/boolean_subsets_spec.rb
|
640
645
|
- spec/extensions/caching_spec.rb
|
641
646
|
- spec/extensions/class_table_inheritance_spec.rb
|
642
647
|
- spec/extensions/column_conflicts_spec.rb
|
@@ -737,6 +742,7 @@ files:
|
|
737
742
|
- spec/extensions/string_date_time_spec.rb
|
738
743
|
- spec/extensions/string_stripper_spec.rb
|
739
744
|
- spec/extensions/subclasses_spec.rb
|
745
|
+
- spec/extensions/subset_conditions_spec.rb
|
740
746
|
- spec/extensions/table_select_spec.rb
|
741
747
|
- spec/extensions/tactical_eager_loading_spec.rb
|
742
748
|
- spec/extensions/thread_local_timezones_spec.rb
|
@@ -858,4 +864,3 @@ signing_key:
|
|
858
864
|
specification_version: 4
|
859
865
|
summary: The Database Toolkit for Ruby
|
860
866
|
test_files: []
|
861
|
-
has_rdoc: true
|