closure_tree 7.4.0 → 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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +30 -56
  3. data/.github/workflows/ci_jruby.yml +68 -0
  4. data/.github/workflows/ci_truffleruby.yml +71 -0
  5. data/.github/workflows/release.yml +17 -0
  6. data/.gitignore +1 -1
  7. data/.release-please-manifest.json +1 -0
  8. data/.tool-versions +1 -0
  9. data/Appraisals +9 -53
  10. data/CHANGELOG.md +5 -0
  11. data/Gemfile +2 -3
  12. data/README.md +21 -9
  13. data/Rakefile +11 -16
  14. data/closure_tree.gemspec +16 -9
  15. data/lib/closure_tree/active_record_support.rb +3 -14
  16. data/lib/closure_tree/digraphs.rb +1 -1
  17. data/lib/closure_tree/finders.rb +1 -1
  18. data/lib/closure_tree/hash_tree.rb +1 -1
  19. data/lib/closure_tree/hierarchy_maintenance.rb +3 -6
  20. data/lib/closure_tree/model.rb +3 -3
  21. data/lib/closure_tree/numeric_deterministic_ordering.rb +3 -8
  22. data/lib/closure_tree/support.rb +3 -7
  23. data/lib/closure_tree/version.rb +1 -1
  24. data/lib/generators/closure_tree/migration_generator.rb +1 -4
  25. data/release-please-config.json +4 -0
  26. data/test/closure_tree/cache_invalidation_test.rb +36 -0
  27. data/test/closure_tree/cuisine_type_test.rb +42 -0
  28. data/test/closure_tree/generator_test.rb +49 -0
  29. data/test/closure_tree/has_closure_tree_root_test.rb +80 -0
  30. data/test/closure_tree/hierarchy_maintenance_test.rb +56 -0
  31. data/test/closure_tree/label_test.rb +674 -0
  32. data/test/closure_tree/metal_test.rb +59 -0
  33. data/test/closure_tree/model_test.rb +9 -0
  34. data/test/closure_tree/namespace_type_test.rb +13 -0
  35. data/test/closure_tree/parallel_test.rb +162 -0
  36. data/test/closure_tree/pool_test.rb +33 -0
  37. data/test/closure_tree/support_test.rb +18 -0
  38. data/test/closure_tree/tag_test.rb +8 -0
  39. data/test/closure_tree/user_test.rb +175 -0
  40. data/test/closure_tree/uuid_tag_test.rb +8 -0
  41. data/test/support/query_counter.rb +25 -0
  42. data/test/support/tag_examples.rb +923 -0
  43. data/test/test_helper.rb +99 -0
  44. metadata +52 -21
  45. data/_config.yml +0 -1
  46. data/tests.sh +0 -11
@@ -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: 7.4.0
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
8
- autorequire:
8
+ - Abdelkader Boudih
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-17 00:00:00.000000000 Z
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: 4.2.10
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: 4.2.10
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: 4.0.0
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: 4.0.0
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: pg
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: rspec-instafail
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-rails
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: sqlite3
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-github@mceachen.org
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
- - tests.sh
228
- homepage: http://mceachen.github.io/closure_tree/
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
- post_install_message:
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: 2.0.0
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
277
  version: '0'
246
278
  requirements: []
247
- rubygems_version: 3.0.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
data/tests.sh DELETED
@@ -1,11 +0,0 @@
1
- #!/bin/sh -ex
2
-
3
- for RMI in 2.3.1 #jruby-1.6.13 :P
4
- do
5
- rbenv local $RMI
6
- appraisal bundle install
7
- for DB in mysql sqlite postgresql
8
- do
9
- appraisal rake spec:all WITH_ADVISORY_LOCK_PREFIX=$(date +%s) DB=$DB
10
- done
11
- done