From aec42ef97b27c64f37ed583de7df071a192e4ecd Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Wed, 23 Jul 2025 19:40:49 +0100 Subject: [PATCH] feat: migrate from ActiveSupport::Autoload to Zeitwerk --- closure_tree.gemspec | 1 + lib/closure_tree.rb | 52 +++++-------------- lib/closure_tree/adapter_support.rb | 11 ---- lib/closure_tree/configuration.rb | 11 ---- lib/closure_tree/has_closure_tree.rb | 2 - lib/closure_tree/support.rb | 7 --- .../closure_tree/config_generator.rb | 14 ----- .../closure_tree/templates/config.rb | 7 --- 8 files changed, 13 insertions(+), 92 deletions(-) delete mode 100644 lib/closure_tree/adapter_support.rb delete mode 100644 lib/closure_tree/configuration.rb delete mode 100644 lib/generators/closure_tree/config_generator.rb delete mode 100644 lib/generators/closure_tree/templates/config.rb diff --git a/closure_tree.gemspec b/closure_tree.gemspec index bfb39be4..f449d87b 100644 --- a/closure_tree.gemspec +++ b/closure_tree.gemspec @@ -27,6 +27,7 @@ Gem::Specification.new do |gem| gem.add_dependency 'activerecord', '>= 7.2.0' gem.add_dependency 'with_advisory_lock', '>= 7.0.0' + gem.add_dependency 'zeitwerk', '~> 2.7' gem.add_development_dependency 'database_cleaner' gem.add_development_dependency 'minitest' diff --git a/lib/closure_tree.rb b/lib/closure_tree.rb index 59f505fc..728ee799 100644 --- a/lib/closure_tree.rb +++ b/lib/closure_tree.rb @@ -1,50 +1,22 @@ # frozen_string_literal: true require 'active_record' +require 'zeitwerk' -module ClosureTree - extend ActiveSupport::Autoload - - autoload :HasClosureTree - autoload :HasClosureTreeRoot - autoload :Support - autoload :HierarchyMaintenance - autoload :Model - autoload :Finders - autoload :HashTree - autoload :Digraphs - autoload :DeterministicOrdering - autoload :NumericDeterministicOrdering - autoload :Configuration - autoload :AdapterSupport +loader = Zeitwerk::Loader.for_gem +loader.ignore("#{__dir__}/generators") +loader.setup +module ClosureTree def self.configure - yield configuration + ActiveSupport::Deprecation.new.warn( + 'ClosureTree.configure is deprecated and will be removed in a future version. ' \ + 'Configuration is no longer needed.' + ) + yield if block_given? end - - def self.configuration - @configuration ||= Configuration.new - end -end - -ActiveSupport.on_load :active_record do - ActiveRecord::Base.extend ClosureTree::HasClosureTree - ActiveRecord::Base.extend ClosureTree::HasClosureTreeRoot -end - -# Adapter injection for different database types -ActiveSupport.on_load :active_record_postgresqladapter do - prepend ClosureTree::AdapterSupport -end - -ActiveSupport.on_load :active_record_mysql2adapter do - prepend ClosureTree::AdapterSupport -end - -ActiveSupport.on_load :active_record_trilogyadapter do - prepend ClosureTree::AdapterSupport end -ActiveSupport.on_load :active_record_sqlite3adapter do - prepend ClosureTree::AdapterSupport +ActiveSupport.on_load(:active_record) do + extend ClosureTree::HasClosureTree, ClosureTree::HasClosureTreeRoot end diff --git a/lib/closure_tree/adapter_support.rb b/lib/closure_tree/adapter_support.rb deleted file mode 100644 index cfbe0c95..00000000 --- a/lib/closure_tree/adapter_support.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -module ClosureTree - module AdapterSupport - extend ActiveSupport::Concern - - # This module is now only used to ensure the adapter has been loaded - # The actual advisory lock functionality is handled through the model's - # with_advisory_lock method from the with_advisory_lock gem - end -end diff --git a/lib/closure_tree/configuration.rb b/lib/closure_tree/configuration.rb deleted file mode 100644 index effeb4af..00000000 --- a/lib/closure_tree/configuration.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -module ClosureTree - class Configuration # :nodoc: - attr_accessor :database_less - - def initialize - @database_less = ENV['DATABASE_URL'].to_s.include?('//user:pass@127.0.0.1/') - end - end -end diff --git a/lib/closure_tree/has_closure_tree.rb b/lib/closure_tree/has_closure_tree.rb index 508274ff..ee6db3a7 100644 --- a/lib/closure_tree/has_closure_tree.rb +++ b/lib/closure_tree/has_closure_tree.rb @@ -36,8 +36,6 @@ def has_closure_tree(options = {}) include ClosureTree::NumericDeterministicOrdering if _ct.order_is_numeric? connection_pool.release_connection - rescue StandardError => e - raise e unless ClosureTree.configuration.database_less end alias acts_as_tree has_closure_tree diff --git a/lib/closure_tree/support.rb b/lib/closure_tree/support.rb index 4ffefc8e..9faa9b5a 100644 --- a/lib/closure_tree/support.rb +++ b/lib/closure_tree/support.rb @@ -1,12 +1,5 @@ # frozen_string_literal: true -require 'closure_tree/support_flags' -require 'closure_tree/support_attributes' -require 'closure_tree/numeric_order_support' -require 'closure_tree/active_record_support' -require 'closure_tree/hash_tree_support' -require 'closure_tree/arel_helpers' - # This class and mixins are an effort to reduce the namespace pollution to models that act_as_tree. module ClosureTree class Support diff --git a/lib/generators/closure_tree/config_generator.rb b/lib/generators/closure_tree/config_generator.rb deleted file mode 100644 index b38709df..00000000 --- a/lib/generators/closure_tree/config_generator.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -module ClosureTree - module Generators # :nodoc: - class ConfigGenerator < Rails::Generators::Base # :nodoc: - source_root File.expand_path('templates', __dir__) - desc 'Install closure tree config.' - - def config - template 'config.rb', 'config/initializers/closure_tree_config.rb' - end - end - end -end diff --git a/lib/generators/closure_tree/templates/config.rb b/lib/generators/closure_tree/templates/config.rb deleted file mode 100644 index 19ba0892..00000000 --- a/lib/generators/closure_tree/templates/config.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -ClosureTree.configure do |config| - # Some PaaS like Heroku don't have available the db in some build steps like - # assets:precompile, this is skipped when this value is true, default = false - # config.database_less = true -end