class Dotenv::Rails

Rails integration for using Dotenv to load ENV variables from a file

def self.load

instance, which means `Kernel#load` gets called here. We don't want that.
Rails uses `#method_missing` to delegate all class methods to the
def self.load
  instance.load
end

def deprecator # :nodoc:

:nodoc:
def deprecator # :nodoc:
  @deprecator ||= ActiveSupport::Deprecation.new
end

def env

See https://github.com/bkeepers/dotenv/issues/219

check which rake tasks are being run to determine the environment.
When running `rake`, the Rails application is initialized in development, so we have to

The current environment that the app is running in.
def env
  @env ||= if defined?(Rake.application) && Rake.application.top_level_tasks.grep(TEST_RAKE_TASKS).any?
    env = Rake.application.options.show_tasks ? "development" : "test"
    ActiveSupport::EnvironmentInquirer.new(env)
  else
    ::Rails.env
  end
end

def initialize

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

def load

can manually call `Dotenv::Rails.load` if you needed it sooner.
This will get called during the `before_configuration` callback, but you

Public: Load dotenv
def load
  Dotenv.load(*files.map { |file| root.join(file).to_s }, overwrite: overwrite)
end

def logger=(new_logger)

Set a new logger and replay logs
def logger=(new_logger)
  logger.replay new_logger if logger.is_a?(ReplayLogger)
  config.dotenv.logger = new_logger
end

def overload

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

def root

or the current working directory.
initialized, so this falls back to the `RAILS_ROOT` environment variable,
Internal: `Rails.root` is nil in Rails 4.1 before the application is
def root
  ::Rails.root || Pathname.new(ENV["RAILS_ROOT"] || Dir.pwd)
end