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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c75bbf7d7dfed6ed3cd5afb6f4477f48b613e8e2
4
- data.tar.gz: 8d4dd4dc4075865c44baa7872a03ff6dbf21fed1
2
+ SHA256:
3
+ metadata.gz: 8bdfc9784c01323889c0147bb0addfcaa54eb8a5fba82241d2217261763b7bc0
4
+ data.tar.gz: 4caf87fc11f80fd2c9affbc30068909811d381a64f144a48b46f4aeedec54ceb
5
5
  SHA512:
6
- metadata.gz: dcb1f7273340067c4d12faa431406a8b1f9f8658730d1516cdb1bf9568b95033f71e6631c497c6dcef1854193cecba2d18754a06406e5546cc0cff41cedd975d
7
- data.tar.gz: 057199f52f8ec5b894020acb67e618ccfe952e450b374e8e29d68163e587ba8aa756376d8f5ba11e0bc3961634968a2fa273db3ac142d7df9b9dc4600f7179b1
6
+ metadata.gz: bcdfc3a3c39d329cc3cc992e0a2b96f040349b387d5e704348114eee33f70ec87bab510afa90cd8a2190074f72b5b54f3f9d2096fb7b5f876d7bd46b1f6d872f
7
+ data.tar.gz: de2a824f0846f20216ccd1f3cd7847fcaa12ad1be786b4771be1ce45ceaaf33a52d19ea88a209577420751589883f35211cf004948e61f2522b1718f49c0fe36
@@ -1,10 +1,14 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
4
- - 2.1.10
5
- - 2.2.5
6
- - 2.3.1
7
- - jruby-9.0.5.0
8
- - jruby-9.1.0.0
9
- - rbx-2
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
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in philtre.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'pry-debundle'
8
+ end
@@ -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
@@ -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 ->(obj){obj.respond_to? :dataset}
128
- v obj.dataset
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}
@@ -1,3 +1,3 @@
1
1
  module Philtre #:nodoc:
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -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', '~> 1.5'
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
@@ -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
@@ -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).sql_literal(dataset)
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.sql_literal(@dataset).should be_a(String)
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', :heavens__salutation ) )
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 == 'salutation'
262
- expr.args.first.table.should == 'heavens'
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.sql_literal(dataset).should == '((year >= 1970) AND (year <= 2012))'
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, :things__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 == 'name'
303
- field_expr.table.should == 'things'
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).sql_literal(dataset).should == 'year ASC'
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).sql_literal(dataset).should == 'title ASC'
328
+ sql_of(filter.order_for(:title), dataset).should == 'title ASC'
322
329
  end
323
330
  end
324
331
 
@@ -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.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: 2016-10-27 00:00:00.000000000 Z
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: '1.5'
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: '1.5'
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
- rubyforge_project:
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