module Parametron

Constants

ErrorMethodParams
ExcessParameter
MalformedParams
RequiredParamError
VERSION

Public Class Methods

included(base) click to toggle source
# File lib/parametron.rb, line 5
def self.included(base)
  base.extend(ClassMethods)
  base.send(:attr_accessor, :validation_error_cause)
end

Private Instance Methods

_cast!(params) click to toggle source
# File lib/parametron.rb, line 47
def _cast!(params)
  new_par = params.dup
  _validators_list.each do |v|
    next unless v.cast
    key = v.name.to_sym
    val = new_par[key]
    next if val.nil? and not v.required?
    new_par[key] =
      case
      when v.cast.to_s == "Integer" then Integer(val)
      when v.cast.to_s == "Float"   then Float(val)
      when Proc === v.cast
        case v.cast.arity
        when 0 then v.cast.call()
        when 1 then v.cast.call(val)
        when 2 then v.cast.call(val, new_par)
        else v.cast.call(val, new_par, params)
        end
      else
        raise MalformedParams.new("Unknown cast type: '#{v.cast.inspect}'")
      end
  end
  new_par
end
_params_validator() click to toggle source
# File lib/parametron.rb, line 107
def _params_validator
  self.class.params_validator
end
_rename_params!(params) click to toggle source
# File lib/parametron.rb, line 72
def _rename_params!(params)
  new_par = params.dup
  _validators_list.each do |v|
    next unless v.as
    new_par[v.as] = new_par.delete(v.name.to_sym) || new_par.delete(v.name.to_str)
  end
  new_par
end
_set_defaults!(params) click to toggle source
# File lib/parametron.rb, line 81
def _set_defaults!(params)
  new_par = params.dup
  _validators_list.each do |v|
    if new_par[v.name].nil? && new_par[v.name.to_sym].nil?
      case v.default
      when nil  then next
      when Proc
        case v.default.arity
        when 0 then new_par[v.name.to_sym] = v.default.call()
        when 1 then new_par[v.name.to_sym] = v.default.call(self)
        else
          raise ArgumentError.new "Too much arguments for #{v.name} default lambda"
        end
      else
        new_par[v.name.to_sym] = v.default
      end
    end
  end
  new_par
end
_validate!(params) click to toggle source
# File lib/parametron.rb, line 102
def _validate!(params)
  _params_validator.validate!(self, params)
  params
end
_validators_list() click to toggle source
# File lib/parametron.rb, line 111
def _validators_list
  _params_validator.required_vals + _params_validator.optional_vals
end