diff --git a/lib/dotenv/rails.rb b/lib/dotenv/rails.rb index a94442f..d0135fb 100644 --- a/lib/dotenv/rails.rb +++ b/lib/dotenv/rails.rb @@ -22,6 +22,13 @@ module Dotenv class Rails < ::Rails::Railtie delegate :files, :files=, :overwrite, :overwrite=, :autorestore, :autorestore=, :logger, to: "config.dotenv" + # The documented options are configured on the class, which Rails only supports through + # `Railtie.method_missing`. Define them explicitly so they show up in `.methods`, have a + # source location, and don't depend on that forwarding. + class << self + delegate :files, :files=, :overwrite, :overwrite=, :autorestore, :autorestore=, :logger, :logger=, to: :instance + end + def initialize super config.dotenv = ActiveSupport::OrderedOptions.new.update( diff --git a/spec/dotenv/rails_spec.rb b/spec/dotenv/rails_spec.rb index 59fc678..469d2aa 100644 --- a/spec/dotenv/rails_spec.rb +++ b/spec/dotenv/rails_spec.rb @@ -74,6 +74,17 @@ end end + describe "options" do + it "are defined on the class and delegate to the instance" do + expect(Dotenv::Rails.singleton_class.instance_methods).to include( + :files, :files=, :overwrite, :overwrite=, :autorestore, :autorestore=, :logger, :logger= + ) + + Dotenv::Rails.overwrite = true + expect(Dotenv::Rails.instance.overwrite).to be(true) + end + end + it "watches other loaded files with Spring" do stub_spring(load_watcher: true) application.initialize!