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..59fc678 100644 --- a/spec/dotenv/rails_spec.rb +++ b/spec/dotenv/rails_spec.rb @@ -75,13 +75,21 @@ end it "watches other loaded files with Spring" do - stub_spring + stub_spring(load_watcher: true) application.initialize! path = fixture_path("plain.env") Dotenv.load(path) 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) @@ -93,7 +101,7 @@ subject { application.initialize! } it "watches .env with Spring" do - stub_spring + stub_spring(load_watcher: true) subject expect(Spring.watcher).to include(fixture_path(".env").to_s) end @@ -206,13 +214,19 @@ end end - def stub_spring - spring = Struct.new("Spring", :watcher) do - def watch(path) - watcher.add path + def stub_spring(load_watcher: true) + spring = Module.new do + if load_watcher + def self.watcher + @watcher ||= Set.new + end + + def self.watch(path) + watcher.add path + end end end - stub_const "Spring", spring.new(Set.new) + stub_const "Spring", spring end end