lib/parametron.rb in parametron-0.2.2 vs lib/parametron.rb in parametron-0.3.0
- old
+ new
@@ -25,16 +25,35 @@
return if name != @_method_name or instance_variable_get(:"@_METHOD_#{name}_WRAPPED")
instance_variable_set(:"@_METHOD_#{name}_WRAPPED", true)
original = instance_method(name.to_sym)
remove_method(name.to_sym)
define_method(name) do |params={}|
- new_params = _rename_params!(_validate!(_set_defaults!(params)))
+ new_params = _rename_params!(_cast!(_validate!(_set_defaults!(params))))
original.bind(self).call(new_params)
end
end
end
private
+ 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 then v.cast.call(val)
+ else
+ raise MalformedParams.new("Unknown cast type: '#{v.cast.inspect}'")
+ end
+ end
+ new_par
+ end
+
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)