filterable-by 0.4.6 → 0.4.7

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
- SHA1:
3
- metadata.gz: 4e6e0dec80e50b96215a9ca532e623ce4607baa4
4
- data.tar.gz: 550ac202cfcbe7796ec880a5e7be5b3b01295a25
2
+ SHA256:
3
+ metadata.gz: 7c170888a73dbeca47de324efe3056b63112936dd4b0ebd4b5952b44a48727a0
4
+ data.tar.gz: d63ac1513cb002bc12ba106abe5f99c2e90f91c9d5a8696397a52e8f5bf7c732
5
5
  SHA512:
6
- metadata.gz: e14820b29652c048576fb26a937728005a33de161b19671214127166e024b08aa3b7878d1f16977966b246c35f8aa0cbd2eec9c7c9967579a06b7790dda70e36
7
- data.tar.gz: 668d68342c9ae54b22b390a09749bc83a5269c9d527b327af407c7ffa8d45c2134be2964ccc6f316483b978a4264e52e495487c832a98fae35dc8db0dfaf171d
6
+ metadata.gz: 01e287700b6bec04c0a53319de330b113cad3466d9a00288206ed0e60c9fbc35de8cb6089d976590dfe808b7b9e06e344b0d1378a1f60a7fb232de8f9430019b
7
+ data.tar.gz: 447d4907f3e7876d878d4fdb8a070214cd6804dfa40c67277639f172ba8a17b067d48f7ae96d1c43d90734d60e0dd8287aab5d1fb52e73de2779f9d4bba72a46
@@ -1,50 +1,63 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- filterable-by (0.4.6)
4
+ filterable-by (0.4.7)
5
5
  activerecord
6
6
  activesupport
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- activemodel (4.2.6)
12
- activesupport (= 4.2.6)
13
- builder (~> 3.1)
14
- activerecord (4.2.6)
15
- activemodel (= 4.2.6)
16
- activesupport (= 4.2.6)
17
- arel (~> 6.0)
18
- activesupport (4.2.6)
19
- i18n (~> 0.7)
20
- json (~> 1.7, >= 1.7.7)
11
+ activemodel (5.2.0)
12
+ activesupport (= 5.2.0)
13
+ activerecord (5.2.0)
14
+ activemodel (= 5.2.0)
15
+ activesupport (= 5.2.0)
16
+ arel (>= 9.0)
17
+ activesupport (5.2.0)
18
+ concurrent-ruby (~> 1.0, >= 1.0.2)
19
+ i18n (>= 0.7, < 2)
21
20
  minitest (~> 5.1)
22
- thread_safe (~> 0.3, >= 0.3.4)
23
21
  tzinfo (~> 1.1)
24
- arel (6.0.3)
25
- builder (3.2.2)
26
- diff-lcs (1.2.5)
27
- i18n (0.7.0)
28
- json (1.8.3)
29
- minitest (5.9.0)
30
- rake (11.1.2)
31
- rspec (3.4.0)
32
- rspec-core (~> 3.4.0)
33
- rspec-expectations (~> 3.4.0)
34
- rspec-mocks (~> 3.4.0)
35
- rspec-core (3.4.4)
36
- rspec-support (~> 3.4.0)
37
- rspec-expectations (3.4.0)
22
+ arel (9.0.0)
23
+ ast (2.4.0)
24
+ concurrent-ruby (1.0.5)
25
+ diff-lcs (1.3)
26
+ i18n (1.0.1)
27
+ concurrent-ruby (~> 1.0)
28
+ minitest (5.11.3)
29
+ parallel (1.12.1)
30
+ parser (2.5.1.0)
31
+ ast (~> 2.4.0)
32
+ powerpack (0.1.1)
33
+ rainbow (3.0.0)
34
+ rake (12.3.1)
35
+ rspec (3.7.0)
36
+ rspec-core (~> 3.7.0)
37
+ rspec-expectations (~> 3.7.0)
38
+ rspec-mocks (~> 3.7.0)
39
+ rspec-core (3.7.1)
40
+ rspec-support (~> 3.7.0)
41
+ rspec-expectations (3.7.0)
38
42
  diff-lcs (>= 1.2.0, < 2.0)
39
- rspec-support (~> 3.4.0)
40
- rspec-mocks (3.4.1)
43
+ rspec-support (~> 3.7.0)
44
+ rspec-mocks (3.7.0)
41
45
  diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.4.0)
43
- rspec-support (3.4.1)
44
- sqlite3 (1.3.11)
45
- thread_safe (0.3.5)
46
- tzinfo (1.2.2)
46
+ rspec-support (~> 3.7.0)
47
+ rspec-support (3.7.1)
48
+ rubocop (0.55.0)
49
+ parallel (~> 1.10)
50
+ parser (>= 2.5)
51
+ powerpack (~> 0.1)
52
+ rainbow (>= 2.2.2, < 4.0)
53
+ ruby-progressbar (~> 1.7)
54
+ unicode-display_width (~> 1.0, >= 1.0.1)
55
+ ruby-progressbar (1.9.0)
56
+ sqlite3 (1.3.13)
57
+ thread_safe (0.3.6)
58
+ tzinfo (1.2.5)
47
59
  thread_safe (~> 0.1)
60
+ unicode-display_width (1.3.2)
48
61
 
49
62
  PLATFORMS
50
63
  ruby
@@ -54,7 +67,8 @@ DEPENDENCIES
54
67
  filterable-by!
55
68
  rake
56
69
  rspec
70
+ rubocop
57
71
  sqlite3
58
72
 
59
73
  BUNDLED WITH
60
- 1.11.2
74
+ 1.16.1
data/README.md CHANGED
@@ -35,28 +35,3 @@ Comment.filter_by({ "user_id" => "2", "ignored" => "3" })
35
35
  Comment.filter_by({ "post_author_id" => "5" })
36
36
  # => JOINS posts ON posts.id = comments.post_id WHERE posts.author_id = 5
37
37
  ```
38
-
39
- ## LICENCE
40
-
41
- ```
42
- Copyright (c) 2015 Black Square Media
43
-
44
- Permission is hereby granted, free of charge, to any person obtaining
45
- a copy of this software and associated documentation files (the
46
- "Software"), to deal in the Software without restriction, including
47
- without limitation the rights to use, copy, modify, merge, publish,
48
- distribute, sublicense, and/or sell copies of the Software, and to
49
- permit persons to whom the Software is furnished to do so, subject to
50
- the following conditions:
51
-
52
- The above copyright notice and this permission notice shall be
53
- included in all copies or substantial portions of the Software.
54
-
55
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
56
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
57
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
58
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
59
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
60
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
61
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
62
- ```
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
1
  require 'bundler/setup'
2
2
  require 'bundler/gem_tasks'
3
3
  require 'rspec/core/rake_task'
4
+ require 'rubocop/rake_task'
4
5
 
5
6
  RSpec::Core::RakeTask.new(:spec)
7
+ RuboCop::RakeTask.new(:rubocop)
6
8
 
7
- task default: [:spec]
9
+ task default: %i[spec rubocop]
@@ -1,7 +1,7 @@
1
- # -*- encoding: utf-8 -*-
1
+
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'filterable-by'
4
- s.version = '0.4.6'
4
+ s.version = '0.4.7'
5
5
  s.authors = ['Dimitrij Denissenko']
6
6
  s.email = ['dimitrij@blacksquaremedia.com']
7
7
  s.summary = 'Generate white-listed filter scopes from URL parameter values'
@@ -12,13 +12,14 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^spec/}) }
13
13
  s.test_files = `git ls-files -z -- spec/*`.split("\x0")
14
14
  s.require_paths = ['lib']
15
- s.required_ruby_version = '>= 1.9.3'
15
+ s.required_ruby_version = '>= 2.2'
16
16
 
17
- s.add_dependency 'activesupport'
18
17
  s.add_dependency 'activerecord'
18
+ s.add_dependency 'activesupport'
19
19
 
20
20
  s.add_development_dependency 'bundler'
21
21
  s.add_development_dependency 'rake'
22
22
  s.add_development_dependency 'rspec'
23
+ s.add_development_dependency 'rubocop'
23
24
  s.add_development_dependency 'sqlite3'
24
25
  end
@@ -3,9 +3,7 @@ require 'active_support/concern'
3
3
  require 'set'
4
4
 
5
5
  module ActiveRecord
6
- module FilterableByHelper
7
- extend ActiveSupport::Concern
8
-
6
+ module FilterableBy
9
7
  def self.normalize(value)
10
8
  case value
11
9
  when String, Numeric
@@ -16,10 +14,20 @@ module ActiveRecord
16
14
  end
17
15
 
18
16
  module ClassMethods
17
+ def self.extended(base) # :nodoc:
18
+ base.class_attribute :_filterable_by_config, instance_accessor: false, instance_predicate: false
19
+ base._filterable_by_config = {}
20
+ super
21
+ end
22
+
23
+ def inherited(base) # :nodoc:
24
+ base._filterable_by_config = _filterable_by_config.deep_dup
25
+ super
26
+ end
19
27
 
20
28
  def filterable_by(*names, &block)
21
29
  names.each do |name|
22
- _filterable_by_scope_options[name.to_s] = block || ->(scope, v) { scope.where(name.to_sym => v) }
30
+ _filterable_by_config[name.to_s] = block || ->(scope, v) { scope.where(name.to_sym => v) }
23
31
  end
24
32
  end
25
33
 
@@ -29,27 +37,20 @@ module ActiveRecord
29
37
  scope = all
30
38
  return scope unless hash.is_a?(Hash)
31
39
 
32
- _filterable_by_scope_options.each do |name, block|
40
+ _filterable_by_config.each do |name, block|
33
41
  next unless hash.key?(name)
34
42
 
35
- value = FilterableByHelper.normalize(hash[name])
43
+ value = FilterableBy.normalize(hash[name])
36
44
  next if value.blank?
37
45
 
38
46
  scope = block.call(scope, value)
39
47
  end
40
48
  scope
41
49
  end
42
-
43
- protected
44
-
45
- def _filterable_by_scope_options
46
- @_filterable_by_scope_options ||= superclass == Object ? {} : superclass.send(:_filterable_by_scope_options).dup
47
- end
48
-
49
50
  end
50
51
  end
51
52
 
52
53
  class Base
53
- include FilterableByHelper
54
+ extend FilterableBy::ClassMethods
54
55
  end
55
56
  end
@@ -1,7 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
- describe ActiveRecord::FilterableByHelper do
4
-
3
+ describe ActiveRecord::FilterableBy do
5
4
  let(:alice) { AUTHORS[:alice] }
6
5
  let(:bob) { AUTHORS[:bob] }
7
6
 
@@ -9,9 +8,9 @@ describe ActiveRecord::FilterableByHelper do
9
8
  let(:bpost) { POSTS[:bobs] }
10
9
 
11
10
  it 'should have config' do
12
- expect(Comment.send(:_filterable_by_scope_options).count).to eq(3)
13
- expect(Rating.send(:_filterable_by_scope_options).count).to eq(2)
14
- expect(Post.send(:_filterable_by_scope_options).count).to eq(1)
11
+ expect(Comment.send(:_filterable_by_config).count).to eq(3)
12
+ expect(Rating.send(:_filterable_by_config).count).to eq(2)
13
+ expect(Post.send(:_filterable_by_config).count).to eq(1)
15
14
  end
16
15
 
17
16
  it 'should ignore bad inputs' do
@@ -23,15 +22,15 @@ describe ActiveRecord::FilterableByHelper do
23
22
  end
24
23
 
25
24
  it 'should generate simple scopes' do
26
- expect(Comment.filter_by('author_id' => alice.id).pluck(:title)).to match_array(['AA', 'AB'])
27
- expect(Comment.filter_by('author_id' => bob.id).pluck(:title)).to match_array(['BA', 'BB'])
28
- expect(Comment.filter_by('author_id' => [alice.id, '']).pluck(:title)).to match_array(['AA', 'AB'])
25
+ expect(Comment.filter_by('author_id' => alice.id).pluck(:title)).to match_array(%w[AA AB])
26
+ expect(Comment.filter_by('author_id' => bob.id).pluck(:title)).to match_array(%w[BA BB])
27
+ expect(Comment.filter_by('author_id' => [alice.id, '']).pluck(:title)).to match_array(%w[AA AB])
29
28
 
30
- expect(Comment.filter_by('post_id' => apost.id).pluck(:title)).to match_array(['AA', 'BA'])
31
- expect(Comment.filter_by('post_id' => bpost.id).pluck(:title)).to match_array(['AB', 'BB'])
29
+ expect(Comment.filter_by('post_id' => apost.id).pluck(:title)).to match_array(%w[AA BA])
30
+ expect(Comment.filter_by('post_id' => bpost.id).pluck(:title)).to match_array(%w[AB BB])
32
31
 
33
- expect(Comment.filter_by('post_author_id' => alice.id).pluck(:title)).to match_array(['AA', 'BA'])
34
- expect(Comment.filter_by('post_author_id' => bob.id).pluck(:title)).to match_array(['AB', 'BB'])
32
+ expect(Comment.filter_by('post_author_id' => alice.id).pluck(:title)).to match_array(%w[AA BA])
33
+ expect(Comment.filter_by('post_author_id' => bob.id).pluck(:title)).to match_array(%w[AB BB])
35
34
 
36
35
  expect(Rating.filter_by('author_id' => alice.id).count).to eq(0)
37
36
  expect(Rating.filter_by('author_id' => bob.id).count).to eq(1)
@@ -46,7 +45,7 @@ describe ActiveRecord::FilterableByHelper do
46
45
  expect(Comment.filter_by('author_id' => bob.id, 'post_id' => bpost.id).pluck(:title)).to match_array(['BB'])
47
46
 
48
47
  scope = Comment.filter_by('author_id' => [alice.id, bob.id], 'post_id' => bpost.id)
49
- expect(scope.pluck(:title)).to match_array(['AB', 'BB'])
48
+ expect(scope.pluck(:title)).to match_array(%w[AB BB])
50
49
  end
51
50
 
52
51
  it 'should combine with other scopes' do
@@ -59,5 +58,4 @@ describe ActiveRecord::FilterableByHelper do
59
58
  expect(Post.filter_by('post_id' => bpost.id).count).to eq(2)
60
59
  expect(Rating.filter_by('post_author_id' => bob.id).count).to eq(1)
61
60
  end
62
-
63
61
  end
@@ -48,12 +48,12 @@ end
48
48
  AUTHORS = {
49
49
  alice: Author.create!,
50
50
  bob: Author.create!,
51
- }
51
+ }.freeze
52
52
 
53
53
  POSTS = {
54
54
  alices: Post.create!(author_id: AUTHORS[:alice].id),
55
55
  bobs: Post.create!(author_id: AUTHORS[:bob].id),
56
- }
56
+ }.freeze
57
57
 
58
58
  COMMENTS = {
59
59
  alice_on_alice: Comment.create!(title: 'AA', post_id: POSTS[:alices].id, author_id: AUTHORS[:alice].id),
@@ -61,4 +61,4 @@ COMMENTS = {
61
61
  alice_on_bob: Comment.create!(title: 'AB', post_id: POSTS[:bobs].id, author_id: AUTHORS[:alice].id),
62
62
  bob_on_bob: Comment.create!(title: 'BB', post_id: POSTS[:bobs].id, author_id: AUTHORS[:bob].id),
63
63
  boa_rating: Rating.create!(stars: 5, post_id: POSTS[:alices].id, author_id: AUTHORS[:bob].id),
64
- }
64
+ }.freeze
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filterable-by
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitrij Denissenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-23 00:00:00.000000000 Z
11
+ date: 2018-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activerecord
28
+ name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: sqlite3
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -124,7 +138,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
138
  requirements:
125
139
  - - ">="
126
140
  - !ruby/object:Gem::Version
127
- version: 1.9.3
141
+ version: '2.2'
128
142
  required_rubygems_version: !ruby/object:Gem::Requirement
129
143
  requirements:
130
144
  - - ">="
@@ -132,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
146
  version: '0'
133
147
  requirements: []
134
148
  rubyforge_project:
135
- rubygems_version: 2.5.1
149
+ rubygems_version: 2.7.3
136
150
  signing_key:
137
151
  specification_version: 4
138
152
  summary: Generate white-listed filter scopes from URL parameter values