Class: Env::Vars

Inherits:
Object
  • Object
show all
Defined in:
lib/env_vars.rb

Constant Summary collapse

VERSION =
"0.7.1"
BOOL_TRUE =
["yes", "true", "1", true]
BOOL_FALSE =
["no", "false"]
MissingEnvironmentVariable =
Class.new(StandardError)
MissingCallable =
Class.new(StandardError)

Instance Method Summary collapse

Constructor Details

#initialize(env = ENV, &block) ⇒ Vars

Returns a new instance of Vars.



12
13
14
15
16
# File 'lib/env_vars.rb', line 12

def initialize(env = ENV, &block)
  @env = env
  @__cache__ = {}
  instance_eval(&block)
end

Instance Method Details

#array(type = string) ⇒ Object



91
92
93
# File 'lib/env_vars.rb', line 91

def array(type = string)
  [:array, type]
end

#bigdecimalObject



86
87
88
89
# File 'lib/env_vars.rb', line 86

def bigdecimal
  require "bigdecimal"
  :bigdecimal
end

#boolObject



74
75
76
# File 'lib/env_vars.rb', line 74

def bool
  :bool
end

#floatObject



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

def float
  :float
end

#intObject



66
67
68
# File 'lib/env_vars.rb', line 66

def int
  :int
end

#mandatory(name, type, aliases: []) ⇒ Object



45
46
47
# File 'lib/env_vars.rb', line 45

def mandatory(name, type, aliases: [])
  set(name, type, required: true, aliases: aliases)
end

#optional(name, type, default = nil, aliases: []) ⇒ Object



49
50
51
# File 'lib/env_vars.rb', line 49

def optional(name, type, default = nil, aliases: [])
  set(name, type, default, aliases: aliases)
end

#property(name, func = nil, cache: true, &block) ⇒ Object

Raises:



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/env_vars.rb', line 53

def property(name, func = nil, cache: true, &block)
  callable = (func || block)
  raise MissingCallable, "arg[1] must respond to #call or pass a block" unless callable

  if cache
    define_singleton_method(name) do
      @__cache__[name.to_sym] ||= callable.call
    end
  else
    define_singleton_method(name) { callable.call }
  end
end

#set(name, type, default = nil, required: false, aliases: []) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/env_vars.rb', line 23

def set(name, type, default = nil, required: false, aliases: [])
  name = name.to_s
  env_var = name.upcase
  name = "#{name}?" if type == bool

  validate!(env_var, required)

  define_singleton_method(name) do
    return default unless @env.key?(env_var)
    coerce(type, @env[env_var])
  end

  aliases.each do |alias_name|
    define_singleton_method(alias_name, method(name))
  end
end

#stringObject



70
71
72
# File 'lib/env_vars.rb', line 70

def string
  :string
end

#symbolObject



78
79
80
# File 'lib/env_vars.rb', line 78

def symbol
  :symbol
end

#to_sObject Also known as: inspect



18
19
20
# File 'lib/env_vars.rb', line 18

def to_s
  "#<Env::Vars>"
end

#validate!(env_var, required) ⇒ Object



40
41
42
43
# File 'lib/env_vars.rb', line 40

def validate!(env_var, required)
  return unless required
  raise MissingEnvironmentVariable, "#{env_var} is not defined" unless @env.key?(env_var)
end