acts_as_recursive_tree 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +37 -0
  3. data/.github/workflows/lint.yml +31 -0
  4. data/.github/workflows/rubygem.yml +37 -0
  5. data/.gitignore +3 -1
  6. data/.rubocop.yml +30 -1
  7. data/.rubocop_todo.yml +28 -281
  8. data/Appraisals +16 -0
  9. data/CHANGELOG.md +17 -1
  10. data/Gemfile +2 -0
  11. data/README.md +3 -0
  12. data/Rakefile +8 -8
  13. data/acts_as_recursive_tree.gemspec +27 -18
  14. data/gemfiles/ar_52.gemfile +8 -0
  15. data/gemfiles/ar_60.gemfile +8 -0
  16. data/gemfiles/ar_61.gemfile +8 -0
  17. data/lib/acts_as_recursive_tree.rb +7 -11
  18. data/lib/acts_as_recursive_tree/acts_macro.rb +6 -6
  19. data/lib/acts_as_recursive_tree/associations.rb +10 -8
  20. data/lib/acts_as_recursive_tree/builders/ancestors.rb +3 -5
  21. data/lib/acts_as_recursive_tree/builders/descendants.rb +3 -3
  22. data/lib/acts_as_recursive_tree/builders/leaves.rb +7 -8
  23. data/lib/acts_as_recursive_tree/builders/relation_builder.rb +25 -28
  24. data/lib/acts_as_recursive_tree/builders/{strategy.rb → strategies.rb} +4 -7
  25. data/lib/acts_as_recursive_tree/builders/strategies/ancestor.rb +19 -0
  26. data/lib/acts_as_recursive_tree/builders/strategies/descendant.rb +19 -0
  27. data/lib/acts_as_recursive_tree/builders/{strategy → strategies}/join.rb +10 -4
  28. data/lib/acts_as_recursive_tree/builders/{strategy → strategies}/subselect.rb +3 -1
  29. data/lib/acts_as_recursive_tree/config.rb +2 -0
  30. data/lib/acts_as_recursive_tree/model.rb +9 -8
  31. data/lib/acts_as_recursive_tree/options/depth_condition.rb +3 -2
  32. data/lib/acts_as_recursive_tree/options/query_options.rb +10 -1
  33. data/lib/acts_as_recursive_tree/options/values.rb +28 -18
  34. data/lib/acts_as_recursive_tree/railtie.rb +2 -0
  35. data/lib/acts_as_recursive_tree/scopes.rb +8 -4
  36. data/lib/acts_as_recursive_tree/version.rb +3 -1
  37. data/spec/builders_spec.rb +21 -12
  38. data/spec/db/database.rb +11 -4
  39. data/spec/db/database.yml +2 -5
  40. data/spec/db/models.rb +12 -11
  41. data/spec/db/schema.rb +3 -4
  42. data/spec/model/location_spec.rb +7 -11
  43. data/spec/model/node_spec.rb +35 -49
  44. data/spec/model/relation_spec.rb +6 -11
  45. data/spec/spec_helper.rb +54 -55
  46. data/spec/values_spec.rb +23 -19
  47. metadata +111 -25
  48. data/lib/acts_as_recursive_tree/builders.rb +0 -14
  49. data/lib/acts_as_recursive_tree/options.rb +0 -9
data/spec/values_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  shared_examples 'single values' do
@@ -5,11 +7,11 @@ shared_examples 'single values' do
5
7
 
6
8
  it { is_expected.to be_a ActsAsRecursiveTree::Options::Values::SingleValue }
7
9
 
8
- it 'should apply_to' do
10
+ it 'apply_toes' do
9
11
  expect(value.apply_to(attribute).to_sql).to end_with " = #{single_value}"
10
12
  end
11
13
 
12
- it 'should apply_negated_to' do
14
+ it 'apply_negated_toes' do
13
15
  expect(value.apply_negated_to(attribute).to_sql).to end_with " != #{single_value}"
14
16
  end
15
17
  end
@@ -19,8 +21,8 @@ describe ActsAsRecursiveTree::Options::Values do
19
21
  let(:attribute) { table['test_attr'] }
20
22
 
21
23
  context 'invalid agurment' do
22
- it 'should raise exception' do
23
- expect{described_class.create(nil)}.to raise_exception /is not supported/
24
+ it 'raises exception' do
25
+ expect { described_class.create(nil) }.to raise_exception(/is not supported/)
24
26
  end
25
27
  end
26
28
 
@@ -34,53 +36,55 @@ describe ActsAsRecursiveTree::Options::Values do
34
36
  it_behaves_like 'single values' do
35
37
  let(:value_obj) { Node.new(id: single_value) }
36
38
  end
37
-
38
39
  end
39
40
 
40
41
  context 'multi value' do
41
42
  context 'Array' do
42
- let(:array) { [1, 2, 3] }
43
43
  subject(:value) { described_class.create(array) }
44
44
 
45
+ let(:array) { [1, 2, 3] }
46
+
45
47
  it { is_expected.to be_a ActsAsRecursiveTree::Options::Values::MultiValue }
46
48
 
47
- it 'should apply_to' do
49
+ it 'apply_toes' do
48
50
  expect(value.apply_to(attribute).to_sql).to end_with " IN (#{array.join(', ')})"
49
51
  end
50
52
 
51
- it 'should apply_negated_to' do
53
+ it 'apply_negated_toes' do
52
54
  expect(value.apply_negated_to(attribute).to_sql).to end_with " NOT IN (#{array.join(', ')})"
53
55
  end
54
56
  end
55
57
 
56
58
  context 'Range' do
57
- let(:range) { 1..3 }
58
59
  subject(:value) { described_class.create(range) }
59
60
 
60
- it { is_expected.to be_a ActsAsRecursiveTree::Options::Values::MultiValue }
61
+ let(:range) { 1..3 }
62
+
63
+ it { is_expected.to be_a ActsAsRecursiveTree::Options::Values::RangeValue }
61
64
 
62
- it 'should apply_to' do
65
+ it 'apply_toes' do
63
66
  expect(value.apply_to(attribute).to_sql).to end_with "BETWEEN #{range.begin} AND #{range.end}"
64
67
  end
65
68
 
66
- it 'should apply_negated_to' do
67
- expect(value.apply_negated_to(attribute).to_sql).to match /< #{range.begin} OR.* > #{range.end}/
69
+ it 'apply_negated_toes' do
70
+ expect(value.apply_negated_to(attribute).to_sql).to match(/< #{range.begin} OR.* > #{range.end}/)
68
71
  end
69
72
  end
70
73
 
71
74
  context 'Relation' do
72
- let(:relation) { Node.where(name: 'test') }
73
75
  subject(:value) { described_class.create(relation, OpenStruct.new(primary_key: :id)) }
74
76
 
77
+ let(:relation) { Node.where(name: 'test') }
78
+
75
79
  it { is_expected.to be_a ActsAsRecursiveTree::Options::Values::Relation }
76
80
 
77
- it 'should apply_to' do
78
- expect(value.apply_to(attribute).to_sql).to match /IN \(SELECT.*\)/
81
+ it 'apply_toes' do
82
+ expect(value.apply_to(attribute).to_sql).to match(/IN \(SELECT.*\)/)
79
83
  end
80
84
 
81
- it 'should apply_negated_to' do
82
- expect(value.apply_negated_to(attribute).to_sql).to match /NOT IN \(SELECT.*\)/
85
+ it 'apply_negated_toes' do
86
+ expect(value.apply_negated_to(attribute).to_sql).to match(/NOT IN \(SELECT.*\)/)
83
87
  end
84
88
  end
85
89
  end
86
- end
90
+ end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_recursive_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wolfgang Wedelich-John
8
+ - Willem Mulder
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2018-04-06 00:00:00.000000000 Z
12
+ date: 2021-08-02 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activerecord
@@ -16,34 +17,68 @@ dependencies:
16
17
  requirements:
17
18
  - - ">="
18
19
  - !ruby/object:Gem::Version
19
- version: 5.0.0
20
+ version: 5.2.0
20
21
  - - "<"
21
22
  - !ruby/object:Gem::Version
22
- version: 6.0.0
23
+ version: '7.0'
23
24
  type: :runtime
24
25
  prerelease: false
25
26
  version_requirements: !ruby/object:Gem::Requirement
26
27
  requirements:
27
28
  - - ">="
28
29
  - !ruby/object:Gem::Version
29
- version: 5.0.0
30
+ version: 5.2.0
30
31
  - - "<"
31
32
  - !ruby/object:Gem::Version
32
- version: 6.0.0
33
+ version: '7.0'
33
34
  - !ruby/object:Gem::Dependency
34
- name: bundler
35
+ name: activesupport
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 5.2.0
41
+ - - "<"
42
+ - !ruby/object:Gem::Version
43
+ version: '7.0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 5.2.0
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: '7.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: zeitwerk
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '2.4'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '2.4'
68
+ - !ruby/object:Gem::Dependency
69
+ name: appraisal
35
70
  requirement: !ruby/object:Gem::Requirement
36
71
  requirements:
37
72
  - - "~>"
38
73
  - !ruby/object:Gem::Version
39
- version: '1.7'
74
+ version: '2.4'
40
75
  type: :development
41
76
  prerelease: false
42
77
  version_requirements: !ruby/object:Gem::Requirement
43
78
  requirements:
44
79
  - - "~>"
45
80
  - !ruby/object:Gem::Version
46
- version: '1.7'
81
+ version: '2.4'
47
82
  - !ruby/object:Gem::Dependency
48
83
  name: database_cleaner
49
84
  requirement: !ruby/object:Gem::Requirement
@@ -62,30 +97,72 @@ dependencies:
62
97
  name: rake
63
98
  requirement: !ruby/object:Gem::Requirement
64
99
  requirements:
65
- - - "~>"
100
+ - - ">="
66
101
  - !ruby/object:Gem::Version
67
- version: '10.0'
102
+ version: '0'
68
103
  type: :development
69
104
  prerelease: false
70
105
  version_requirements: !ruby/object:Gem::Requirement
71
106
  requirements:
72
- - - "~>"
107
+ - - ">="
73
108
  - !ruby/object:Gem::Version
74
- version: '10.0'
109
+ version: '0'
75
110
  - !ruby/object:Gem::Dependency
76
111
  name: rspec-rails
77
112
  requirement: !ruby/object:Gem::Requirement
78
113
  requirements:
79
- - - "~>"
114
+ - - ">="
80
115
  - !ruby/object:Gem::Version
81
116
  version: '3.5'
82
117
  type: :development
83
118
  prerelease: false
84
119
  version_requirements: !ruby/object:Gem::Requirement
85
120
  requirements:
86
- - - "~>"
121
+ - - ">="
87
122
  - !ruby/object:Gem::Version
88
123
  version: '3.5'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rubocop
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 1.8.0
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: 1.8.0
138
+ - !ruby/object:Gem::Dependency
139
+ name: rubocop-rails
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 2.9.0
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: 2.9.0
152
+ - !ruby/object:Gem::Dependency
153
+ name: rubocop-rspec
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: 2.1.0
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: 2.1.0
89
166
  - !ruby/object:Gem::Dependency
90
167
  name: sqlite3
91
168
  requirement: !ruby/object:Gem::Requirement
@@ -104,35 +181,43 @@ description: "\n This is a ruby gem that provides drop in replacement for acts_
104
181
  but makes use of SQL recursive statement. Be sure to have a DBMS that supports recursive
105
182
  queries when using this gem (e.g. PostgreSQL or SQLite). "
106
183
  email:
107
- - wolfgang.wedelich@1und1.de
184
+ - wolfgang.wedelich@ionos.com
185
+ - 14mRh4X0r@gmail.com
108
186
  executables: []
109
187
  extensions: []
110
188
  extra_rdoc_files: []
111
189
  files:
190
+ - ".github/workflows/ci.yml"
191
+ - ".github/workflows/lint.yml"
192
+ - ".github/workflows/rubygem.yml"
112
193
  - ".gitignore"
113
194
  - ".rspec"
114
195
  - ".rubocop.yml"
115
196
  - ".rubocop_todo.yml"
197
+ - Appraisals
116
198
  - CHANGELOG.md
117
199
  - Gemfile
118
200
  - LICENSE.txt
119
201
  - README.md
120
202
  - Rakefile
121
203
  - acts_as_recursive_tree.gemspec
204
+ - gemfiles/ar_52.gemfile
205
+ - gemfiles/ar_60.gemfile
206
+ - gemfiles/ar_61.gemfile
122
207
  - lib/acts_as_recursive_tree.rb
123
208
  - lib/acts_as_recursive_tree/acts_macro.rb
124
209
  - lib/acts_as_recursive_tree/associations.rb
125
- - lib/acts_as_recursive_tree/builders.rb
126
210
  - lib/acts_as_recursive_tree/builders/ancestors.rb
127
211
  - lib/acts_as_recursive_tree/builders/descendants.rb
128
212
  - lib/acts_as_recursive_tree/builders/leaves.rb
129
213
  - lib/acts_as_recursive_tree/builders/relation_builder.rb
130
- - lib/acts_as_recursive_tree/builders/strategy.rb
131
- - lib/acts_as_recursive_tree/builders/strategy/join.rb
132
- - lib/acts_as_recursive_tree/builders/strategy/subselect.rb
214
+ - lib/acts_as_recursive_tree/builders/strategies.rb
215
+ - lib/acts_as_recursive_tree/builders/strategies/ancestor.rb
216
+ - lib/acts_as_recursive_tree/builders/strategies/descendant.rb
217
+ - lib/acts_as_recursive_tree/builders/strategies/join.rb
218
+ - lib/acts_as_recursive_tree/builders/strategies/subselect.rb
133
219
  - lib/acts_as_recursive_tree/config.rb
134
220
  - lib/acts_as_recursive_tree/model.rb
135
- - lib/acts_as_recursive_tree/options.rb
136
221
  - lib/acts_as_recursive_tree/options/depth_condition.rb
137
222
  - lib/acts_as_recursive_tree/options/query_options.rb
138
223
  - lib/acts_as_recursive_tree/options/values.rb
@@ -152,7 +237,9 @@ files:
152
237
  homepage: https://github.com/1and1/acts_as_recursive_tree
153
238
  licenses:
154
239
  - MIT
155
- metadata: {}
240
+ metadata:
241
+ bug_tracker_uri: https://github.com/1and1/acts_as_recursive_tree/issues
242
+ changelog_uri: https://github.com/1and1/acts_as_recursive_tree/CHANGELOG.md
156
243
  post_install_message:
157
244
  rdoc_options: []
158
245
  require_paths:
@@ -161,15 +248,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
161
248
  requirements:
162
249
  - - ">="
163
250
  - !ruby/object:Gem::Version
164
- version: 2.0.0
251
+ version: 2.5.0
165
252
  required_rubygems_version: !ruby/object:Gem::Requirement
166
253
  requirements:
167
254
  - - ">="
168
255
  - !ruby/object:Gem::Version
169
256
  version: '0'
170
257
  requirements: []
171
- rubyforge_project:
172
- rubygems_version: 2.7.6
258
+ rubygems_version: 3.1.6
173
259
  signing_key:
174
260
  specification_version: 4
175
261
  summary: Drop in replacement for acts_as_tree but using recursive queries
@@ -1,14 +0,0 @@
1
- module ActsAsRecursiveTree
2
- module Builders
3
- extend ActiveSupport::Autoload
4
-
5
- autoload :Values
6
- autoload :DepthCondition
7
- autoload :QueryOptions
8
- autoload :Strategy
9
- autoload :RelationBuilder
10
- autoload :Descendants
11
- autoload :Ancestors
12
- autoload :Leaves
13
- end
14
- end
@@ -1,9 +0,0 @@
1
- module ActsAsRecursiveTree
2
- module Options
3
- extend ActiveSupport::Autoload
4
-
5
- autoload :Values
6
- autoload :DepthCondition
7
- autoload :QueryOptions
8
- end
9
- end