diff --git a/lib/dotenv/rails.rb b/lib/dotenv/rails.rb index ab4613a..a94442f 100644 --- a/lib/dotenv/rails.rb +++ b/lib/dotenv/rails.rb @@ -11,7 +11,7 @@ # Watch all loaded env files with Spring ActiveSupport::Notifications.subscribe("load.dotenv") do |*args| - if defined?(Spring) + if defined?(Spring) && Spring.respond_to?(:watch) event = ActiveSupport::Notifications::Event.new(*args) Spring.watch event.payload[:env].filename if Rails.application end diff --git a/spec/dotenv/rails_spec.rb b/spec/dotenv/rails_spec.rb index 1e4bd0a..ba95eba 100644 --- a/spec/dotenv/rails_spec.rb +++ b/spec/dotenv/rails_spec.rb @@ -82,6 +82,14 @@ expect(Spring.watcher).to include(path.to_s) end + it "doesn't raise an error if Spring.watch is not defined" do + stub_spring(load_watcher: false) + + expect { + application.initialize! + }.to_not raise_error + end + context "before_configuration" do it "calls #load" do expect(Dotenv::Rails.instance).to receive(:load) @@ -206,13 +214,19 @@ end end - def stub_spring - spring = Struct.new("Spring", :watcher) do - def watch(path) + def stub_spring(load_watcher: true) + spring = Module.new + + if load_watcher + def spring.watcher + @watcher ||= Set.new + end + + def spring.watch(path) watcher.add path end end - stub_const "Spring", spring.new(Set.new) + stub_const "Spring", spring end end