query_filter 0.2.0 → 0.2.3

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: d494a5d272040d6af4d93d4ae5c4457e31ca829453a8c028520e1c9079cd8235
4
+ data.tar.gz: c919733a7462306bde459d6b64a7108ad3b22d51504ff03a69aea9acc1c36881
5
5
  SHA512:
6
- metadata.gz: 38bdd2e28381998445c90a2c86fff1f0d3513df6b995ffbafc1399cf3b3460d5fb25b462602ff3b48426597e0a1aba0951e2adcc4cc3eb4c42ca943bf0c0bff8
7
- data.tar.gz: a1aeac38a34238ecb73269246e716501e01897f420181c1a1cdd632a2b5b803a976d26c6d6e012389e9ca2e7b681f573081835df489ed9acbe85959aae928cc8
6
+ metadata.gz: c7c4a0f4477fd7d160d9c2b014b11f49acf1acbd2fcef96309c4fe0da68c21995b33d357d6aa375ae69cc82351d65277309235691ab7c826bdd3be01ddcbc12b
7
+ data.tar.gz: 99a9a8edb1391c95152c4612f4928294e5188862011c12c2fd67560b46448eb8fe3a1171db95819fdb148309eb2205603a9ccc9035fc444542b90d936591359a
data/.rubocop.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.3
2
+ NewCops: disable
3
+ TargetRubyVersion: 2.5.5
3
4
 
4
5
  ##################### Styles ##################################
5
6
 
@@ -21,7 +22,7 @@ Lint/AmbiguousBlockAssociation:
21
22
 
22
23
  ##################### Metrics ##################################
23
24
 
24
- Metrics/LineLength:
25
+ Layout/LineLength:
25
26
  Max: 110
26
27
 
27
28
  Metrics/ClassLength:
@@ -36,11 +37,3 @@ Metrics/BlockLength:
36
37
  Max: 50
37
38
  Exclude:
38
39
  - "**/*_spec.rb"
39
-
40
- ##################### Rails ##################################
41
-
42
- Rails:
43
- Enabled: true
44
-
45
- Rails/SkipsModelValidations:
46
- Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.5
1
+ 3.1.2
data/Gemfile.lock CHANGED
@@ -1,96 +1,57 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- query_filter (0.2.0)
4
+ query_filter (0.2.3)
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 (7.0.4.3)
11
+ activesupport (= 7.0.4.3)
12
+ activerecord (7.0.4.3)
13
+ activemodel (= 7.0.4.3)
14
+ activesupport (= 7.0.4.3)
15
+ activesupport (7.0.4.3)
17
16
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
- i18n (>= 0.7, < 2)
19
- minitest (~> 5.1)
20
- 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)
17
+ i18n (>= 1.6, < 2)
18
+ minitest (>= 5.1)
19
+ tzinfo (~> 2.0)
20
+ concurrent-ruby (1.2.2)
21
+ diff-lcs (1.5.0)
22
+ i18n (1.12.0)
42
23
  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)
24
+ mini_portile2 (2.8.1)
25
+ minitest (5.18.0)
26
+ rake (13.0.6)
27
+ rspec (3.12.0)
28
+ rspec-core (~> 3.12.0)
29
+ rspec-expectations (~> 3.12.0)
30
+ rspec-mocks (~> 3.12.0)
31
+ rspec-core (3.12.1)
32
+ rspec-support (~> 3.12.0)
33
+ rspec-expectations (3.12.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.12.0)
36
+ rspec-mocks (3.12.5)
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)
78
- thread_safe (0.3.6)
79
- tzinfo (1.2.5)
80
- thread_safe (~> 0.1)
38
+ rspec-support (~> 3.12.0)
39
+ rspec-support (3.12.0)
40
+ sqlite3 (1.6.2)
41
+ mini_portile2 (~> 2.8.0)
42
+ tzinfo (2.0.6)
43
+ concurrent-ruby (~> 1.0)
81
44
 
82
45
  PLATFORMS
83
46
  ruby
84
47
 
85
48
  DEPENDENCIES
86
49
  activerecord (>= 4.0)
87
- bundler (~> 1.15)
88
- guard-rspec (~> 4.7, >= 4.7.3)
50
+ bundler
89
51
  query_filter!
90
- rake (~> 10.0)
91
- rb-fsevent (= 0.9.8)
92
- rspec (~> 3.0)
93
- sqlite3 (~> 1.3, >= 1.3.13)
52
+ rake
53
+ rspec (>= 3.0)
54
+ sqlite3 (>= 1.3.13)
94
55
 
95
56
  BUNDLED WITH
96
- 1.16.2
57
+ 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
@@ -7,8 +7,7 @@ module QueryFilter
7
7
  class Range < Scope
8
8
  def initialize(keys, options = {})
9
9
  @key = Array(keys).first
10
- @keys = [key_from, key_to]
11
- @options = options
10
+ super([key_from, key_to], options)
12
11
  end
13
12
 
14
13
  def name
@@ -35,11 +35,11 @@ module QueryFilter
35
35
 
36
36
  def query(column)
37
37
  if value_from.present? && value_to.present?
38
- ["#{column} BETWEEN ? AND ?", value_from, value_to]
38
+ ["#{column} BETWEEN ? AND ?", value_from.to_f, value_to.to_f]
39
39
  elsif value_from.present?
40
- ["#{column} >= ?", value_from]
40
+ ["#{column} >= ?", value_from.to_f]
41
41
  elsif value_to.present?
42
- ["#{column} <= ?", value_to]
42
+ ["#{column} <= ?", value_to.to_f]
43
43
  end
44
44
  end
45
45
  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.3'
5
5
  end
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('../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,13 +22,11 @@ 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
 
26
- spec.add_development_dependency 'bundler', '~> 1.15'
27
- spec.add_development_dependency 'rake', '~> 10.0'
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
25
  spec.add_development_dependency 'activerecord', '>= 4.0'
32
- spec.add_development_dependency 'sqlite3', '~> 1.3', '>= 1.3.13'
26
+ spec.add_development_dependency 'bundler'
27
+ spec.add_development_dependency 'rake'
28
+ spec.add_development_dependency 'rspec', '>= 3.0'
29
+ spec.add_development_dependency 'sqlite3', '>= 1.3.13'
33
30
 
34
31
  spec.add_dependency 'activesupport', '>= 4.0'
35
32
  end
metadata CHANGED
@@ -1,113 +1,76 @@
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.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Galeta
8
8
  - Igor Malinovskiy
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-05-10 00:00:00.000000000 Z
12
+ date: 2023-03-31 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
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - "~>"
33
- - !ruby/object:Gem::Version
34
- version: '10.0'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: '10.0'
42
- - !ruby/object:Gem::Dependency
43
- name: rspec
15
+ name: activerecord
44
16
  requirement: !ruby/object:Gem::Requirement
45
17
  requirements:
46
- - - "~>"
18
+ - - ">="
47
19
  - !ruby/object:Gem::Version
48
- version: '3.0'
20
+ version: '4.0'
49
21
  type: :development
50
22
  prerelease: false
51
23
  version_requirements: !ruby/object:Gem::Requirement
52
24
  requirements:
53
- - - "~>"
25
+ - - ">="
54
26
  - !ruby/object:Gem::Version
55
- version: '3.0'
27
+ version: '4.0'
56
28
  - !ruby/object:Gem::Dependency
57
- name: guard-rspec
29
+ name: bundler
58
30
  requirement: !ruby/object:Gem::Requirement
59
31
  requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '4.7'
63
32
  - - ">="
64
33
  - !ruby/object:Gem::Version
65
- version: 4.7.3
34
+ version: '0'
66
35
  type: :development
67
36
  prerelease: false
68
37
  version_requirements: !ruby/object:Gem::Requirement
69
38
  requirements:
70
- - - "~>"
71
- - !ruby/object:Gem::Version
72
- version: '4.7'
73
39
  - - ">="
74
40
  - !ruby/object:Gem::Version
75
- version: 4.7.3
41
+ version: '0'
76
42
  - !ruby/object:Gem::Dependency
77
- name: rb-fsevent
43
+ name: rake
78
44
  requirement: !ruby/object:Gem::Requirement
79
45
  requirements:
80
- - - '='
46
+ - - ">="
81
47
  - !ruby/object:Gem::Version
82
- version: 0.9.8
48
+ version: '0'
83
49
  type: :development
84
50
  prerelease: false
85
51
  version_requirements: !ruby/object:Gem::Requirement
86
52
  requirements:
87
- - - '='
53
+ - - ">="
88
54
  - !ruby/object:Gem::Version
89
- version: 0.9.8
55
+ version: '0'
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
107
73
  requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.3'
111
74
  - - ">="
112
75
  - !ruby/object:Gem::Version
113
76
  version: 1.3.13
@@ -115,9 +78,6 @@ dependencies:
115
78
  prerelease: false
116
79
  version_requirements: !ruby/object:Gem::Requirement
117
80
  requirements:
118
- - - "~>"
119
- - !ruby/object:Gem::Version
120
- version: '1.3'
121
81
  - - ">="
122
82
  - !ruby/object:Gem::Version
123
83
  version: 1.3.13
@@ -147,7 +107,6 @@ files:
147
107
  - ".rspec"
148
108
  - ".rubocop.yml"
149
109
  - ".ruby-version"
150
- - ".travis.yml"
151
110
  - Gemfile
152
111
  - Gemfile.lock
153
112
  - Guardfile
@@ -158,6 +117,7 @@ files:
158
117
  - bin/setup
159
118
  - lib/query_filter.rb
160
119
  - lib/query_filter/base.rb
120
+ - lib/query_filter/rspec_matchers.rb
161
121
  - lib/query_filter/rules/date_range.rb
162
122
  - lib/query_filter/rules/order_by.rb
163
123
  - lib/query_filter/rules/range.rb
@@ -173,7 +133,7 @@ homepage: https://github.com/psyipm/query_filter
173
133
  licenses:
174
134
  - MIT
175
135
  metadata: {}
176
- post_install_message:
136
+ post_install_message:
177
137
  rdoc_options: []
178
138
  require_paths:
179
139
  - lib
@@ -188,9 +148,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
148
  - !ruby/object:Gem::Version
189
149
  version: '0'
190
150
  requirements: []
191
- rubyforge_project:
192
- rubygems_version: 2.7.6.2
193
- signing_key:
151
+ rubygems_version: 3.3.7
152
+ signing_key:
194
153
  specification_version: 4
195
154
  summary: ActiveRecord query filter gem
196
155
  test_files: []
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.5.5
5
- before_install: gem install bundler -v 1.15.1