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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f281a64c42dfafb2f5478b7dc850e4d09fbc177357d85590a45e2abaa55b91ea
4
- data.tar.gz: c9823c4351c0757a97eeb0d851e22980da495ecdc13784002f6e2ef3390f6403
3
+ metadata.gz: 6fe7cf9e804b940444eefcf3fbced4b24099d52d32f71d896bcb401fcb1e9e43
4
+ data.tar.gz: e61f5e207c0a6c7fccae4d44a6a5990cde48f2432d0f520ea47767a417323504
5
5
  SHA512:
6
- metadata.gz: 38bdd2e28381998445c90a2c86fff1f0d3513df6b995ffbafc1399cf3b3460d5fb25b462602ff3b48426597e0a1aba0951e2adcc4cc3eb4c42ca943bf0c0bff8
7
- data.tar.gz: a1aeac38a34238ecb73269246e716501e01897f420181c1a1cdd632a2b5b803a976d26c6d6e012389e9ca2e7b681f573081835df489ed9acbe85959aae928cc8
6
+ metadata.gz: caa899332d0b1034baf784a418c1788d70220380d783069edf8b653729d47bdacd67016828546dfe41a078e0000e72b54379b5f60a67f5bf1e4823f4e8e72862
7
+ data.tar.gz: 931eed522f0e6d00cab63631967f70729f5d22067016d12a89220d34ee38513213c47ced8090c1062e10f9d0001490dffdc9913b9cc3a0dc84c4395e3bd4e2b0
@@ -1,83 +1,47 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- query_filter (0.2.0)
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 (5.2.3)
11
- activesupport (= 5.2.3)
12
- activerecord (5.2.3)
13
- activemodel (= 5.2.3)
14
- activesupport (= 5.2.3)
15
- arel (>= 9.0)
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
- arel (9.0.0)
22
- coderay (1.1.2)
23
- concurrent-ruby (1.1.5)
24
- diff-lcs (1.3)
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
- listen (3.1.5)
44
- rb-fsevent (~> 0.9, >= 0.9.4)
45
- rb-inotify (~> 0.9, >= 0.9.7)
46
- ruby_dep (~> 1.2)
47
- lumberjack (1.0.13)
48
- method_source (0.9.2)
49
- minitest (5.11.3)
50
- nenv (0.3.0)
51
- notiffany (0.1.1)
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.8.0)
70
- rspec-mocks (3.8.0)
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.8.0)
73
- rspec-support (3.8.0)
74
- ruby_dep (1.5.0)
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.5)
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 (~> 10.0)
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.16.2
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QueryFilter
4
- VERSION = '0.2.0'
4
+ VERSION = '0.2.2'
5
5
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
- # coding: utf-8
3
2
 
4
- lib = File.expand_path('../lib', __FILE__)
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', '~> 10.0'
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.0
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: 2019-05-10 00:00:00.000000000 Z
12
+ date: 2020-06-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: bundler
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: '10.0'
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: '10.0'
27
+ version: '4.0'
42
28
  - !ruby/object:Gem::Dependency
43
- name: rspec
29
+ name: bundler
44
30
  requirement: !ruby/object:Gem::Requirement
45
31
  requirements:
46
32
  - - "~>"
47
33
  - !ruby/object:Gem::Version
48
- version: '3.0'
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: '3.0'
41
+ version: '1.15'
56
42
  - !ruby/object:Gem::Dependency
57
- name: guard-rspec
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: 4.7.3
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: 4.7.3
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: activerecord
57
+ name: rspec
92
58
  requirement: !ruby/object:Gem::Requirement
93
59
  requirements:
94
- - - ">="
60
+ - - "~>"
95
61
  - !ruby/object:Gem::Version
96
- version: '4.0'
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: '4.0'
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