philtre 0.1.0 → 0.1.1
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 +4 -4
- data/.travis.yml +6 -3
- data/AUTHORS +2 -0
- data/History.txt +7 -0
- data/README.md +10 -7
- data/lib/philtre/filter.rb +16 -4
- data/lib/philtre/grinder.rb +5 -1
- data/lib/philtre/predicate_splitter.rb +1 -1
- data/lib/philtre/predicates.rb +9 -4
- data/lib/philtre/sequel_extensions.rb +14 -12
- data/lib/philtre/version.rb +1 -1
- data/philtre.gemspec +0 -2
- data/spec/dataset_spec.rb +26 -21
- data/spec/filter_spec.rb +35 -10
- data/spec/grinder_spec.rb +5 -6
- data/spec/predicate_splitter_spec.rb +25 -5
- data/spec/spec_helper.rb +14 -0
- data/tasks/console.rake +1 -1
- metadata +7 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c75bbf7d7dfed6ed3cd5afb6f4477f48b613e8e2
|
4
|
+
data.tar.gz: 8d4dd4dc4075865c44baa7872a03ff6dbf21fed1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dcb1f7273340067c4d12faa431406a8b1f9f8658730d1516cdb1bf9568b95033f71e6631c497c6dcef1854193cecba2d18754a06406e5546cc0cff41cedd975d
|
7
|
+
data.tar.gz: 057199f52f8ec5b894020acb67e618ccfe952e450b374e8e29d68163e587ba8aa756376d8f5ba11e0bc3961634968a2fa273db3ac142d7df9b9dc4600f7179b1
|
data/.travis.yml
CHANGED
data/AUTHORS
ADDED
data/History.txt
ADDED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# philtre [](http://badge.fury.io/rb/philtre) [](https://travis-ci.org/djellemah/philtre)
|
2
2
|
|
3
3
|
It's the [Sequel](http://sequel.jeremyevans.net) equivalent for Ransack, Metasearch, Searchlogic. If
|
4
4
|
this doesn't make you fall in love, I don't know what will :-p
|
@@ -75,6 +75,8 @@ There are a range of predefined predicates, mostly borrowed from the other searc
|
|
75
75
|
not_blank
|
76
76
|
like_all
|
77
77
|
like_any
|
78
|
+
null
|
79
|
+
not_null
|
78
80
|
```
|
79
81
|
|
80
82
|
## Custom Predicates
|
@@ -104,8 +106,8 @@ Now you can pass the filter_parameter hash ```{tagged_by_id: 45}```.
|
|
104
106
|
|
105
107
|
The result of a predicate block should be a ```Sequel::SQL::Expression``` (ie
|
106
108
|
one of Sequel's hash expressions in the simplest case) which will work instead
|
107
|
-
of its named placeholder.
|
108
|
-
clause it
|
109
|
+
of its named placeholder. So for example, if the placeholder is inside a SELECT
|
110
|
+
clause it wouldn't work to give it an ORDER BY expression.
|
109
111
|
|
110
112
|
2) You could also inherit from ```Philtre::Filter``` and override
|
111
113
|
```#predicates```. And optionally override ```Philtre.new``` (which is just a
|
@@ -163,7 +165,7 @@ is canonical in that all the other possibilities use it.
|
|
163
165
|
|
164
166
|
## Highly Advanced Usage
|
165
167
|
|
166
|
-
Sometimes method chaining gets ugly. So you can say
|
168
|
+
Sometimes method chaining gets ugly. So you can install gem ripar, then you can say
|
167
169
|
|
168
170
|
``` ruby
|
169
171
|
store_id_range = 20..90
|
@@ -174,9 +176,10 @@ Sometimes method chaining gets ugly. So you can say
|
|
174
176
|
end
|
175
177
|
```
|
176
178
|
|
177
|
-
Notice that values outside the block are accessible inside, _without_
|
178
|
-
|
179
|
-
the binding lookup, so may result in errors that
|
179
|
+
Notice that values outside the block are accessible inside, _without_ the need
|
180
|
+
for a block parameter. This uses [Ripar](https://github.com/djellemah/ripar/)
|
181
|
+
under the cover and indirects the binding lookup, so may result in errors that
|
182
|
+
you won't expect.
|
180
183
|
|
181
184
|
## Specs
|
182
185
|
|
data/lib/philtre/filter.rb
CHANGED
@@ -28,11 +28,12 @@ module Philtre
|
|
28
28
|
def initialize( filter_parameters = nil, &custom_predicate_block )
|
29
29
|
# This must be a new instance of Hash, because sometimes
|
30
30
|
# HashWithIndifferentAccess is passed in, which breaks things in here.
|
31
|
+
|
31
32
|
# Don't use symbolize_keys because that creates a dependency on ActiveSupport
|
33
|
+
# have to iterate anyway to convert keys to symbols
|
32
34
|
@filter_parameters =
|
33
35
|
if filter_parameters
|
34
|
-
|
35
|
-
filter_parameters.inject({}){|ha,(k,v)| ha[k.to_sym] = v; ha}
|
36
|
+
filter_parameters.each_with_object(Hash.new){|(k,v),ha| ha[k.to_sym] = v}
|
36
37
|
else
|
37
38
|
{}
|
38
39
|
end
|
@@ -67,12 +68,22 @@ module Philtre
|
|
67
68
|
|
68
69
|
alias apply call
|
69
70
|
|
71
|
+
# called by valued_parameters to generate the set of expressions. This
|
72
|
+
# returns true for a value that show up in the set of expressions, false
|
73
|
+
# otherwise.
|
74
|
+
#
|
75
|
+
# Intended to be overridden if necessary.
|
76
|
+
def valued_parameter?( key, value )
|
77
|
+
value.is_a?(Array) || !value.blank?
|
78
|
+
end
|
79
|
+
|
70
80
|
# Values in the parameter list which are not blank, and not
|
71
81
|
# an ordering. That is, parameters which will be used to generate
|
72
82
|
# the filter expression.
|
73
83
|
def valued_parameters
|
74
|
-
filter_parameters.select do |key,value|
|
75
|
-
|
84
|
+
@valued_parameters ||= filter_parameters.select do |key,value|
|
85
|
+
# :order is special, it must always be excluded
|
86
|
+
key.to_sym != :order && valued_parameter?(key,value)
|
76
87
|
end
|
77
88
|
end
|
78
89
|
|
@@ -164,6 +175,7 @@ module Philtre
|
|
164
175
|
@order_expressions = nil
|
165
176
|
@order_hash = nil
|
166
177
|
@order_clause = nil
|
178
|
+
@valued_parameters = nil
|
167
179
|
end
|
168
180
|
|
169
181
|
def clone( extra_parameters = {} )
|
data/lib/philtre/grinder.rb
CHANGED
@@ -17,7 +17,7 @@ module Philtre
|
|
17
17
|
# split suffix from the key and store the two values as name and op
|
18
18
|
# return truthy if successful
|
19
19
|
def split_key( suffix )
|
20
|
-
rv = @key =~
|
20
|
+
rv = @key =~ /\A(?:(.*?)_)?(#{suffix})\z/
|
21
21
|
@field, @op = $1, $2
|
22
22
|
rv
|
23
23
|
end
|
data/lib/philtre/predicates.rb
CHANGED
@@ -60,12 +60,15 @@ module Philtre
|
|
60
60
|
alias [] call
|
61
61
|
|
62
62
|
def predicate_names
|
63
|
-
|
63
|
+
# ruby-2.3 no longer stores methods in order of definition. So sort by
|
64
|
+
# longest so that we don't get false positives from shorter predicates
|
65
|
+
# that are substrings of longer predicates, eg blank matching
|
66
|
+
# thing_not_blank.
|
67
|
+
DefaultPredicates.instance_methods.sort_by{|name| -name.length}
|
64
68
|
end
|
65
69
|
|
66
70
|
# Define the set of default predicates.
|
67
71
|
DefaultPredicates = PredicateDsl.new do
|
68
|
-
# longer suffixes first, so they match first in define_name_predicate
|
69
72
|
not_eq {|expr, val| ~Sequel.expr( expr => val) }
|
70
73
|
|
71
74
|
def not_like( expr, val )
|
@@ -78,13 +81,15 @@ module Philtre
|
|
78
81
|
Sequel.~(blank expr, val)
|
79
82
|
end
|
80
83
|
|
84
|
+
null {|expr,_| Sequel.expr(expr => nil)}
|
85
|
+
not_null {|expr,_| Sequel.~(Sequel.expr(expr => nil))}
|
86
|
+
|
81
87
|
def blank(expr, _)
|
82
88
|
is_nil = Sequel.expr(expr => nil)
|
83
89
|
is_empty = Sequel.expr(expr => '')
|
84
90
|
Sequel.| is_nil, is_empty
|
85
91
|
end
|
86
92
|
|
87
|
-
# and now the shorter suffixes
|
88
93
|
eq {|expr, val| Sequel.expr( expr => val) }
|
89
94
|
gt {|expr, val| expr > val }
|
90
95
|
gte( :gteq ) {|expr, val| expr >= val }
|
@@ -103,7 +108,7 @@ module Philtre
|
|
103
108
|
end
|
104
109
|
end
|
105
110
|
|
106
|
-
# make
|
111
|
+
# make them available to Predicate instances.
|
107
112
|
include DefaultPredicates
|
108
113
|
end
|
109
114
|
end
|
@@ -1,19 +1,21 @@
|
|
1
1
|
# TODO docs for this
|
2
|
-
|
3
|
-
|
2
|
+
if defined? Ripar
|
3
|
+
class Sequel::Dataset
|
4
|
+
include Ripar
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
# make the roller understand dataset method
|
7
|
+
def roller
|
8
|
+
rv = super
|
9
|
+
class << rv
|
10
|
+
def to_dataset; riven end
|
11
|
+
end
|
12
|
+
rv
|
10
13
|
end
|
11
|
-
rv
|
12
|
-
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
# roll the block and return the resulting dataset immediately
|
16
|
+
def rolled( &blk )
|
17
|
+
roller.rive &blk
|
18
|
+
end
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
data/lib/philtre/version.rb
CHANGED
data/philtre.gemspec
CHANGED
@@ -20,11 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency 'sequel'
|
22
22
|
spec.add_dependency 'fastandand'
|
23
|
-
spec.add_dependency 'ripar', '~> 0.0.3'
|
24
23
|
|
25
24
|
spec.add_development_dependency 'bundler', '~> 1.5'
|
26
25
|
spec.add_development_dependency 'rake'
|
27
26
|
spec.add_development_dependency 'rspec'
|
28
27
|
spec.add_development_dependency 'faker'
|
29
|
-
spec.add_development_dependency 'sqlite3'
|
30
28
|
end
|
data/spec/dataset_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'faker'
|
3
|
-
require 'sequel'
|
1
|
+
require_relative 'spec_helper.rb'
|
4
2
|
|
5
3
|
require_relative '../lib/philtre/grinder.rb'
|
6
4
|
require_relative '../lib/philtre/sequel_extensions.rb'
|
@@ -29,29 +27,36 @@ describe Sequel::Dataset do
|
|
29
27
|
|
30
28
|
it 'passes apply_unknown'
|
31
29
|
|
32
|
-
describe '
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
describe 'fancy stuff' do
|
31
|
+
|
32
|
+
describe '#roller' do
|
33
|
+
it 'result has to_dataset' do
|
34
|
+
pending "Ripar optionally not loaded" unless defined? Ripar
|
35
|
+
|
36
|
+
rlr = subject.roller do
|
37
|
+
where title: 'Exalted Fromaginess'
|
38
|
+
end
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
# This depends on Ripar, so it's a bit fragile
|
41
|
+
rlr.should respond_to(:__class__)
|
42
|
+
rlr.__class__.should == Ripar::Roller
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
+
rlr.should_not respond_to(:datset)
|
45
|
+
rlr.should respond_to(:to_dataset)
|
46
|
+
end
|
44
47
|
end
|
45
|
-
end
|
46
48
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
describe '#rolled' do
|
50
|
+
it 'gives back a rolled dataset' do
|
51
|
+
pending "Ripar optionally not loaded" unless defined? Ripar
|
52
|
+
|
53
|
+
rlr = subject.rolled do
|
54
|
+
where title: 'Exalted Fromaginess'
|
55
|
+
end
|
56
|
+
rlr.should be_a(Sequel::Dataset)
|
57
|
+
rlr.should_not respond_to(:datset)
|
58
|
+
rlr.should_not respond_to(:to_dataset)
|
51
59
|
end
|
52
|
-
rlr.should be_a(Sequel::Dataset)
|
53
|
-
rlr.should_not respond_to(:datset)
|
54
|
-
rlr.should_not respond_to(:to_dataset)
|
55
60
|
end
|
56
61
|
end
|
57
62
|
end
|
data/spec/filter_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'faker'
|
3
|
-
|
1
|
+
require_relative 'spec_helper.rb'
|
4
2
|
require_relative '../lib/philtre/filter.rb'
|
5
3
|
|
6
4
|
# for blank?
|
@@ -114,7 +112,7 @@ describe Philtre::Filter do
|
|
114
112
|
@dataset.order( *filter.order_clause ).sql.should =~ /order by things desc$/i
|
115
113
|
end
|
116
114
|
|
117
|
-
it '
|
115
|
+
it 'respects asc' do
|
118
116
|
filter = described_class.new one: 1, two: 2, order: 'things_desc'
|
119
117
|
@dataset.order( *filter.order_clause ).sql.should =~ /order by things desc$/i
|
120
118
|
end
|
@@ -131,7 +129,7 @@ describe Philtre::Filter do
|
|
131
129
|
end
|
132
130
|
|
133
131
|
describe '#predicates' do
|
134
|
-
EASY_PREDICATES = %i[gt gte gteq lt lte lteq eq not_eq matches like not_like]
|
132
|
+
EASY_PREDICATES = %i[gt gte gteq lt lte lteq eq not_eq matches like not_like not_null null]
|
135
133
|
TRICKY_PREDICATES = %i[like_all like_any not_blank blank]
|
136
134
|
|
137
135
|
it 'creates predicates' do
|
@@ -201,17 +199,34 @@ describe Philtre::Filter do
|
|
201
199
|
end
|
202
200
|
|
203
201
|
it 'not_blank' do
|
204
|
-
field =
|
202
|
+
field = Faker::Lorem.word
|
205
203
|
expr = described_class.predicates.call :"#{field}_not_blank", Faker::Lorem.word
|
206
204
|
|
207
205
|
expr.op.should == :AND
|
206
|
+
is_not_null, not_equals_empty = expr.args
|
208
207
|
|
209
208
|
# the not-nil part
|
210
|
-
|
209
|
+
is_not_null.op.should == :'IS NOT'
|
211
210
|
|
212
211
|
# the not empty string part
|
213
|
-
|
214
|
-
|
212
|
+
not_equals_empty.op.should == :'!='
|
213
|
+
not_equals_empty.args.last.should == ''
|
214
|
+
end
|
215
|
+
|
216
|
+
it 'blank' do
|
217
|
+
field = Faker::Lorem.word
|
218
|
+
expr = described_class.predicates.call :"#{field}_blank", Faker::Lorem.word
|
219
|
+
|
220
|
+
expr.op.should == :OR
|
221
|
+
|
222
|
+
is_null, equals_empty = expr.args
|
223
|
+
|
224
|
+
# the null part
|
225
|
+
is_null.op.should == :'IS'
|
226
|
+
|
227
|
+
# the empty string part
|
228
|
+
equals_empty.op.should == :'='
|
229
|
+
equals_empty.args.last.should == ''
|
215
230
|
end
|
216
231
|
end
|
217
232
|
|
@@ -406,11 +421,21 @@ describe Philtre::Filter do
|
|
406
421
|
sql.should =~ /select \* from planks where \(title = '\w+'\)$/i
|
407
422
|
end
|
408
423
|
|
409
|
-
it 'excludes nil values' do
|
424
|
+
it 'excludes nil values by default' do
|
410
425
|
filter.filter_parameters[:name] = nil
|
411
426
|
sql = filter.apply(@dataset).sql
|
412
427
|
sql.should =~ /select \* from planks where \(title = '\w+'\)$/i
|
413
428
|
end
|
429
|
+
|
430
|
+
it 'can customise value exclusion' do
|
431
|
+
def filter.valued_parameter?(key,value)
|
432
|
+
key != :order
|
433
|
+
end
|
434
|
+
|
435
|
+
filter.filter_parameters[:name] = nil
|
436
|
+
sql = filter.apply(@dataset).sql
|
437
|
+
sql.should =~ /SELECT \* FROM planks WHERE \(\(name IS NULL\) AND \(title = '\w+'\)\)/
|
438
|
+
end
|
414
439
|
end
|
415
440
|
|
416
441
|
describe '#empty?' do
|
data/spec/grinder_spec.rb
CHANGED
@@ -1,7 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'faker'
|
3
|
-
require 'sequel'
|
4
|
-
require 'ripar'
|
1
|
+
require_relative 'spec_helper.rb'
|
5
2
|
|
6
3
|
require_relative '../lib/philtre.rb'
|
7
4
|
|
@@ -161,6 +158,8 @@ describe Philtre::Grinder do
|
|
161
158
|
end
|
162
159
|
|
163
160
|
it 'handles rollers' do
|
161
|
+
pending "Ripar optionally not loaded" unless defined? Ripar
|
162
|
+
|
164
163
|
grinder = Philtre::Grinder.new Philtre::Filter.new(person_id: 212728)
|
165
164
|
tds = ds.roller do
|
166
165
|
where linkage: other_ds.where( :person_id.lieu )
|
@@ -172,9 +171,9 @@ describe Philtre::Grinder do
|
|
172
171
|
end
|
173
172
|
|
174
173
|
it 'handles Models' do
|
175
|
-
Sequel::Model.db = Sequel.
|
174
|
+
Sequel::Model.db = Sequel.mock
|
176
175
|
class Ods < Sequel::Model(:ods); end
|
177
176
|
Philtre::Grinder.new( Philtre::Filter.new ).transform(Ods).should be_a(Sequel::Dataset)
|
178
|
-
Philtre::Grinder.new( Philtre::Filter.new ).transform(Ods).sql.should =~ /SELECT \* FROM
|
177
|
+
Philtre::Grinder.new( Philtre::Filter.new ).transform(Ods).sql.should =~ /SELECT \* FROM ods/
|
179
178
|
end
|
180
179
|
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
|
2
|
-
require 'faker'
|
3
|
-
|
1
|
+
require_relative 'spec_helper.rb'
|
4
2
|
require_relative '../lib/philtre/predicate_splitter.rb'
|
3
|
+
require_relative '../lib/philtre/predicates.rb'
|
5
4
|
|
6
5
|
# for blank?
|
7
6
|
Sequel.extension :blank
|
@@ -28,6 +27,7 @@ describe Philtre::PredicateSplitter do
|
|
28
27
|
|
29
28
|
describe 'unsuccessful' do
|
30
29
|
let(:splitter){ Philtre::PredicateSplitter.new 'birth_year', 'fifteeen' }
|
30
|
+
|
31
31
|
it 'returns false' do
|
32
32
|
splitter.split_key( :like ).should be_falsey
|
33
33
|
end
|
@@ -44,11 +44,31 @@ describe Philtre::PredicateSplitter do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
describe 'custom predicate' do
|
47
|
-
|
48
|
-
|
47
|
+
it 'accepts the whole thing, undeterred by _' do
|
48
|
+
splitter = Philtre::PredicateSplitter.new 'custom_predicate', 'fifteeen'
|
49
49
|
(splitter === :custom_predicate).should === 0
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
53
|
+
describe "'ware the false matches, laddie" do
|
54
|
+
Philtre::Predicates::DefaultPredicates.instance_methods.each do |suffix|
|
55
|
+
word = Faker::Lorem.words(rand(1..3)) * '_'
|
56
|
+
|
57
|
+
let(:suffix){suffix}
|
58
|
+
let(:word){word}
|
59
|
+
|
60
|
+
it "#{word}#{suffix} unsplit" do
|
61
|
+
splitter = Philtre::PredicateSplitter.new "#{word}#{suffix}", 'blabla'
|
62
|
+
splitter.split_key(suffix).should be_falsey
|
63
|
+
end
|
64
|
+
|
65
|
+
it "#{word}_#{suffix} split" do
|
66
|
+
splitter = Philtre::PredicateSplitter.new "#{word}_#{suffix}", 'unbla'
|
67
|
+
splitter.split_key suffix
|
68
|
+
splitter.field.should == word.to_sym
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
52
72
|
end
|
53
73
|
end
|
54
74
|
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'faker'
|
3
|
+
require 'sequel'
|
4
|
+
|
5
|
+
# turn off the "old syntax" warnings
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.mock_with :rspec do |c|
|
8
|
+
c.syntax = [:should, :expect]
|
9
|
+
end
|
10
|
+
|
11
|
+
config.expect_with :rspec do |c|
|
12
|
+
c.syntax = [:should, :expect]
|
13
|
+
end
|
14
|
+
end
|
data/tasks/console.rake
CHANGED
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.1
|
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: 2016-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: ripar
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 0.0.3
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.0.3
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: bundler
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,20 +94,6 @@ dependencies:
|
|
108
94
|
- - ">="
|
109
95
|
- !ruby/object:Gem::Version
|
110
96
|
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: sqlite3
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
97
|
description: Encode various filtering operations in http parameter hashes
|
126
98
|
email:
|
127
99
|
- panic@semiosix.com
|
@@ -131,7 +103,9 @@ extra_rdoc_files: []
|
|
131
103
|
files:
|
132
104
|
- ".gitignore"
|
133
105
|
- ".travis.yml"
|
106
|
+
- AUTHORS
|
134
107
|
- Gemfile
|
108
|
+
- History.txt
|
135
109
|
- LICENSE.txt
|
136
110
|
- README.md
|
137
111
|
- Rakefile
|
@@ -152,6 +126,7 @@ files:
|
|
152
126
|
- spec/filter_spec.rb
|
153
127
|
- spec/grinder_spec.rb
|
154
128
|
- spec/predicate_splitter_spec.rb
|
129
|
+
- spec/spec_helper.rb
|
155
130
|
- tasks/console.rake
|
156
131
|
homepage: http://github.com/djellemah/philtre
|
157
132
|
licenses:
|
@@ -173,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
148
|
version: '0'
|
174
149
|
requirements: []
|
175
150
|
rubyforge_project:
|
176
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.5.1
|
177
152
|
signing_key:
|
178
153
|
specification_version: 4
|
179
154
|
summary: http parameter-hash friendly filtering for Sequel
|
@@ -182,3 +157,4 @@ test_files:
|
|
182
157
|
- spec/filter_spec.rb
|
183
158
|
- spec/grinder_spec.rb
|
184
159
|
- spec/predicate_splitter_spec.rb
|
160
|
+
- spec/spec_helper.rb
|