lib/anyway/env.rb in anyway_config-1.3.1 vs lib/anyway/env.rb in anyway_config-1.4.0
- old
+ new
@@ -1,20 +1,17 @@
# frozen_string_literal: true
require 'anyway/ext/deep_dup'
+require 'anyway/ext/string'
module Anyway
# Parses environment variables and provides
# method-like access
class Env
using Anyway::Ext::DeepDup
+ using Anyway::Ext::String
- # 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 = {}
end
def clear
@@ -31,11 +28,11 @@
def parse_env(prefix)
ENV.each_pair.with_object({}) do |(key, val), data|
next unless key.start_with?(prefix)
path = key.sub(/^#{prefix}_/, '').downcase
- set_by_path(data, path, serialize_val(val))
+ set_by_path(data, path, val.serialize)
end
end
def set_by_path(to, path, val)
parts = path.split("__")
@@ -46,32 +43,7 @@
end
def get_hash(from, name)
(from[name] ||= {})
end
-
- # rubocop:disable Metrics/MethodLength
- # rubocop:disable Metrics/CyclomaticComplexity
- 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
- # rubocop:enable Metrics/MethodLength
- # rubocop:enable Metrics/CyclomaticComplexity
end
end