Sha256: 6c97f099d76012a1fbd782449bb262f99bf5ca055b44b7bdcddb566d619e3a0a
Contents?: true
Size: 1.75 KB
Versions: 1
Compression:
Stored size: 1.75 KB
Contents
module Anyway # Parses environment variables and provides # method-like access class Env # Regexp to detect array values # Array value is a values that contains at least one comma # and doesn't start/end with quote ARRAY_RXP = /\A[^'"].*\s*,\s*.*[^'"]\z/ def initialize @data = {} load end def reload clear load self end def clear @data.clear self end def method_missing(method_name, *args, &_block) method_name = method_name.to_s.gsub(/\_/, '') return @data[method_name] if args.empty? && @data.key?(method_name) end private def load ENV.each_pair do |key, val| if config_key?(key) mod, path = extract_module_path(key) set_by_path(get_hash(@data, mod), path, serialize_val(val)) end end end def config_key?(key) key =~ /^[A-Z\d]+\_[A-Z\d\_]+/ end def extract_module_path(key) _, mod, path = key.split(/^([^\_]+)/) path.sub!(/^[\_]+/, '') [mod.downcase, path.downcase] end def set_by_path(to, path, val) parts = path.split("__") to = get_hash(to, parts.shift) while parts.length > 1 to[parts.first] = val end def get_hash(from, name) (from[name] ||= {}) end def serialize_val(value) case value when ARRAY_RXP value.split(/\s*,\s*/).map(&method(:serialize_val)) when /\A(true|t|yes|y)\z/i true when /\A(false|f|no|n)\z/i false when /\A(nil|null)\z/i nil when /\A\d+\z/ value.to_i when /\A\d*\.\d+\z/ value.to_f when /\A['"].*['"]\z/ value.gsub(/(\A['"]|['"]\z)/, '') else value end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
anyway_config-0.5.1 | lib/anyway/env.rb |