closure_tree 8.0.0 → 9.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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +111 -38
  4. data/bin/rails +15 -0
  5. data/bin/rake +7 -7
  6. data/closure_tree.gemspec +11 -17
  7. data/lib/closure_tree/active_record_support.rb +4 -1
  8. data/lib/closure_tree/adapter_support.rb +11 -0
  9. data/lib/closure_tree/arel_helpers.rb +83 -0
  10. data/lib/closure_tree/configuration.rb +2 -0
  11. data/lib/closure_tree/deterministic_ordering.rb +2 -0
  12. data/lib/closure_tree/digraphs.rb +6 -4
  13. data/lib/closure_tree/finders.rb +103 -54
  14. data/lib/closure_tree/has_closure_tree.rb +5 -2
  15. data/lib/closure_tree/has_closure_tree_root.rb +12 -17
  16. data/lib/closure_tree/hash_tree.rb +2 -1
  17. data/lib/closure_tree/hash_tree_support.rb +38 -13
  18. data/lib/closure_tree/hierarchy_maintenance.rb +19 -26
  19. data/lib/closure_tree/model.rb +29 -29
  20. data/lib/closure_tree/numeric_deterministic_ordering.rb +90 -55
  21. data/lib/closure_tree/numeric_order_support.rb +20 -18
  22. data/lib/closure_tree/support.rb +29 -32
  23. data/lib/closure_tree/support_attributes.rb +31 -5
  24. data/lib/closure_tree/support_flags.rb +2 -12
  25. data/lib/closure_tree/test/matcher.rb +10 -12
  26. data/lib/closure_tree/version.rb +3 -1
  27. data/lib/closure_tree.rb +22 -2
  28. data/lib/generators/closure_tree/config_generator.rb +3 -1
  29. data/lib/generators/closure_tree/migration_generator.rb +6 -4
  30. data/lib/generators/closure_tree/templates/config.rb +2 -0
  31. metadata +12 -104
  32. data/.github/workflows/ci.yml +0 -72
  33. data/.github/workflows/ci_jruby.yml +0 -68
  34. data/.github/workflows/ci_truffleruby.yml +0 -71
  35. data/.github/workflows/release.yml +0 -17
  36. data/.gitignore +0 -17
  37. data/.release-please-manifest.json +0 -1
  38. data/.rspec +0 -1
  39. data/.tool-versions +0 -1
  40. data/.yardopts +0 -3
  41. data/Appraisals +0 -61
  42. data/Gemfile +0 -6
  43. data/Rakefile +0 -32
  44. data/bin/appraisal +0 -29
  45. data/bin/rspec +0 -29
  46. data/mktree.rb +0 -38
  47. data/release-please-config.json +0 -4
  48. data/test/closure_tree/cache_invalidation_test.rb +0 -36
  49. data/test/closure_tree/cuisine_type_test.rb +0 -42
  50. data/test/closure_tree/generator_test.rb +0 -49
  51. data/test/closure_tree/has_closure_tree_root_test.rb +0 -80
  52. data/test/closure_tree/hierarchy_maintenance_test.rb +0 -56
  53. data/test/closure_tree/label_test.rb +0 -674
  54. data/test/closure_tree/metal_test.rb +0 -59
  55. data/test/closure_tree/model_test.rb +0 -9
  56. data/test/closure_tree/namespace_type_test.rb +0 -13
  57. data/test/closure_tree/parallel_test.rb +0 -162
  58. data/test/closure_tree/pool_test.rb +0 -33
  59. data/test/closure_tree/support_test.rb +0 -18
  60. data/test/closure_tree/tag_test.rb +0 -8
  61. data/test/closure_tree/user_test.rb +0 -175
  62. data/test/closure_tree/uuid_tag_test.rb +0 -8
  63. data/test/support/query_counter.rb +0 -25
  64. data/test/support/tag_examples.rb +0 -923
  65. data/test/test_helper.rb +0 -99
data/test/test_helper.rb DELETED
@@ -1,99 +0,0 @@
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'