filterable-by 0.6.3 → 0.6.4

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: 12ba86a11c254ce3ce2a03cafd2b39f75f2b6df80d6899d05ef160dd98c07c96
4
- data.tar.gz: 916d29d238b9ae4c14d559cd880b51f8d0f6063fd66cd27470756bd2e38bea43
3
+ metadata.gz: d541006f941920a96920cf443f67353e4c410e1c4d8acb2364902a271e2dfec3
4
+ data.tar.gz: 3a9e964d67aaca1a133c61c3aee729c8c71a2e918f00dcecac9f86eec2c68430
5
5
  SHA512:
6
- metadata.gz: 70df7b4aa8a04fd6b820a63658357186185d5ecbfa3a63c9f9a45e9bbdffba4aa8a0d4ec9fca6aadc43d122fb6a298086dd1cf3fc7a692961cfd6642f6a426aa
7
- data.tar.gz: 1ce3a1f26079fbafc6cba6d516930adacbf69bcb0523d0431692750f9158058b2df96af5aa8e16d8bcd4138e76d06bec94ae032464c00aeb9178c8909ccefce9
6
+ metadata.gz: 99d8c2a9440c69950cf5175f713180fffd5f8e801e9ce52568cf3ae908fe18fb0c0f2dfa11a9e4a095351b9a5e70df8c54ed305ec175400f550a3f4d9277d82a
7
+ data.tar.gz: 06ba1b5090fb7425259764e550c8b5d26c82f0f67c8e54205ac3281f1e47ad070c8a89a398e55cd9406eba6c83a47d892b2480d8a47c66d77b345657a067607e
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  strategy:
13
13
  matrix:
14
- ruby-version: ["2.7", "3.0", "3.1"]
14
+ ruby-version: ["2.7", "3.0", "3.1", "3.2"]
15
15
  gemfiles: ["Gemfile", "Gemfile.rails6"]
16
16
  env:
17
17
  BUNDLE_GEMFILE: ${{ matrix.gemfile }}
data/Gemfile CHANGED
@@ -1,2 +1,7 @@
1
1
  source 'http://rubygems.org'
2
2
  gemspec
3
+
4
+ gem 'rake'
5
+ gem 'rspec'
6
+ gem 'rubocop-bsm'
7
+ gem 'sqlite3'
data/Gemfile.lock CHANGED
@@ -1,77 +1,84 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- filterable-by (0.6.3)
4
+ filterable-by (0.6.4)
5
5
  activerecord
6
6
  activesupport
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- activemodel (7.0.2.3)
12
- activesupport (= 7.0.2.3)
13
- activerecord (7.0.2.3)
14
- activemodel (= 7.0.2.3)
15
- activesupport (= 7.0.2.3)
16
- activesupport (7.0.2.3)
11
+ activemodel (7.0.4.2)
12
+ activesupport (= 7.0.4.2)
13
+ activerecord (7.0.4.2)
14
+ activemodel (= 7.0.4.2)
15
+ activesupport (= 7.0.4.2)
16
+ activesupport (7.0.4.2)
17
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
18
  i18n (>= 1.6, < 2)
19
19
  minitest (>= 5.1)
20
20
  tzinfo (~> 2.0)
21
21
  ast (2.4.2)
22
- concurrent-ruby (1.1.10)
22
+ concurrent-ruby (1.2.0)
23
23
  diff-lcs (1.5.0)
24
- i18n (1.10.0)
24
+ i18n (1.12.0)
25
25
  concurrent-ruby (~> 1.0)
26
- minitest (5.15.0)
26
+ json (2.6.3)
27
+ mini_portile2 (2.8.1)
28
+ minitest (5.17.0)
27
29
  parallel (1.22.1)
28
- parser (3.1.1.0)
30
+ parser (3.2.0.0)
29
31
  ast (~> 2.4.1)
30
32
  rainbow (3.1.1)
31
33
  rake (13.0.6)
32
- regexp_parser (2.2.1)
34
+ regexp_parser (2.6.2)
33
35
  rexml (3.2.5)
34
- rspec (3.11.0)
35
- rspec-core (~> 3.11.0)
36
- rspec-expectations (~> 3.11.0)
37
- rspec-mocks (~> 3.11.0)
38
- rspec-core (3.11.0)
39
- rspec-support (~> 3.11.0)
40
- rspec-expectations (3.11.0)
36
+ rspec (3.12.0)
37
+ rspec-core (~> 3.12.0)
38
+ rspec-expectations (~> 3.12.0)
39
+ rspec-mocks (~> 3.12.0)
40
+ rspec-core (3.12.0)
41
+ rspec-support (~> 3.12.0)
42
+ rspec-expectations (3.12.2)
41
43
  diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.11.0)
43
- rspec-mocks (3.11.1)
44
+ rspec-support (~> 3.12.0)
45
+ rspec-mocks (3.12.3)
44
46
  diff-lcs (>= 1.2.0, < 2.0)
45
- rspec-support (~> 3.11.0)
46
- rspec-support (3.11.0)
47
- rubocop (1.26.1)
47
+ rspec-support (~> 3.12.0)
48
+ rspec-support (3.12.0)
49
+ rubocop (1.44.1)
50
+ json (~> 2.3)
48
51
  parallel (~> 1.10)
49
- parser (>= 3.1.0.0)
52
+ parser (>= 3.2.0.0)
50
53
  rainbow (>= 2.2.2, < 4.0)
51
54
  regexp_parser (>= 1.8, < 3.0)
52
- rexml
53
- rubocop-ast (>= 1.16.0, < 2.0)
55
+ rexml (>= 3.2.5, < 4.0)
56
+ rubocop-ast (>= 1.24.1, < 2.0)
54
57
  ruby-progressbar (~> 1.7)
55
- unicode-display_width (>= 1.4.0, < 3.0)
56
- rubocop-ast (1.16.0)
58
+ unicode-display_width (>= 2.4.0, < 3.0)
59
+ rubocop-ast (1.24.1)
57
60
  parser (>= 3.1.1.0)
58
- rubocop-bsm (0.6.0)
61
+ rubocop-bsm (0.6.1)
59
62
  rubocop (~> 1.0)
60
63
  rubocop-performance
61
64
  rubocop-rake
62
65
  rubocop-rspec
63
- rubocop-performance (1.13.3)
66
+ rubocop-capybara (2.17.0)
67
+ rubocop (~> 1.41)
68
+ rubocop-performance (1.15.2)
64
69
  rubocop (>= 1.7.0, < 2.0)
65
70
  rubocop-ast (>= 0.4.0)
66
71
  rubocop-rake (0.6.0)
67
72
  rubocop (~> 1.0)
68
- rubocop-rspec (2.9.0)
69
- rubocop (~> 1.19)
73
+ rubocop-rspec (2.18.1)
74
+ rubocop (~> 1.33)
75
+ rubocop-capybara (~> 2.17)
70
76
  ruby-progressbar (1.11.0)
71
- sqlite3 (1.4.2)
72
- tzinfo (2.0.4)
77
+ sqlite3 (1.6.0)
78
+ mini_portile2 (~> 2.8.0)
79
+ tzinfo (2.0.6)
73
80
  concurrent-ruby (~> 1.0)
74
- unicode-display_width (2.1.0)
81
+ unicode-display_width (2.4.2)
75
82
 
76
83
  PLATFORMS
77
84
  ruby
@@ -85,4 +92,4 @@ DEPENDENCIES
85
92
  sqlite3
86
93
 
87
94
  BUNDLED WITH
88
- 2.3.6
95
+ 2.3.9
data/Gemfile.rails6 CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  gem 'activerecord', '~> 6.1'
5
+ gem 'rake'
6
+ gem 'rspec'
7
+ gem 'rubocop-bsm'
8
+ gem 'sqlite3'
data/Gemfile.rails6.lock CHANGED
@@ -1,79 +1,84 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- filterable-by (0.6.1)
4
+ filterable-by (0.6.4)
5
5
  activerecord
6
6
  activesupport
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activemodel (6.1.4.7)
12
- activesupport (= 6.1.4.7)
13
- activerecord (6.1.4.7)
14
- activemodel (= 6.1.4.7)
15
- activesupport (= 6.1.4.7)
16
- activesupport (6.1.4.7)
11
+ activemodel (6.1.7.2)
12
+ activesupport (= 6.1.7.2)
13
+ activerecord (6.1.7.2)
14
+ activemodel (= 6.1.7.2)
15
+ activesupport (= 6.1.7.2)
16
+ activesupport (6.1.7.2)
17
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
18
  i18n (>= 1.6, < 2)
19
19
  minitest (>= 5.1)
20
20
  tzinfo (~> 2.0)
21
21
  zeitwerk (~> 2.3)
22
22
  ast (2.4.2)
23
- concurrent-ruby (1.1.9)
23
+ concurrent-ruby (1.2.0)
24
24
  diff-lcs (1.5.0)
25
- i18n (1.10.0)
25
+ i18n (1.12.0)
26
26
  concurrent-ruby (~> 1.0)
27
- minitest (5.15.0)
28
- parallel (1.21.0)
29
- parser (3.1.1.0)
27
+ json (2.6.3)
28
+ minitest (5.17.0)
29
+ parallel (1.22.1)
30
+ parser (3.2.0.0)
30
31
  ast (~> 2.4.1)
31
32
  rainbow (3.1.1)
32
33
  rake (13.0.6)
33
- regexp_parser (2.2.1)
34
+ regexp_parser (2.6.2)
34
35
  rexml (3.2.5)
35
- rspec (3.11.0)
36
- rspec-core (~> 3.11.0)
37
- rspec-expectations (~> 3.11.0)
38
- rspec-mocks (~> 3.11.0)
39
- rspec-core (3.11.0)
40
- rspec-support (~> 3.11.0)
41
- rspec-expectations (3.11.0)
36
+ rspec (3.12.0)
37
+ rspec-core (~> 3.12.0)
38
+ rspec-expectations (~> 3.12.0)
39
+ rspec-mocks (~> 3.12.0)
40
+ rspec-core (3.12.0)
41
+ rspec-support (~> 3.12.0)
42
+ rspec-expectations (3.12.2)
42
43
  diff-lcs (>= 1.2.0, < 2.0)
43
- rspec-support (~> 3.11.0)
44
- rspec-mocks (3.11.0)
44
+ rspec-support (~> 3.12.0)
45
+ rspec-mocks (3.12.3)
45
46
  diff-lcs (>= 1.2.0, < 2.0)
46
- rspec-support (~> 3.11.0)
47
- rspec-support (3.11.0)
48
- rubocop (1.26.0)
47
+ rspec-support (~> 3.12.0)
48
+ rspec-support (3.12.0)
49
+ rubocop (1.44.1)
50
+ json (~> 2.3)
49
51
  parallel (~> 1.10)
50
- parser (>= 3.1.0.0)
52
+ parser (>= 3.2.0.0)
51
53
  rainbow (>= 2.2.2, < 4.0)
52
54
  regexp_parser (>= 1.8, < 3.0)
53
- rexml
54
- rubocop-ast (>= 1.16.0, < 2.0)
55
+ rexml (>= 3.2.5, < 4.0)
56
+ rubocop-ast (>= 1.24.1, < 2.0)
55
57
  ruby-progressbar (~> 1.7)
56
- unicode-display_width (>= 1.4.0, < 3.0)
57
- rubocop-ast (1.16.0)
58
+ unicode-display_width (>= 2.4.0, < 3.0)
59
+ rubocop-ast (1.24.1)
58
60
  parser (>= 3.1.1.0)
59
- rubocop-bsm (0.6.0)
61
+ rubocop-bsm (0.6.1)
60
62
  rubocop (~> 1.0)
61
63
  rubocop-performance
62
64
  rubocop-rake
63
65
  rubocop-rspec
64
- rubocop-performance (1.13.3)
66
+ rubocop-capybara (2.17.0)
67
+ rubocop (~> 1.41)
68
+ rubocop-performance (1.15.2)
65
69
  rubocop (>= 1.7.0, < 2.0)
66
70
  rubocop-ast (>= 0.4.0)
67
71
  rubocop-rake (0.6.0)
68
72
  rubocop (~> 1.0)
69
- rubocop-rspec (2.9.0)
70
- rubocop (~> 1.19)
73
+ rubocop-rspec (2.18.1)
74
+ rubocop (~> 1.33)
75
+ rubocop-capybara (~> 2.17)
71
76
  ruby-progressbar (1.11.0)
72
- sqlite3 (1.4.2)
73
- tzinfo (2.0.4)
77
+ sqlite3 (1.6.0-x86_64-linux)
78
+ tzinfo (2.0.6)
74
79
  concurrent-ruby (~> 1.0)
75
- unicode-display_width (2.1.0)
76
- zeitwerk (2.5.4)
80
+ unicode-display_width (2.4.2)
81
+ zeitwerk (2.6.6)
77
82
 
78
83
  PLATFORMS
79
84
  x86_64-linux
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'filterable-by'
3
- s.version = '0.6.3'
3
+ s.version = '0.6.4'
4
4
  s.authors = ['Dimitrij Denissenko']
5
5
  s.email = ['dimitrij@blacksquaremedia.com']
6
6
  s.summary = 'Generate white-listed filter scopes from URL parameter values'
@@ -9,7 +9,6 @@ Gem::Specification.new do |s|
9
9
  s.license = 'MIT'
10
10
 
11
11
  s.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^spec/}) }
12
- s.test_files = `git ls-files -z -- spec/*`.split("\x0")
13
12
  s.require_paths = ['lib']
14
13
  s.required_ruby_version = '>= 2.7'
15
14
 
@@ -17,9 +16,5 @@ Gem::Specification.new do |s|
17
16
  s.add_dependency 'activesupport'
18
17
 
19
18
  s.add_development_dependency 'bundler'
20
- s.add_development_dependency 'rake'
21
- s.add_development_dependency 'rspec'
22
- s.add_development_dependency 'rubocop-bsm'
23
- s.add_development_dependency 'sqlite3'
24
19
  s.metadata['rubygems_mfa_required'] = 'true'
25
20
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filterable-by
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitrij Denissenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-06 00:00:00.000000000 Z
11
+ date: 2023-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -52,62 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop-bsm
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'
97
- - !ruby/object:Gem::Dependency
98
- name: sqlite3
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
55
  description: ActiveRecord plugin
112
56
  email:
113
57
  - dimitrij@blacksquaremedia.com
@@ -128,8 +72,6 @@ files:
128
72
  - filterable-by.gemspec
129
73
  - lib/filterable-by.rb
130
74
  - lib/filterable_by.rb
131
- - spec/active_record/filterable_by_spec.rb
132
- - spec/spec_helper.rb
133
75
  homepage: https://github.com/bsm/filterable-by
134
76
  licenses:
135
77
  - MIT
@@ -154,6 +96,4 @@ rubygems_version: 3.3.3
154
96
  signing_key:
155
97
  specification_version: 4
156
98
  summary: Generate white-listed filter scopes from URL parameter values
157
- test_files:
158
- - spec/active_record/filterable_by_spec.rb
159
- - spec/spec_helper.rb
99
+ test_files: []
@@ -1,104 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveRecord::FilterableBy do
4
- let(:alice) { AUTHORS[:alice] }
5
- let(:bob) { AUTHORS[:bob] }
6
-
7
- let(:apost) { POSTS[:alices] }
8
- let(:bpost) { POSTS[:bobs] }
9
-
10
- it 'has config' do
11
- expect(Comment.send(:_filterable_by_config).count).to eq(5)
12
- expect(Rating.send(:_filterable_by_config).count).to eq(4)
13
- expect(Post.send(:_filterable_by_config).count).to eq(2)
14
- end
15
-
16
- it 'ignores bad inputs' do
17
- expect(Comment.filter_by.count).to eq(4)
18
- expect(Comment.filter_by(nil).count).to eq(4)
19
- expect(Comment.filter_by(nil, extra: true).count).to eq(4)
20
- expect(Comment.filter_by('bad').count).to eq(4)
21
-
22
- expect(Comment.filter_by('author_id' => '').count).to eq(4)
23
- expect(Comment.filter_by('author_id' => []).count).to eq(4)
24
- end
25
-
26
- it 'generates simple scopes' do
27
- expect(Comment.filter_by('author_id' => alice.id).pluck(:title)).to match_array(%w[AA AB])
28
- expect(Comment.filter_by('author_id' => bob.id).pluck(:title)).to match_array(%w[BA BB])
29
- expect(Comment.filter_by('author_id' => [alice.id, '']).pluck(:title)).to match_array(%w[AA AB])
30
-
31
- expect(Comment.filter_by('post_id' => apost.id).pluck(:title)).to match_array(%w[AA BA])
32
- expect(Comment.filter_by('post_id' => bpost.id).pluck(:title)).to match_array(%w[AB BB])
33
-
34
- expect(Comment.filter_by('post_author_id' => alice.id).pluck(:title)).to match_array(%w[AA BA])
35
- expect(Comment.filter_by('post_author_id' => bob.id).pluck(:title)).to match_array(%w[AB BB])
36
-
37
- expect(Rating.filter_by('author_id' => alice.id).count).to eq(0)
38
- expect(Rating.filter_by('author_id' => bob.id).count).to eq(1)
39
-
40
- expect(Post.filter_by('author_id' => bob.id).count).to eq(1)
41
- end
42
-
43
- it 'generates combined scopes' do
44
- expect(Comment.filter_by('author_id' => alice.id, 'post_id' => apost.id).pluck(:title)).to match_array(['AA'])
45
- expect(Comment.filter_by('author_id' => alice.id, 'post_id' => bpost.id).pluck(:title)).to match_array(['AB'])
46
- expect(Comment.filter_by('author_id' => bob.id, 'post_id' => apost.id).pluck(:title)).to match_array(['BA'])
47
- expect(Comment.filter_by('author_id' => bob.id, 'post_id' => bpost.id).pluck(:title)).to match_array(['BB'])
48
-
49
- scope = Comment.filter_by('author_id' => [alice.id, bob.id], 'post_id' => bpost.id)
50
- expect(scope.pluck(:title)).to match_array(%w[AB BB])
51
- end
52
-
53
- it 'generates negated scopes' do
54
- expect(Comment.filter_by('author_id_not' => alice.id).pluck(:title)).to match_array(%w[BA BB])
55
- expect(Comment.filter_by('author_id_not' => [alice.id, bob.id]).pluck(:title)).to match_array(%w[])
56
- expect(Comment.filter_by('post_id_not' => apost.id).pluck(:title)).to match_array(%w[AB BB])
57
- expect(Comment.filter_by('post_author_id_not' => alice.id).pluck(:title)).to match_array(%w[AB BB])
58
- expect(Comment.filter_by('author_id' => bob.id, 'post_id_not' => bpost.id).pluck(:title)).to match_array(['BA'])
59
- end
60
-
61
- it 'combines with other scopes' do
62
- scope = Comment.where(author_id: alice.id).filter_by('post_id' => apost.id)
63
- expect(scope.pluck(:title)).to match_array(['AA'])
64
-
65
- expect(alice.posts.filter_by('post_id' => apost.id).count).to be(1)
66
- expect(alice.posts.filter_by('author_id' => alice.id).count).to be(1)
67
- expect(alice.posts.filter_by('author_id_not' => bob.id).count).to be(1)
68
- expect(alice.posts.filter_by('author_id' => bob.id).count).to be_zero
69
- expect(alice.posts.filter_by('author_id_not' => alice.id).count).to be_zero
70
- end
71
-
72
- it 'allows custom options' do
73
- scope = Post.filter_by({ 'only' => 'me' }, user_id: alice.id)
74
- expect(scope).to match_array([apost])
75
-
76
- scope = Post.filter_by({ 'only' => '??' }, user_id: alice.id)
77
- expect(scope.count).to eq(2)
78
-
79
- scope = Post.filter_by({ 'only' => 'me' })
80
- expect(scope.count).to eq(0)
81
- end
82
-
83
- it 'allows custom options from params' do
84
- filter = { 'only' => 'me' }
85
- expect(Post.filter_by(filter, user_id: alice.id)).to match_array([apost])
86
- expect(Post.filter_by(filter).count).to eq(0)
87
- end
88
-
89
- it 'ignores invalid scopes' do
90
- expect(Comment.filter_by('invalid' => 1).count).to eq(4)
91
- expect(Post.filter_by('post_id' => bpost.id).count).to eq(2)
92
- expect(Rating.filter_by('post_author_id' => bob.id).count).to eq(1)
93
- end
94
-
95
- it 'supports deprecated scoping' do
96
- expect(Comment.filter_by('deprecated' => alice.id).pluck(:title)).to match_array(%w[AA AB])
97
- expect(Comment.filter_by('deprecated_with_opts' => alice.id).pluck(:title)).to match_array(%w[AA AB])
98
- expect(Comment.filter_by('deprecated_not' => alice.id).pluck(:title)).to match_array(%w[BA BB])
99
- end
100
-
101
- it 'supports abstract classes' do
102
- expect(Post.filter_by('author_id' => bob.id).count).to eq(1)
103
- end
104
- end
data/spec/spec_helper.rb DELETED
@@ -1,87 +0,0 @@
1
- ENV['RACK_ENV'] ||= 'test'
2
- require 'filterable-by'
3
- require 'rspec'
4
-
5
- ActiveRecord::Base.configurations = { 'test' => { 'adapter' => 'sqlite3', 'database' => ':memory:' } }
6
- ActiveRecord::Base.establish_connection :test
7
-
8
- ActiveRecord::Base.connection.instance_eval do
9
- create_table :authors do |_|
10
- # no columns
11
- end
12
- create_table :posts do |t|
13
- t.integer :author_id, null: false
14
- end
15
- create_table :feedbacks do |t|
16
- t.string :type, null: false
17
- t.string :title
18
- t.integer :stars, null: false, default: 0
19
- t.integer :post_id, null: false
20
- t.integer :author_id, null: false
21
- end
22
- end
23
-
24
- class Author < ActiveRecord::Base
25
- has_many :posts
26
- end
27
-
28
- class AbstractPost < ActiveRecord::Base
29
- self.abstract_class = true
30
-
31
- filterable_by :author_id
32
- filterable_by :only do |value, **opts|
33
- case value
34
- when 'me'
35
- where(author_id: opts[:user_id]) if opts[:user_id]
36
- else
37
- all
38
- end
39
- end
40
- end
41
-
42
- class Post < AbstractPost
43
- belongs_to :author
44
- end
45
-
46
- class Feedback < ActiveRecord::Base
47
- belongs_to :author
48
- belongs_to :post
49
-
50
- filterable_by :post_id, :author_id
51
-
52
- ActiveSupport::Deprecation.silence do
53
- filterable_by :deprecated do |scope, value|
54
- scope.where(author_id: value)
55
- end
56
- filterable_by :deprecated_with_opts do |scope, value, **_opts|
57
- scope.where(author_id: value)
58
- end
59
- end
60
- end
61
-
62
- class Comment < Feedback
63
- filterable_by :post_author_id do |value|
64
- joins(:post).where(Post.arel_table[:author_id].eq(value))
65
- end
66
- end
67
-
68
- class Rating < Feedback
69
- end
70
-
71
- AUTHORS = {
72
- alice: Author.create!,
73
- bob: Author.create!,
74
- }.freeze
75
-
76
- POSTS = {
77
- alices: Post.create!(author_id: AUTHORS[:alice].id),
78
- bobs: Post.create!(author_id: AUTHORS[:bob].id),
79
- }.freeze
80
-
81
- COMMENTS = {
82
- alice_on_alice: Comment.create!(title: 'AA', post_id: POSTS[:alices].id, author_id: AUTHORS[:alice].id),
83
- bob_on_alice: Comment.create!(title: 'BA', post_id: POSTS[:alices].id, author_id: AUTHORS[:bob].id),
84
- alice_on_bob: Comment.create!(title: 'AB', post_id: POSTS[:bobs].id, author_id: AUTHORS[:alice].id),
85
- bob_on_bob: Comment.create!(title: 'BB', post_id: POSTS[:bobs].id, author_id: AUTHORS[:bob].id),
86
- boa_rating: Rating.create!(stars: 5, post_id: POSTS[:alices].id, author_id: AUTHORS[:bob].id),
87
- }.freeze