Sha256: 15adf37fb9f210a887926361fe6a3ac06e0e4aa46e2fb61d14ff7757e012bf48

Contents?: true

Size: 1.47 KB

Versions: 6

Compression:

Stored size: 1.47 KB

Contents

class ENVied
  # Responsible for anything related to the ENV.
  class EnvProxy
    attr_reader :config, :coercer, :groups

    def initialize(config, options = {})
      @config = config
      @coercer = options.fetch(:coercer, ENVied::Coercer.new)
      @groups = options.fetch(:groups, [])
    end

    def missing_variables
      variables.select(&method(:missing?))
    end

    def uncoercible_variables
      variables.reject(&method(:coerced?)).reject(&method(:coercible?))
    end

    def variables
      @variables ||= begin
        config.variables.select {|v| groups.include?(v.group) }
      end
    end

    def variables_by_name
      Hash[variables.map {|v| [v.name, v] }]
    end

    def [](name)
      coerce(variables_by_name[name.to_sym])
    end

    def has_key?(name)
      variables_by_name[name.to_sym]
    end

    def env_value_of(var)
      ENV[var.name.to_s]
    end

    def default_value_of(var)
      var.default_value(ENVied, var)
    end

    def value_to_coerce(var)
      return env_value_of(var) unless env_value_of(var).nil?
      config.defaults_enabled? ? default_value_of(var) : nil
    end

    def coerce(var)
      coerced?(var) ?
        value_to_coerce(var) :
        coercer.coerce(value_to_coerce(var), var.type)
    end

    def coercible?(var)
      coercer.coercible?(value_to_coerce(var), var.type)
    end

    def missing?(var)
      value_to_coerce(var).nil?
    end

    def coerced?(var)
      coercer.coerced?(value_to_coerce(var))
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
envied-0.9.1 lib/envied/env_proxy.rb
envied-0.9.0 lib/envied/env_proxy.rb
envied-0.8.2 lib/envied/env_proxy.rb
envied-0.8.1 lib/envied/env_proxy.rb
envied-0.8.0 lib/envied/env_proxy.rb
envied-0.7.2 lib/envied/env_proxy.rb