Module: Dotenv

Defined in:
lib/dotenv.rb,
lib/dotenv/cli.rb,
lib/dotenv/parser.rb,
lib/dotenv/version.rb,
lib/dotenv/template.rb,
lib/dotenv/environment.rb,
lib/dotenv/missing_keys.rb,
lib/dotenv/substitutions/command.rb,
lib/dotenv/substitutions/variable.rb

Overview

The top level Dotenv module. The entrypoint for the application logic.

Defined Under Namespace

Modules: Substitutions Classes: CLI, EnvTemplate, Environment, Error, FormatError, MissingKeys, Parser

Constant Summary collapse

VERSION =
"2.7.5".freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.instrumenterObject

Returns the value of attribute instrumenter.



8
9
10
# File 'lib/dotenv.rb', line 8

def instrumenter
  @instrumenter
end

Class Method Details

.ignoring_nonexistent_filesObject



82
83
84
85
# File 'lib/dotenv.rb', line 82

def ignoring_nonexistent_files
  yield
rescue Errno::ENOENT
end

.instrument(name, payload = {}, &block) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/dotenv.rb', line 68

def instrument(name, payload = {}, &block)
  if instrumenter
    instrumenter.instrument(name, payload, &block)
  else
    yield
  end
end

.load(*filenames) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/dotenv.rb', line 13

def load(*filenames)
  with(*filenames) do |f|
    ignoring_nonexistent_files do
      env = Environment.new(f, true)
      instrument("dotenv.load", env: env) { env.apply }
    end
  end
end

.load!(*filenames) ⇒ Object

same as ‘load`, but raises Errno::ENOENT if any files don’t exist



23
24
25
26
27
28
# File 'lib/dotenv.rb', line 23

def load!(*filenames)
  with(*filenames) do |f|
    env = Environment.new(f, true)
    instrument("dotenv.load", env: env) { env.apply }
  end
end

.overload(*filenames) ⇒ Object

same as ‘load`, but will override existing values in `ENV`



31
32
33
34
35
36
37
38
# File 'lib/dotenv.rb', line 31

def overload(*filenames)
  with(*filenames) do |f|
    ignoring_nonexistent_files do
      env = Environment.new(f, false)
      instrument("dotenv.overload", env: env) { env.apply! }
    end
  end
end

.overload!(*filenames) ⇒ Object

same as ‘overload`, but raises Errno::ENOENT if any files don’t exist



41
42
43
44
45
46
# File 'lib/dotenv.rb', line 41

def overload!(*filenames)
  with(*filenames) do |f|
    env = Environment.new(f, false)
    instrument("dotenv.overload", env: env) { env.apply! }
  end
end

.parse(*filenames) ⇒ Object

returns a hash of parsed key/value pairs but does not modify ENV



49
50
51
52
53
54
55
# File 'lib/dotenv.rb', line 49

def parse(*filenames)
  with(*filenames) do |f|
    ignoring_nonexistent_files do
      Environment.new(f, false)
    end
  end
end

.require_keys(*keys) ⇒ Object

Raises:



76
77
78
79
80
# File 'lib/dotenv.rb', line 76

def require_keys(*keys)
  missing_keys = keys.flatten - ::ENV.keys
  return if missing_keys.empty?
  raise MissingKeys, missing_keys
end

.with(*filenames) ⇒ Object

Internal: Helper to expand list of filenames.

Returns a hash of all the loaded environment variables.



60
61
62
63
64
65
66
# File 'lib/dotenv.rb', line 60

def with(*filenames)
  filenames << ".env" if filenames.empty?

  filenames.reduce({}) do |hash, filename|
    hash.merge!(yield(File.expand_path(filename)) || {})
  end
end