query_filter 0.2.0 → 0.2.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 +4 -4
- data/Gemfile.lock +29 -67
- data/README.md +56 -0
- data/lib/query_filter/rspec_matchers.rb +65 -0
- data/lib/query_filter/version.rb +1 -1
- data/query_filter.gemspec +3 -6
- metadata +19 -52
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6fe7cf9e804b940444eefcf3fbced4b24099d52d32f71d896bcb401fcb1e9e43
|
|
4
|
+
data.tar.gz: e61f5e207c0a6c7fccae4d44a6a5990cde48f2432d0f520ea47767a417323504
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: caa899332d0b1034baf784a418c1788d70220380d783069edf8b653729d47bdacd67016828546dfe41a078e0000e72b54379b5f60a67f5bf1e4823f4e8e72862
|
|
7
|
+
data.tar.gz: 931eed522f0e6d00cab63631967f70729f5d22067016d12a89220d34ee38513213c47ced8090c1062e10f9d0001490dffdc9913b9cc3a0dc84c4395e3bd4e2b0
|
data/Gemfile.lock
CHANGED
|
@@ -1,83 +1,47 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
query_filter (0.2.
|
|
4
|
+
query_filter (0.2.2)
|
|
5
5
|
activesupport (>= 4.0)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
-
activemodel (
|
|
11
|
-
activesupport (=
|
|
12
|
-
activerecord (
|
|
13
|
-
activemodel (=
|
|
14
|
-
activesupport (=
|
|
15
|
-
|
|
16
|
-
activesupport (5.2.3)
|
|
10
|
+
activemodel (6.0.3.2)
|
|
11
|
+
activesupport (= 6.0.3.2)
|
|
12
|
+
activerecord (6.0.3.2)
|
|
13
|
+
activemodel (= 6.0.3.2)
|
|
14
|
+
activesupport (= 6.0.3.2)
|
|
15
|
+
activesupport (6.0.3.2)
|
|
17
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
18
17
|
i18n (>= 0.7, < 2)
|
|
19
18
|
minitest (~> 5.1)
|
|
20
19
|
tzinfo (~> 1.1)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
ffi (1.10.0)
|
|
26
|
-
formatador (0.2.5)
|
|
27
|
-
guard (2.15.0)
|
|
28
|
-
formatador (>= 0.2.4)
|
|
29
|
-
listen (>= 2.7, < 4.0)
|
|
30
|
-
lumberjack (>= 1.0.12, < 2.0)
|
|
31
|
-
nenv (~> 0.1)
|
|
32
|
-
notiffany (~> 0.0)
|
|
33
|
-
pry (>= 0.9.12)
|
|
34
|
-
shellany (~> 0.0)
|
|
35
|
-
thor (>= 0.18.1)
|
|
36
|
-
guard-compat (1.2.1)
|
|
37
|
-
guard-rspec (4.7.3)
|
|
38
|
-
guard (~> 2.1)
|
|
39
|
-
guard-compat (~> 1.1)
|
|
40
|
-
rspec (>= 2.99.0, < 4.0)
|
|
41
|
-
i18n (1.6.0)
|
|
20
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
|
21
|
+
concurrent-ruby (1.1.6)
|
|
22
|
+
diff-lcs (1.4.2)
|
|
23
|
+
i18n (1.8.3)
|
|
42
24
|
concurrent-ruby (~> 1.0)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
nenv (~> 0.1)
|
|
53
|
-
shellany (~> 0.0)
|
|
54
|
-
pry (0.12.2)
|
|
55
|
-
coderay (~> 1.1.0)
|
|
56
|
-
method_source (~> 0.9.0)
|
|
57
|
-
rake (10.5.0)
|
|
58
|
-
rb-fsevent (0.9.8)
|
|
59
|
-
rb-inotify (0.10.0)
|
|
60
|
-
ffi (~> 1.0)
|
|
61
|
-
rspec (3.8.0)
|
|
62
|
-
rspec-core (~> 3.8.0)
|
|
63
|
-
rspec-expectations (~> 3.8.0)
|
|
64
|
-
rspec-mocks (~> 3.8.0)
|
|
65
|
-
rspec-core (3.8.0)
|
|
66
|
-
rspec-support (~> 3.8.0)
|
|
67
|
-
rspec-expectations (3.8.3)
|
|
25
|
+
minitest (5.14.1)
|
|
26
|
+
rake (13.0.1)
|
|
27
|
+
rspec (3.9.0)
|
|
28
|
+
rspec-core (~> 3.9.0)
|
|
29
|
+
rspec-expectations (~> 3.9.0)
|
|
30
|
+
rspec-mocks (~> 3.9.0)
|
|
31
|
+
rspec-core (3.9.2)
|
|
32
|
+
rspec-support (~> 3.9.3)
|
|
33
|
+
rspec-expectations (3.9.2)
|
|
68
34
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
69
|
-
rspec-support (~> 3.
|
|
70
|
-
rspec-mocks (3.
|
|
35
|
+
rspec-support (~> 3.9.0)
|
|
36
|
+
rspec-mocks (3.9.1)
|
|
71
37
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
72
|
-
rspec-support (~> 3.
|
|
73
|
-
rspec-support (3.
|
|
74
|
-
|
|
75
|
-
shellany (0.0.1)
|
|
76
|
-
sqlite3 (1.4.1)
|
|
77
|
-
thor (0.20.3)
|
|
38
|
+
rspec-support (~> 3.9.0)
|
|
39
|
+
rspec-support (3.9.3)
|
|
40
|
+
sqlite3 (1.4.2)
|
|
78
41
|
thread_safe (0.3.6)
|
|
79
|
-
tzinfo (1.2.
|
|
42
|
+
tzinfo (1.2.7)
|
|
80
43
|
thread_safe (~> 0.1)
|
|
44
|
+
zeitwerk (2.3.0)
|
|
81
45
|
|
|
82
46
|
PLATFORMS
|
|
83
47
|
ruby
|
|
@@ -85,12 +49,10 @@ PLATFORMS
|
|
|
85
49
|
DEPENDENCIES
|
|
86
50
|
activerecord (>= 4.0)
|
|
87
51
|
bundler (~> 1.15)
|
|
88
|
-
guard-rspec (~> 4.7, >= 4.7.3)
|
|
89
52
|
query_filter!
|
|
90
|
-
rake (
|
|
91
|
-
rb-fsevent (= 0.9.8)
|
|
53
|
+
rake (>= 12.3.3)
|
|
92
54
|
rspec (~> 3.0)
|
|
93
55
|
sqlite3 (~> 1.3, >= 1.3.13)
|
|
94
56
|
|
|
95
57
|
BUNDLED WITH
|
|
96
|
-
1.
|
|
58
|
+
1.17.3
|
data/README.md
CHANGED
|
@@ -236,6 +236,62 @@ QueryFilter.setup do |config|
|
|
|
236
236
|
end
|
|
237
237
|
```
|
|
238
238
|
|
|
239
|
+
## Testing
|
|
240
|
+
|
|
241
|
+
query_filter gem defines some custom RSpec matchers. Include them to your project:
|
|
242
|
+
|
|
243
|
+
```ruby
|
|
244
|
+
# spec/support/query_filter.rb
|
|
245
|
+
|
|
246
|
+
require "query_filter/rspec_matchers"
|
|
247
|
+
|
|
248
|
+
RSpec.configure do |config|
|
|
249
|
+
config.include QueryFilter::RSpecMatchers, type: :query_filter
|
|
250
|
+
end
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Custom matchers will be available to use in specs:
|
|
254
|
+
|
|
255
|
+
```ruby
|
|
256
|
+
# spec/filters/order_filter_spec.rb
|
|
257
|
+
|
|
258
|
+
describe OrderFilter, type: :query_filter do
|
|
259
|
+
context "scope deleted" do
|
|
260
|
+
it "performs query" do
|
|
261
|
+
expect { filter(deleted: true) }.to perform_query(deleted: true)
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
it "doesn't perform query with wrong params" do
|
|
265
|
+
expect { filter(deleted: "invalid_param") }.to_not perform_query
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
it "performs query by state" do
|
|
270
|
+
expect(relation).to receive(:with_state).with(:pending)
|
|
271
|
+
filter(state: :pending)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
it "reorders by sort_column" do
|
|
275
|
+
expect { filter(sort_column: :id, sort_mode: :desc) }
|
|
276
|
+
.to reorder.by("orders.id DESC NULLS LAST")
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
context "query against the database" do
|
|
280
|
+
let(:order) { create(:order, state: :pending) }
|
|
281
|
+
|
|
282
|
+
# relation is a double by default, but can be redefined to an actual ActiveRecord::Relation:
|
|
283
|
+
before do
|
|
284
|
+
relation Order.all
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
it "finds the order" do
|
|
288
|
+
expect(filter(state: :pending)).to contain_exactly(order)
|
|
289
|
+
expect(filter(state: :invalid_state)).to be_empty
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
```
|
|
294
|
+
|
|
239
295
|
## Development
|
|
240
296
|
|
|
241
297
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.configure do |config|
|
|
4
|
+
module QueryFilter::RSpecMatchers
|
|
5
|
+
extend RSpec::Matchers::DSL
|
|
6
|
+
|
|
7
|
+
def relation(override = nil)
|
|
8
|
+
@relation ||= override || double('ActiveRecord::Relation')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def filter(params)
|
|
12
|
+
described_class.new(relation, params).to_query
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Usage:
|
|
16
|
+
#
|
|
17
|
+
# expect { filter(username: "joe") }.to perform_query(users: { username: "joe" })
|
|
18
|
+
# expect { filter(field: :invalid_value) }.to_not perform_query
|
|
19
|
+
#
|
|
20
|
+
matcher :perform_query do |*params_for_where|
|
|
21
|
+
def supports_block_expectations?
|
|
22
|
+
true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
match do |block|
|
|
26
|
+
expect(relation).to receive(:where).with(*params_for_where)
|
|
27
|
+
block.call
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
match_when_negated do |block|
|
|
31
|
+
expect(relation).to_not receive(:where)
|
|
32
|
+
block.call
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Usage:
|
|
37
|
+
#
|
|
38
|
+
# expect { filter(sort: :asc) }.to reorder.by("users.created_at" => "asc")
|
|
39
|
+
# expect { filter(sort: :invalid_value) }.to_not reorder
|
|
40
|
+
#
|
|
41
|
+
matcher :reorder do
|
|
42
|
+
def supports_block_expectations?
|
|
43
|
+
true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
match do |block|
|
|
47
|
+
expect(relation).to receive(:reorder).with(@params_for_reorder)
|
|
48
|
+
block.call
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
match_when_negated do |block|
|
|
52
|
+
expect(relation).to_not receive(:reorder)
|
|
53
|
+
block.call
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
chain :by do |conditions|
|
|
57
|
+
@params_for_reorder = conditions
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
config.after do
|
|
63
|
+
@relation = nil
|
|
64
|
+
end
|
|
65
|
+
end
|
data/lib/query_filter/version.rb
CHANGED
data/query_filter.gemspec
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# coding: utf-8
|
|
3
2
|
|
|
4
|
-
lib = File.expand_path('
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
5
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
6
5
|
require 'query_filter/version'
|
|
7
6
|
|
|
@@ -23,12 +22,10 @@ Gem::Specification.new do |spec|
|
|
|
23
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
24
23
|
spec.require_paths = ['lib']
|
|
25
24
|
|
|
25
|
+
spec.add_development_dependency 'activerecord', '>= 4.0'
|
|
26
26
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
|
27
|
-
spec.add_development_dependency 'rake', '
|
|
27
|
+
spec.add_development_dependency 'rake', '>= 12.3.3'
|
|
28
28
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
29
|
-
spec.add_development_dependency 'guard-rspec', '~> 4.7', '>= 4.7.3'
|
|
30
|
-
spec.add_development_dependency 'rb-fsevent', '0.9.8'
|
|
31
|
-
spec.add_development_dependency 'activerecord', '>= 4.0'
|
|
32
29
|
spec.add_development_dependency 'sqlite3', '~> 1.3', '>= 1.3.13'
|
|
33
30
|
|
|
34
31
|
spec.add_dependency 'activesupport', '>= 4.0'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: query_filter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Igor Galeta
|
|
@@ -9,98 +9,64 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2020-06-24 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
|
-
name:
|
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
requirements:
|
|
18
|
-
- - "~>"
|
|
19
|
-
- !ruby/object:Gem::Version
|
|
20
|
-
version: '1.15'
|
|
21
|
-
type: :development
|
|
22
|
-
prerelease: false
|
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
24
|
-
requirements:
|
|
25
|
-
- - "~>"
|
|
26
|
-
- !ruby/object:Gem::Version
|
|
27
|
-
version: '1.15'
|
|
28
|
-
- !ruby/object:Gem::Dependency
|
|
29
|
-
name: rake
|
|
15
|
+
name: activerecord
|
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
|
31
17
|
requirements:
|
|
32
|
-
- - "
|
|
18
|
+
- - ">="
|
|
33
19
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: '
|
|
20
|
+
version: '4.0'
|
|
35
21
|
type: :development
|
|
36
22
|
prerelease: false
|
|
37
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
24
|
requirements:
|
|
39
|
-
- - "
|
|
25
|
+
- - ">="
|
|
40
26
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: '
|
|
27
|
+
version: '4.0'
|
|
42
28
|
- !ruby/object:Gem::Dependency
|
|
43
|
-
name:
|
|
29
|
+
name: bundler
|
|
44
30
|
requirement: !ruby/object:Gem::Requirement
|
|
45
31
|
requirements:
|
|
46
32
|
- - "~>"
|
|
47
33
|
- !ruby/object:Gem::Version
|
|
48
|
-
version: '
|
|
34
|
+
version: '1.15'
|
|
49
35
|
type: :development
|
|
50
36
|
prerelease: false
|
|
51
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
38
|
requirements:
|
|
53
39
|
- - "~>"
|
|
54
40
|
- !ruby/object:Gem::Version
|
|
55
|
-
version: '
|
|
41
|
+
version: '1.15'
|
|
56
42
|
- !ruby/object:Gem::Dependency
|
|
57
|
-
name:
|
|
43
|
+
name: rake
|
|
58
44
|
requirement: !ruby/object:Gem::Requirement
|
|
59
45
|
requirements:
|
|
60
|
-
- - "~>"
|
|
61
|
-
- !ruby/object:Gem::Version
|
|
62
|
-
version: '4.7'
|
|
63
46
|
- - ">="
|
|
64
47
|
- !ruby/object:Gem::Version
|
|
65
|
-
version:
|
|
48
|
+
version: 12.3.3
|
|
66
49
|
type: :development
|
|
67
50
|
prerelease: false
|
|
68
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
69
52
|
requirements:
|
|
70
|
-
- - "~>"
|
|
71
|
-
- !ruby/object:Gem::Version
|
|
72
|
-
version: '4.7'
|
|
73
53
|
- - ">="
|
|
74
54
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
76
|
-
- !ruby/object:Gem::Dependency
|
|
77
|
-
name: rb-fsevent
|
|
78
|
-
requirement: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - '='
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: 0.9.8
|
|
83
|
-
type: :development
|
|
84
|
-
prerelease: false
|
|
85
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - '='
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: 0.9.8
|
|
55
|
+
version: 12.3.3
|
|
90
56
|
- !ruby/object:Gem::Dependency
|
|
91
|
-
name:
|
|
57
|
+
name: rspec
|
|
92
58
|
requirement: !ruby/object:Gem::Requirement
|
|
93
59
|
requirements:
|
|
94
|
-
- - "
|
|
60
|
+
- - "~>"
|
|
95
61
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
62
|
+
version: '3.0'
|
|
97
63
|
type: :development
|
|
98
64
|
prerelease: false
|
|
99
65
|
version_requirements: !ruby/object:Gem::Requirement
|
|
100
66
|
requirements:
|
|
101
|
-
- - "
|
|
67
|
+
- - "~>"
|
|
102
68
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
69
|
+
version: '3.0'
|
|
104
70
|
- !ruby/object:Gem::Dependency
|
|
105
71
|
name: sqlite3
|
|
106
72
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -158,6 +124,7 @@ files:
|
|
|
158
124
|
- bin/setup
|
|
159
125
|
- lib/query_filter.rb
|
|
160
126
|
- lib/query_filter/base.rb
|
|
127
|
+
- lib/query_filter/rspec_matchers.rb
|
|
161
128
|
- lib/query_filter/rules/date_range.rb
|
|
162
129
|
- lib/query_filter/rules/order_by.rb
|
|
163
130
|
- lib/query_filter/rules/range.rb
|