Sha256: 6c5a4509596c1424474324456fc449d55eea830dbf7ae151e2428bf9f782473e

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

module Nugrant
  class ParameterBag
    def initialize(parameters)
      if parameters == nil
        return
      end

      @bag = {}
      @defaults = {}

      parameters.each do |key, value|
        if key == "defaults"
          raise ArgumentError, "The key 'defaults' has restricted usage and cannot be defined"
        end

        if not value.is_a?(Hash)
          @bag[key] = value
          next
        end

        # It is a hash, transform it into a bag
        @bag[key] = Nugrant::ParameterBag.new(value)
      end
    end

    def [](param_name)
      return get_param(param_name)
    end

    def method_missing(method, *args, &block)
      return get_param(method.to_s)
    end

    def has_param?(param_name)
      return @bag != nil && @bag.has_key?(param_name)
    end

    def get_param(param_name)
      if not has_param?(param_name)
        if @defaults[param_name]
          return @defaults[param_name]
        end

        raise KeyError, "Undefined parameter '#{param_name}'"
      end

      return @bag[param_name]
    end

    def get_params()
      return @bag
    end

    def defaults(parameters)
      parameters.each do |key, value|
        if value.is_a?(Hash) and has_param?(key)
          @bag[key].defaults(value)
        end
      end

      @defaults = Nugrant::ParameterBag.new(parameters)
    end

    def defaults=(parameters)
      defaults(parameters)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nugrant-0.0.12 lib/nugrant/parameter_bag.rb
nugrant-0.0.11 lib/nugrant/parameter_bag.rb