class ParamsCollector::Parser

Public Class Methods

new() click to toggle source
# File lib/params_collector/parser.rb, line 36
def initialize
  @valid = {}
  @params = {}
  @defaults = {}
end
register_marshaler(name, marshaler) click to toggle source
# File lib/params_collector/parser.rb, line 28
def self.register_marshaler(name, marshaler)
  method_text = "def #{name}(key, default = nil)
    key = key.to_sym
    declare_params(key, default, #{marshaler})
  end"
  Parser.module_eval(method_text)
end

Public Instance Methods

[](name) click to toggle source
# File lib/params_collector/parser.rb, line 53
def [](name)
  @params[name].value
end
merge(params) click to toggle source
# File lib/params_collector/parser.rb, line 64
def merge(params)
  new_parser = dup
  new_parser.parse(params)
  new_parser.to_hash
end
parse(params) click to toggle source
# File lib/params_collector/parser.rb, line 42
def parse(params)
  params.each do |key, value|
    key = key.to_sym
    prepare_param(key, value) if @params.key?(key)
  end
end
to_hash() click to toggle source
# File lib/params_collector/parser.rb, line 57
def to_hash
  @params.each_with_object({}) do |(key, marshaler), memo|
    memo[key] = marshaler.value if presentable?(key)
    memo
  end
end
valid?() click to toggle source
# File lib/params_collector/parser.rb, line 49
def valid?
  !@valid.any? { |_, value| value == false }
end

Private Instance Methods

declare_params(key, default, marshaler) click to toggle source
# File lib/params_collector/parser.rb, line 72
def declare_params(key, default, marshaler)
  marshaler_instance = marshaler.new
  marshaler_instance.set(default)
  @params[key] = marshaler_instance
  @defaults[key] = marshaler_instance.dup
  @valid[key] = !default.nil?
end
different_than_default?(key) click to toggle source
# File lib/params_collector/parser.rb, line 89
def different_than_default?(key)
  @params[key].value != @defaults[key].value
end
prepare_param(key, value) click to toggle source
# File lib/params_collector/parser.rb, line 80
def prepare_param(key, value)
  @params[key].set(value)
  @valid[key] = true
end
presentable?(key) click to toggle source
# File lib/params_collector/parser.rb, line 85
def presentable?(key)
  @valid[key] && different_than_default?(key)
end