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)