Module: Tina4::Env
- Defined in:
- lib/tina4/env.rb
Constant Summary collapse
- DEFAULT_ENV =
{ "PROJECT_NAME" => "Tina4 Ruby Project", "TINA4_SWAGGER_VERSION" => "1.0.0", "TINA4_LOCALE" => "en", "TINA4_DEBUG" => "true", "TINA4_LOG_LEVEL" => "[TINA4_LOG_ALL]", "TINA4_SECRET" => "tina4-secret-change-me" }.freeze
- TRUTHY =
Typed env-var coercion — parity with tina4_python’s Env class, tina4-php’s Tina4Env, and tina4-nodejs’s Env. Truthy values (case-insensitive after strip): “1”, “true”, “on”, “yes”, “y”, “t”. Falsy: “0”, “false”, “off”, “no”, “n”, “f”, empty string. Anything else falls through to default.
%w[1 true on yes y t].freeze
- FALSY =
%w[0 false off no n f].freeze
Class Method Summary collapse
-
.all_env ⇒ Object
Return all current ENV vars as a hash.
-
.bool(name, default: false) ⇒ Object
Read an env var and coerce to Boolean.
-
.float(name, default: 0.0) ⇒ Object
Read an env var and coerce to Float.
-
.get_env(key, default = nil) ⇒ Object
Get an env var value, with optional default.
-
.has_env?(key) ⇒ Boolean
Check if an env var exists.
-
.int(name, default: 0) ⇒ Object
Read an env var and coerce to Integer.
-
.is_truthy(val) ⇒ Object
Check if a value is truthy for env boolean checks.
- .load_env(root_dir = Dir.pwd) ⇒ Object
-
.require_env!(*keys) ⇒ Object
Raise if any of the given keys are missing from ENV.
-
.reset_env ⇒ Object
Reset: clear all env vars that were loaded (restore to process defaults).
-
.str(name, default: "") ⇒ Object
Read an env var as a String.
Class Method Details
.all_env ⇒ Object
Return all current ENV vars as a hash
174 175 176 |
# File 'lib/tina4/env.rb', line 174 def all_env ENV.to_h end |
.bool(name, default: false) ⇒ Object
Read an env var and coerce to Boolean. Returns default when the var is unset or holds a value outside the TRUTHY/FALSY tables. Never raises — bad input falls through to default.
105 106 107 108 109 110 111 112 |
# File 'lib/tina4/env.rb', line 105 def self.bool(name, default: false) raw = ENV[name.to_s] return default if raw.nil? token = raw.strip.downcase return true if TRUTHY.include?(token) return false if FALSY.include?(token) || token.empty? default end |
.float(name, default: 0.0) ⇒ Object
Read an env var and coerce to Float. Logs a warning via Tina4::Log (if loaded) and returns default on parse failure. Never raises.
127 128 129 130 131 132 133 134 |
# File 'lib/tina4/env.rb', line 127 def self.float(name, default: 0.0) raw = ENV[name.to_s] return default if raw.nil? Float(raw.strip) rescue ArgumentError, TypeError log_warning("Env.float(#{name.inspect}): could not parse #{raw.inspect} as Float — using default #{default.inspect}") default end |
.get_env(key, default = nil) ⇒ Object
Get an env var value, with optional default
164 165 166 |
# File 'lib/tina4/env.rb', line 164 def get_env(key, default = nil) ENV[key.to_s] || default end |
.has_env?(key) ⇒ Boolean
Check if an env var exists
169 170 171 |
# File 'lib/tina4/env.rb', line 169 def has_env?(key) ENV.key?(key.to_s) end |
.int(name, default: 0) ⇒ Object
Read an env var and coerce to Integer. Logs a warning via Tina4::Log (if loaded) and returns default on parse failure. Never raises.
116 117 118 119 120 121 122 123 |
# File 'lib/tina4/env.rb', line 116 def self.int(name, default: 0) raw = ENV[name.to_s] return default if raw.nil? Integer(raw.strip) rescue ArgumentError, TypeError log_warning("Env.int(#{name.inspect}): could not parse #{raw.inspect} as Integer — using default #{default.inspect}") default end |
.is_truthy(val) ⇒ Object
Check if a value is truthy for env boolean checks.
Accepts: “true”, “True”, “TRUE”, “1”, “yes”, “Yes”, “YES”, “on”, “On”, “ON”. Everything else is falsy (including empty string, nil, not set).
98 99 100 |
# File 'lib/tina4/env.rb', line 98 def self.is_truthy(val) %w[true 1 yes on].include?(val.to_s.strip.downcase) end |
.load_env(root_dir = Dir.pwd) ⇒ Object
155 156 157 158 159 160 161 |
# File 'lib/tina4/env.rb', line 155 def load_env(root_dir = Dir.pwd) env_file = resolve_env_file(root_dir) unless File.exist?(env_file) create_default_env(env_file) end parse_env_file(env_file) end |
.require_env!(*keys) ⇒ Object
Raise if any of the given keys are missing from ENV
179 180 181 182 183 184 |
# File 'lib/tina4/env.rb', line 179 def require_env!(*keys) missing = keys.map(&:to_s).reject { |k| ENV.key?(k) } unless missing.empty? raise KeyError, "Missing required env vars: #{missing.join(', ')}" end end |
.reset_env ⇒ Object
Reset: clear all env vars that were loaded (restore to process defaults)
187 188 189 190 |
# File 'lib/tina4/env.rb', line 187 def reset_env @loaded_keys&.each { |k| ENV.delete(k) } @loaded_keys = [] end |
.str(name, default: "") ⇒ Object
Read an env var as a String. Returns default when unset. Whitespace is preserved — this is a pass-through for the raw env value, matching Python’s Env.str semantics.
139 140 141 142 143 |
# File 'lib/tina4/env.rb', line 139 def self.str(name, default: "") raw = ENV[name.to_s] return default if raw.nil? raw end |