From 2d27cd4d9185e3af4bed9d71ddc716e66e366676 Mon Sep 17 00:00:00 2001 From: Aaron Rosenberg Date: Mon, 30 Mar 2026 11:16:15 -0400 Subject: [PATCH] Use `const_missing` for `Dotenv::Railtie` `DeprecatedConstantProxy` registers a real constant, which means static analysis tools like tapioca emit deprecation warnings when enumerating Dotenv.constants even if Dotenv::Railtie is never referenced. `const_missing` keeps the deprecation behavior for actual usage while hiding the constant from introspection. --- lib/dotenv/rails.rb | 7 ++++++- spec/dotenv/rails_spec.rb | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/dotenv/rails.rb b/lib/dotenv/rails.rb index a94442f..2bda6fa 100644 --- a/lib/dotenv/rails.rb +++ b/lib/dotenv/rails.rb @@ -107,5 +107,10 @@ def self.load config.before_configuration { load } end - Railtie = ActiveSupport::Deprecation::DeprecatedConstantProxy.new("Dotenv::Railtie", "Dotenv::Rails", Dotenv::Rails.deprecator) + def self.const_missing(name) + super unless name == :Railtie + + Rails.deprecator.warn("Dotenv::Railtie is deprecated! Use Dotenv::Rails instead.") + Dotenv::Rails + end end diff --git a/spec/dotenv/rails_spec.rb b/spec/dotenv/rails_spec.rb index 59fc678..c2dcc42 100644 --- a/spec/dotenv/rails_spec.rb +++ b/spec/dotenv/rails_spec.rb @@ -214,6 +214,22 @@ end end + describe "Dotenv::Railtie deprecation" do + it "returns Dotenv::Rails" do + allow(Dotenv::Rails.deprecator).to receive(:warn) # prevent deprecation warning from being printed in test output + expect(Dotenv::Railtie).to equal(Dotenv::Rails) + end + + it "emits a deprecation warning" do + expect(Dotenv::Rails.deprecator).to receive(:warn).with(/Dotenv::Railtie is deprecated/) + Dotenv::Railtie + end + + it "does not include :Railtie in Dotenv.constants" do + expect(Dotenv.constants).not_to include(:Railtie) + end + end + def stub_spring(load_watcher: true) spring = Module.new do if load_watcher