philtre 0.1.1 → 0.1.2
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.
- checksums.yaml +5 -5
- data/.travis.yml +11 -7
- data/Gemfile +4 -0
- data/History.txt +4 -0
- data/lib/philtre/grinder.rb +9 -2
- data/lib/philtre/version.rb +1 -1
- data/philtre.gemspec +2 -1
- data/spec/dataset_spec.rb +1 -1
- data/spec/filter_spec.rb +20 -13
- data/spec/grinder_spec.rb +2 -2
- metadata +21 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8bdfc9784c01323889c0147bb0addfcaa54eb8a5fba82241d2217261763b7bc0
|
4
|
+
data.tar.gz: 4caf87fc11f80fd2c9affbc30068909811d381a64f144a48b46f4aeedec54ceb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bcdfc3a3c39d329cc3cc992e0a2b96f040349b387d5e704348114eee33f70ec87bab510afa90cd8a2190074f72b5b54f3f9d2096fb7b5f876d7bd46b1f6d872f
|
7
|
+
data.tar.gz: de2a824f0846f20216ccd1f3cd7847fcaa12ad1be786b4771be1ce45ceaaf33a52d19ea88a209577420751589883f35211cf004948e61f2522b1718f49c0fe36
|
data/.travis.yml
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
|
7
|
-
|
8
|
-
- jruby-9.
|
9
|
-
-
|
3
|
+
- 2.4
|
4
|
+
- 2.5
|
5
|
+
- 2.6
|
6
|
+
|
7
|
+
# srsly, not fighting with this
|
8
|
+
# - jruby-9.0
|
9
|
+
# - jruby-9.1
|
10
|
+
# - jruby-9.2
|
11
|
+
# does not install on travis as of 26-Oct-2016
|
12
|
+
# - rbx
|
13
|
+
# - rbx-2
|
10
14
|
script: bundle exec rspec spec
|
data/Gemfile
CHANGED
data/History.txt
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
== 0.1.2
|
2
|
+
* fix grinder and various specs to be compatible with Sequel-5.x (tested with Sequel-5.24.0)
|
3
|
+
* drop travis support for jruby and <ruby-2.4.0 - it might still work ok but it won't be ci tested
|
4
|
+
|
1
5
|
== 0.1.1
|
2
6
|
* drop support for ruby-2.0.0
|
3
7
|
* add customisable parameter filtering
|
data/lib/philtre/grinder.rb
CHANGED
@@ -124,8 +124,15 @@ protected
|
|
124
124
|
obj.clone Hash[ v(obj.opts).map{|k,val| [k, val.is_a?(Philtre::EmptyExpression) ? false : val]} ]
|
125
125
|
|
126
126
|
# for Sequel::Models
|
127
|
-
when ->
|
128
|
-
|
127
|
+
when -> obj { obj.is_a?(Class) && obj.ancestors.include?(Sequel::Model) }
|
128
|
+
# From sequel-5.x.x, I suspect,
|
129
|
+
# SomeModel.dataset.opts includes :row_proc => SomeModel and :model => SomeModel
|
130
|
+
# which sends v into an endless loop.
|
131
|
+
opts = obj.dataset.opts.reject{|_,v| v == obj}
|
132
|
+
transformed = v(opts).map do |k,val|
|
133
|
+
[k, val.is_a?(Philtre::EmptyExpression) ? false : val]
|
134
|
+
end
|
135
|
+
obj.dataset.clone Hash[transformed]
|
129
136
|
|
130
137
|
# for other things that are convertible to dataset
|
131
138
|
when ->(obj){obj.respond_to? :to_dataset}
|
data/lib/philtre/version.rb
CHANGED
data/philtre.gemspec
CHANGED
@@ -21,8 +21,9 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency 'sequel'
|
22
22
|
spec.add_dependency 'fastandand'
|
23
23
|
|
24
|
-
spec.add_development_dependency 'bundler'
|
24
|
+
spec.add_development_dependency 'bundler'
|
25
25
|
spec.add_development_dependency 'rake'
|
26
26
|
spec.add_development_dependency 'rspec'
|
27
27
|
spec.add_development_dependency 'faker'
|
28
|
+
spec.add_development_dependency 'strscan'
|
28
29
|
end
|
data/spec/dataset_spec.rb
CHANGED
@@ -9,7 +9,7 @@ Sequel.extension :core_extensions
|
|
9
9
|
|
10
10
|
describe Sequel::Dataset do
|
11
11
|
subject do
|
12
|
-
Sequel.mock[:t].filter( :name.lieu, :title.lieu ).order( :birth_year.lieu )
|
12
|
+
Sequel.mock[:t].filter( Sequel.&(:name.lieu, :title.lieu) ).order( :birth_year.lieu )
|
13
13
|
end
|
14
14
|
|
15
15
|
describe '#grind' do
|
data/spec/filter_spec.rb
CHANGED
@@ -8,10 +8,17 @@ describe Philtre::Filter do
|
|
8
8
|
# must be in before otherwise it's unpleasant to hook the
|
9
9
|
# class in to the dataset.
|
10
10
|
before :all do
|
11
|
-
@dataset = Sequel.mock[:planks]
|
11
|
+
@dataset = Sequel.mock[:planks].dup
|
12
12
|
class Plank < Sequel::Model; end
|
13
13
|
# just stop whining and generate the bleedin' sql, k?
|
14
|
-
def @dataset.supports_regexp?; true end
|
14
|
+
# def @dataset.supports_regexp?; true end
|
15
|
+
end
|
16
|
+
|
17
|
+
# replacement for remove Sequel::Dataset.sql_literal
|
18
|
+
# that is, create a string from an expression and dataset
|
19
|
+
def sql_of( expr, dataset)
|
20
|
+
dataset.send :literal_expression_append, rv=String.new, expr
|
21
|
+
rv
|
15
22
|
end
|
16
23
|
|
17
24
|
attr_reader :dataset
|
@@ -85,7 +92,7 @@ describe Philtre::Filter do
|
|
85
92
|
|
86
93
|
it 'defaults to asc' do
|
87
94
|
filter = described_class.new one: 1, two: 2, order: 'things'
|
88
|
-
sqlfrag = filter.order_expr(:things)
|
95
|
+
sqlfrag = sql_of filter.order_expr(:things), dataset
|
89
96
|
sqlfrag.should == 'things ASC'
|
90
97
|
end
|
91
98
|
end
|
@@ -148,7 +155,7 @@ describe Philtre::Filter do
|
|
148
155
|
expr.args.first.should == Sequel.expr(field)
|
149
156
|
expr.args.last.should == value
|
150
157
|
|
151
|
-
expr
|
158
|
+
sql_of(expr, @dataset).should be_a(String)
|
152
159
|
end
|
153
160
|
end
|
154
161
|
|
@@ -255,11 +262,11 @@ describe Philtre::Filter do
|
|
255
262
|
end
|
256
263
|
|
257
264
|
it 'substitutes a field name' do
|
258
|
-
expr = Sequel.expr( filter.to_expr( :owner_like, 'hallelujah', :
|
265
|
+
expr = Sequel.expr( filter.to_expr( :owner_like, 'hallelujah', Sequel.qualify(:heavens, :salutation) ) )
|
259
266
|
expr.op.should == :'~*'
|
260
267
|
expr.args.first.should be_kind_of(Sequel::SQL::QualifiedIdentifier)
|
261
|
-
expr.args.first.column.should ==
|
262
|
-
expr.args.first.table.should ==
|
268
|
+
expr.args.first.column.should == :salutation
|
269
|
+
expr.args.first.table.should == :heavens
|
263
270
|
expr.args.last.should == 'hallelujah'
|
264
271
|
end
|
265
272
|
|
@@ -273,7 +280,7 @@ describe Philtre::Filter do
|
|
273
280
|
|
274
281
|
expr = filter.to_expr( :year_range, [1984, 1970, 2012] )
|
275
282
|
expr.should be_a(Sequel::SQL::Expression)
|
276
|
-
expr
|
283
|
+
sql_of(expr, dataset).should == '((year >= 1970) AND (year <= 2012))'
|
277
284
|
end
|
278
285
|
end
|
279
286
|
|
@@ -294,13 +301,13 @@ describe Philtre::Filter do
|
|
294
301
|
end
|
295
302
|
|
296
303
|
it 'alternate name' do
|
297
|
-
expr = filter.expr_for(:name, :
|
304
|
+
expr = filter.expr_for(:name, Sequel.qualify(:things, :name) )
|
298
305
|
expr.should_not be_nil
|
299
306
|
expr.should be_a(Sequel::SQL::BooleanExpression)
|
300
307
|
|
301
308
|
expr.args.first.tap do |field_expr|
|
302
|
-
field_expr.column.should ==
|
303
|
-
field_expr.table.should ==
|
309
|
+
field_expr.column.should == :name
|
310
|
+
field_expr.table.should == :things
|
304
311
|
end
|
305
312
|
end
|
306
313
|
end
|
@@ -314,11 +321,11 @@ describe Philtre::Filter do
|
|
314
321
|
end
|
315
322
|
|
316
323
|
it 'ascending' do
|
317
|
-
filter.order_for(:year)
|
324
|
+
sql_of(filter.order_for(:year), dataset).should == 'year ASC'
|
318
325
|
end
|
319
326
|
|
320
327
|
it 'name clash' do
|
321
|
-
filter.order_for(:title)
|
328
|
+
sql_of(filter.order_for(:title), dataset).should == 'title ASC'
|
322
329
|
end
|
323
330
|
end
|
324
331
|
|
data/spec/grinder_spec.rb
CHANGED
@@ -7,7 +7,7 @@ Sequel.extension :core_extensions
|
|
7
7
|
|
8
8
|
describe Philtre::Grinder do
|
9
9
|
def ds
|
10
|
-
@ds ||= Sequel.mock[:t].filter( :name.lieu, :title.lieu ).order( :birth_year.lieu )
|
10
|
+
@ds ||= Sequel.mock[:t].filter( Sequel.&(:name.lieu, :title.lieu) ).order( :birth_year.lieu )
|
11
11
|
end
|
12
12
|
|
13
13
|
def other_ds
|
@@ -138,7 +138,7 @@ describe Philtre::Grinder do
|
|
138
138
|
@ds ||=
|
139
139
|
begin
|
140
140
|
subselect = Sequel.mock[:sub].select(:id)
|
141
|
-
Sequel.mock[:t].filter( :name.lieu, :title.lieu, person_id: subselect ).order( :birth_year.lieu )
|
141
|
+
Sequel.mock[:t].filter( Sequel.&(:name.lieu, :title.lieu, person_id: subselect) ).order( :birth_year.lieu )
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: philtre
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Anderson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: strscan
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description: Encode various filtering operations in http parameter hashes
|
98
112
|
email:
|
99
113
|
- panic@semiosix.com
|
@@ -147,8 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
161
|
- !ruby/object:Gem::Version
|
148
162
|
version: '0'
|
149
163
|
requirements: []
|
150
|
-
|
151
|
-
rubygems_version: 2.5.1
|
164
|
+
rubygems_version: 3.0.3
|
152
165
|
signing_key:
|
153
166
|
specification_version: 4
|
154
167
|
summary: http parameter-hash friendly filtering for Sequel
|