query_filter 0.2.0 → 0.2.3

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: 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