class Env::Vars
Constants
- BOOL_FALSE
- BOOL_TRUE
- MissingCallable
- MissingEnvironmentVariable
- VERSION
Public Class Methods
new(env: ENV, raise_exception: true, stderr: $stderr, &block)
click to toggle source
# File lib/env_vars.rb, line 12 def initialize(env: ENV, raise_exception: true, stderr: $stderr, &block) @env = env @raise_exception = raise_exception @stderr = stderr @__cache__ = {} instance_eval(&block) end
Public Instance Methods
array(type = string)
click to toggle source
# File lib/env_vars.rb, line 129 def array(type = string) [:array, type] end
bigdecimal()
click to toggle source
# File lib/env_vars.rb, line 124 def bigdecimal require "bigdecimal" :bigdecimal end
bool()
click to toggle source
# File lib/env_vars.rb, line 112 def bool :bool end
credential(name, &block)
click to toggle source
# File lib/env_vars.rb, line 95 def credential(name, &block) define_singleton_method(name) do @__cache__["_credential_#{name}".to_sym] ||= begin value = Rails.application.credentials.fetch(name) block ? block.call(value) : value # rubocop:disable Performance/RedundantBlockCall end end end
float()
click to toggle source
# File lib/env_vars.rb, line 120 def float :float end
int()
click to toggle source
# File lib/env_vars.rb, line 104 def int :int end
json()
click to toggle source
# File lib/env_vars.rb, line 133 def json :json end
mandatory(name, type, aliases: [], description: nil)
click to toggle source
# File lib/env_vars.rb, line 65 def mandatory(name, type, aliases: [], description: nil) set( name, type, required: true, aliases: aliases, description: description ) end
optional(name, type, default = nil, aliases: [], description: nil)
click to toggle source
# File lib/env_vars.rb, line 75 def optional(name, type, default = nil, aliases: [], description: nil) set(name, type, default, aliases: aliases, description: description) end
property(name, func = nil, cache: true, description: nil, &block)
click to toggle source
# File lib/env_vars.rb, line 79 def property(name, func = nil, cache: true, description: nil, &block) # rubocop:disable Lint/UnusedMethodArgument callable = (func || block) unless callable raise MissingCallable, "arg[1] must respond to #call or pass a block" end 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: [], description: nil )
click to toggle source
# File lib/env_vars.rb, line 25 def set( name, type, default = nil, required: false, aliases: [], description: nil ) name = name.to_s env_var = name.upcase name = "#{name}?" if type == bool validate!(env_var, required, description) 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
string()
click to toggle source
# File lib/env_vars.rb, line 108 def string :string end
symbol()
click to toggle source
# File lib/env_vars.rb, line 116 def symbol :symbol end
to_s()
click to toggle source
# File lib/env_vars.rb, line 20 def to_s "#<Env::Vars>" end
Also aliased as: inspect
validate!(env_var, required, description)
click to toggle source
# File lib/env_vars.rb, line 50 def validate!(env_var, required, description) return unless required return if @env.key?(env_var) message = env_var.to_s message << " (#{description})" if description message << " is not defined." raise MissingEnvironmentVariable, message if @raise_exception message = "[ENV_VARS] #{message}" message = "\e[31m#{message}\e[0m" if @stderr.tty? @stderr << message << "\n" end
Private Instance Methods
coerce(type, value)
click to toggle source
# File lib/env_vars.rb, line 169 def coerce(type, value) main_type, sub_type = type args = [value] args << sub_type if sub_type send("coerce_to_#{main_type}", *args) end
coerce_to_array(value, type)
click to toggle source
# File lib/env_vars.rb, line 161 def coerce_to_array(value, type) value&.split(/, */)&.map {|v| coerce(type, v) } end
coerce_to_bigdecimal(value)
click to toggle source
# File lib/env_vars.rb, line 153 def coerce_to_bigdecimal(value) BigDecimal(value) if value end
coerce_to_bool(value)
click to toggle source
# File lib/env_vars.rb, line 141 def coerce_to_bool(value) BOOL_TRUE.include?(value) end
coerce_to_float(value)
click to toggle source
# File lib/env_vars.rb, line 149 def coerce_to_float(value) Float(value) if value end
coerce_to_int(value)
click to toggle source
# File lib/env_vars.rb, line 145 def coerce_to_int(value) Integer(value) if !BOOL_FALSE.include?(value) && value end
coerce_to_json(value)
click to toggle source
# File lib/env_vars.rb, line 165 def coerce_to_json(value) value && JSON.parse(value) end
coerce_to_string(value)
click to toggle source
# File lib/env_vars.rb, line 137 def coerce_to_string(value) value end
coerce_to_symbol(value)
click to toggle source
# File lib/env_vars.rb, line 157 def coerce_to_symbol(value) value&.to_sym end