query_filter 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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