closure_tree 7.4.0.rc1 → 8.0.0
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 +4 -4
- data/.github/workflows/ci.yml +30 -56
- data/.github/workflows/ci_jruby.yml +68 -0
- data/.github/workflows/ci_truffleruby.yml +71 -0
- data/.github/workflows/release.yml +17 -0
- data/.gitignore +1 -1
- data/.release-please-manifest.json +1 -0
- data/.tool-versions +1 -0
- data/Appraisals +9 -53
- data/CHANGELOG.md +5 -0
- data/Gemfile +2 -3
- data/README.md +21 -9
- data/Rakefile +11 -16
- data/closure_tree.gemspec +16 -9
- data/lib/closure_tree/active_record_support.rb +3 -14
- data/lib/closure_tree/digraphs.rb +1 -1
- data/lib/closure_tree/finders.rb +1 -1
- data/lib/closure_tree/hash_tree.rb +1 -1
- data/lib/closure_tree/hierarchy_maintenance.rb +3 -6
- data/lib/closure_tree/model.rb +3 -3
- data/lib/closure_tree/numeric_deterministic_ordering.rb +3 -8
- data/lib/closure_tree/support.rb +3 -7
- data/lib/closure_tree/version.rb +1 -1
- data/lib/generators/closure_tree/migration_generator.rb +1 -4
- data/release-please-config.json +4 -0
- data/test/closure_tree/cache_invalidation_test.rb +36 -0
- data/test/closure_tree/cuisine_type_test.rb +42 -0
- data/test/closure_tree/generator_test.rb +49 -0
- data/test/closure_tree/has_closure_tree_root_test.rb +80 -0
- data/test/closure_tree/hierarchy_maintenance_test.rb +56 -0
- data/test/closure_tree/label_test.rb +674 -0
- data/test/closure_tree/metal_test.rb +59 -0
- data/test/closure_tree/model_test.rb +9 -0
- data/test/closure_tree/namespace_type_test.rb +13 -0
- data/test/closure_tree/parallel_test.rb +162 -0
- data/test/closure_tree/pool_test.rb +33 -0
- data/test/closure_tree/support_test.rb +18 -0
- data/test/closure_tree/tag_test.rb +8 -0
- data/test/closure_tree/user_test.rb +175 -0
- data/test/closure_tree/uuid_tag_test.rb +8 -0
- data/test/support/query_counter.rb +25 -0
- data/test/support/tag_examples.rb +923 -0
- data/test/test_helper.rb +99 -0
- metadata +54 -23
- data/_config.yml +0 -1
- data/tests.sh +0 -11
data/test/test_helper.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require 'erb'
|
5
|
+
require 'active_record'
|
6
|
+
require 'with_advisory_lock'
|
7
|
+
require 'tmpdir'
|
8
|
+
require 'securerandom'
|
9
|
+
require 'minitest'
|
10
|
+
require 'minitest/autorun'
|
11
|
+
require 'database_cleaner'
|
12
|
+
require 'support/query_counter'
|
13
|
+
require 'parallel'
|
14
|
+
require 'timecop'
|
15
|
+
|
16
|
+
ActiveRecord::Base.configurations = {
|
17
|
+
default_env: {
|
18
|
+
url: ENV.fetch('DATABASE_URL', "sqlite3://#{Dir.tmpdir}/#{SecureRandom.hex}.sqlite3"),
|
19
|
+
properties: { allowPublicKeyRetrieval: true } # for JRuby madness
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
ENV['WITH_ADVISORY_LOCK_PREFIX'] ||= SecureRandom.hex
|
24
|
+
|
25
|
+
ActiveRecord::Base.establish_connection
|
26
|
+
|
27
|
+
def env_db
|
28
|
+
@env_db ||= if ActiveRecord::Base.respond_to?(:connection_db_config)
|
29
|
+
ActiveRecord::Base.connection_db_config.adapter
|
30
|
+
else
|
31
|
+
ActiveRecord::Base.connection_config[:adapter]
|
32
|
+
end.to_sym
|
33
|
+
end
|
34
|
+
|
35
|
+
ActiveRecord::Migration.verbose = false
|
36
|
+
ActiveRecord::Base.table_name_prefix = ENV['DB_PREFIX'].to_s
|
37
|
+
ActiveRecord::Base.table_name_suffix = ENV['DB_SUFFIX'].to_s
|
38
|
+
ActiveRecord::Base.establish_connection
|
39
|
+
|
40
|
+
# Use in specs to skip some tests
|
41
|
+
def sqlite?
|
42
|
+
env_db == :sqlite3
|
43
|
+
end
|
44
|
+
|
45
|
+
ActiveRecord::Base.connection.recreate_database('closure_tree_test') unless sqlite?
|
46
|
+
puts "Testing with #{env_db} database, ActiveRecord #{ActiveRecord.gem_version} and #{RUBY_ENGINE} #{RUBY_ENGINE_VERSION} as #{RUBY_VERSION}"
|
47
|
+
|
48
|
+
DatabaseCleaner.strategy = :truncation
|
49
|
+
|
50
|
+
module Minitest
|
51
|
+
class Spec
|
52
|
+
include QueryCounter
|
53
|
+
|
54
|
+
before :each do
|
55
|
+
ENV['FLOCK_DIR'] = Dir.mktmpdir
|
56
|
+
DatabaseCleaner.start
|
57
|
+
end
|
58
|
+
|
59
|
+
after :each do
|
60
|
+
FileUtils.remove_entry_secure ENV['FLOCK_DIR']
|
61
|
+
DatabaseCleaner.clean
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class ActiveSupport::TestCase
|
67
|
+
def exceed_query_limit(num, &block)
|
68
|
+
counter = QueryCounter.new
|
69
|
+
ActiveSupport::Notifications.subscribed(counter.to_proc, 'sql.active_record', &block)
|
70
|
+
assert counter.query_count <= num, "Expected to run maximum #{num} queries, but ran #{counter.query_count}"
|
71
|
+
end
|
72
|
+
|
73
|
+
class QueryCounter
|
74
|
+
attr_reader :query_count
|
75
|
+
|
76
|
+
def initialize
|
77
|
+
@query_count = 0
|
78
|
+
end
|
79
|
+
|
80
|
+
def to_proc
|
81
|
+
lambda(&method(:callback))
|
82
|
+
end
|
83
|
+
|
84
|
+
def callback(name, start, finish, message_id, values)
|
85
|
+
@query_count += 1 unless %w(CACHE SCHEMA).include?(values[:name])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Configure parallel tests
|
91
|
+
Thread.abort_on_exception = true
|
92
|
+
|
93
|
+
# Configure advisory_lock
|
94
|
+
# See: https://github.com/ClosureTree/with_advisory_lock
|
95
|
+
ENV['WITH_ADVISORY_LOCK_PREFIX'] ||= SecureRandom.hex
|
96
|
+
|
97
|
+
require 'closure_tree'
|
98
|
+
require_relative '../spec/support/schema'
|
99
|
+
require_relative '../spec/support/models'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: closure_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 8.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew McEachen
|
8
|
-
|
8
|
+
- Abdelkader Boudih
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,28 +16,34 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 7.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 7.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: with_advisory_lock
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 5.0.0
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 6.0.0
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
41
|
- - ">="
|
39
42
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
43
|
+
version: 5.0.0
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 6.0.0
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: appraisal
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,7 +101,7 @@ dependencies:
|
|
95
101
|
- !ruby/object:Gem::Version
|
96
102
|
version: '0'
|
97
103
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
104
|
+
name: minitest
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
100
106
|
requirements:
|
101
107
|
- - ">="
|
@@ -109,7 +115,7 @@ dependencies:
|
|
109
115
|
- !ruby/object:Gem::Version
|
110
116
|
version: '0'
|
111
117
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
118
|
+
name: minitest-reporters
|
113
119
|
requirement: !ruby/object:Gem::Requirement
|
114
120
|
requirements:
|
115
121
|
- - ">="
|
@@ -123,7 +129,7 @@ dependencies:
|
|
123
129
|
- !ruby/object:Gem::Version
|
124
130
|
version: '0'
|
125
131
|
- !ruby/object:Gem::Dependency
|
126
|
-
name: rspec-
|
132
|
+
name: rspec-instafail
|
127
133
|
requirement: !ruby/object:Gem::Requirement
|
128
134
|
requirements:
|
129
135
|
- - ">="
|
@@ -137,7 +143,7 @@ dependencies:
|
|
137
143
|
- !ruby/object:Gem::Version
|
138
144
|
version: '0'
|
139
145
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
146
|
+
name: rspec-rails
|
141
147
|
requirement: !ruby/object:Gem::Requirement
|
142
148
|
requirements:
|
143
149
|
- - ">="
|
@@ -178,16 +184,21 @@ dependencies:
|
|
178
184
|
- - ">="
|
179
185
|
- !ruby/object:Gem::Version
|
180
186
|
version: '0'
|
181
|
-
description: Easily and efficiently make your ActiveRecord model support hierarchies
|
182
187
|
email:
|
183
|
-
- matthew
|
188
|
+
- matthew+github@mceachen.org
|
189
|
+
- terminale@gmail.com
|
184
190
|
executables: []
|
185
191
|
extensions: []
|
186
192
|
extra_rdoc_files: []
|
187
193
|
files:
|
188
194
|
- ".github/workflows/ci.yml"
|
195
|
+
- ".github/workflows/ci_jruby.yml"
|
196
|
+
- ".github/workflows/ci_truffleruby.yml"
|
197
|
+
- ".github/workflows/release.yml"
|
189
198
|
- ".gitignore"
|
199
|
+
- ".release-please-manifest.json"
|
190
200
|
- ".rspec"
|
201
|
+
- ".tool-versions"
|
191
202
|
- ".yardopts"
|
192
203
|
- Appraisals
|
193
204
|
- CHANGELOG.md
|
@@ -195,7 +206,6 @@ files:
|
|
195
206
|
- MIT-LICENSE
|
196
207
|
- README.md
|
197
208
|
- Rakefile
|
198
|
-
- _config.yml
|
199
209
|
- bin/appraisal
|
200
210
|
- bin/rake
|
201
211
|
- bin/rspec
|
@@ -224,12 +234,34 @@ files:
|
|
224
234
|
- lib/generators/closure_tree/templates/config.rb
|
225
235
|
- lib/generators/closure_tree/templates/create_hierarchies_table.rb.erb
|
226
236
|
- mktree.rb
|
227
|
-
-
|
228
|
-
|
237
|
+
- release-please-config.json
|
238
|
+
- test/closure_tree/cache_invalidation_test.rb
|
239
|
+
- test/closure_tree/cuisine_type_test.rb
|
240
|
+
- test/closure_tree/generator_test.rb
|
241
|
+
- test/closure_tree/has_closure_tree_root_test.rb
|
242
|
+
- test/closure_tree/hierarchy_maintenance_test.rb
|
243
|
+
- test/closure_tree/label_test.rb
|
244
|
+
- test/closure_tree/metal_test.rb
|
245
|
+
- test/closure_tree/model_test.rb
|
246
|
+
- test/closure_tree/namespace_type_test.rb
|
247
|
+
- test/closure_tree/parallel_test.rb
|
248
|
+
- test/closure_tree/pool_test.rb
|
249
|
+
- test/closure_tree/support_test.rb
|
250
|
+
- test/closure_tree/tag_test.rb
|
251
|
+
- test/closure_tree/user_test.rb
|
252
|
+
- test/closure_tree/uuid_tag_test.rb
|
253
|
+
- test/support/query_counter.rb
|
254
|
+
- test/support/tag_examples.rb
|
255
|
+
- test/test_helper.rb
|
256
|
+
homepage: https://github.com/ClosureTree/closure_tree/
|
229
257
|
licenses:
|
230
258
|
- MIT
|
231
|
-
metadata:
|
232
|
-
|
259
|
+
metadata:
|
260
|
+
bug_tracker_uri: https://github.com/ClosureTree/closure_tree/issues
|
261
|
+
changelog_uri: https://github.com/ClosureTree/closure_tree/blob/master/CHANGELOG.md
|
262
|
+
documentation_uri: https://www.rubydoc.info/gems/closure_tree/8.0.0
|
263
|
+
homepage_uri: https://closuretree.github.io/closure_tree/
|
264
|
+
source_code_uri: https://github.com/ClosureTree/closure_tree
|
233
265
|
rdoc_options: []
|
234
266
|
require_paths:
|
235
267
|
- lib
|
@@ -237,15 +269,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
237
269
|
requirements:
|
238
270
|
- - ">="
|
239
271
|
- !ruby/object:Gem::Version
|
240
|
-
version:
|
272
|
+
version: 3.3.0
|
241
273
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
274
|
requirements:
|
243
|
-
- - "
|
275
|
+
- - ">="
|
244
276
|
- !ruby/object:Gem::Version
|
245
|
-
version:
|
277
|
+
version: '0'
|
246
278
|
requirements: []
|
247
|
-
rubygems_version: 3.
|
248
|
-
signing_key:
|
279
|
+
rubygems_version: 3.6.7
|
249
280
|
specification_version: 4
|
250
281
|
summary: Easily and efficiently make your ActiveRecord model support hierarchies
|
251
282
|
test_files: []
|
data/_config.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
theme: jekyll-theme-leap-day
|