Class: Dotenv::Rails
- Inherits:
-
Rails::Railtie
- Object
- Rails::Railtie
- Dotenv::Rails
- Defined in:
- lib/dotenv/rails.rb
Overview
Rails integration for using Dotenv to load ENV variables from a file
Constant Summary collapse
- TEST_RAKE_TASKS =
/^(default$|test(:|$)|parallel:spec|spec(:|$))/
Class Method Summary collapse
-
.load ⇒ Object
Rails uses
#method_missingto delegate all class methods to the instance, which means ‘Kernel#load` gets called here.
Instance Method Summary collapse
-
#deprecator ⇒ Object
:nodoc:.
-
#env ⇒ Object
The current environment that the app is running in.
-
#initialize ⇒ Rails
constructor
A new instance of Rails.
-
#load ⇒ Object
Public: Load dotenv.
-
#logger=(new_logger) ⇒ Object
Set a new logger and replay logs.
- #overload ⇒ Object
-
#root ⇒ Object
Internal:
Rails.rootis nil in Rails 4.1 before the application is initialized, so this falls back to theRAILS_ROOTenvironment variable, or the current working directory.
Constructor Details
#initialize ⇒ Rails
Returns a new instance of Rails.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/dotenv/rails.rb', line 25 def initialize super config.dotenv = ActiveSupport::OrderedOptions.new.update( # Rails.logger is not available yet, so we'll save log messages and replay them when it is logger: Dotenv::ReplayLogger.new, overwrite: false, files: [ ".env.#{env}.local", (".env.local" unless env.test?), ".env.#{env}", ".env" ].compact, autorestore: env.test? && !defined?(ClimateControl) && !defined?(IceAge) ) end |
Class Method Details
.load ⇒ Object
Rails uses #method_missing to delegate all class methods to the instance, which means ‘Kernel#load` gets called here. We don’t want that.
89 90 91 |
# File 'lib/dotenv/rails.rb', line 89 def self.load instance.load end |
Instance Method Details
#deprecator ⇒ Object
:nodoc:
83 84 85 |
# File 'lib/dotenv/rails.rb', line 83 def deprecator # :nodoc: @deprecator ||= ActiveSupport::Deprecation.new end |
#env ⇒ Object
The current environment that the app is running in.
When running rake, the Rails application is initialized in development, so we have to check which rake tasks are being run to determine the environment.
73 74 75 76 77 78 79 80 |
# File 'lib/dotenv/rails.rb', line 73 def env @env ||= if defined?(Rake.application) && Rake.application.top_level_tasks.grep(TEST_RAKE_TASKS).any? env = Rake.application..show_tasks ? "development" : "test" ActiveSupport::EnvironmentInquirer.new(env) else ::Rails.env end end |
#load ⇒ Object
Public: Load dotenv
This will get called during the before_configuration callback, but you can manually call Dotenv::Rails.load if you needed it sooner.
45 46 47 |
# File 'lib/dotenv/rails.rb', line 45 def load Dotenv.load(*files.map { |file| root.join(file).to_s }, overwrite: overwrite) end |
#logger=(new_logger) ⇒ Object
Set a new logger and replay logs
62 63 64 65 |
# File 'lib/dotenv/rails.rb', line 62 def logger=(new_logger) logger.replay new_logger if logger.is_a?(ReplayLogger) config.dotenv.logger = new_logger end |
#overload ⇒ Object
49 50 51 52 |
# File 'lib/dotenv/rails.rb', line 49 def overload deprecator.warn("Dotenv::Rails.overload is deprecated. Set `Dotenv::Rails.overwrite = true` and call Dotenv::Rails.load instead.") Dotenv.load(*files.map { |file| root.join(file).to_s }, overwrite: true) end |
#root ⇒ Object
Internal: Rails.root is nil in Rails 4.1 before the application is initialized, so this falls back to the RAILS_ROOT environment variable, or the current working directory.
57 58 59 |
# File 'lib/dotenv/rails.rb', line 57 def root ::Rails.root || Pathname.new(ENV["RAILS_ROOT"] || Dir.pwd) end |