lib/permit_params.rb in sinatra-my-params-0.0.4 vs lib/permit_params.rb in sinatra-my-params-0.0.5
- old
+ new
@@ -4,37 +4,49 @@
end
def permitted_params(params, permitted = {}, strong_validation = false)
return params if permitted.empty?
- params.select do |k,v|
- permitted.keys.map(&:to_s).include?(k.to_s) &&
- !v.nil? &&
- !coerce(v, permitted[k.to_sym], strong_validation).nil?
+ coerced_params = Hash.new({})
+
+ params.each do |key, value|
+ if permitted.keys.map(&:to_s).include?(key.to_s) && !value.nil?
+ coerced = coerce(value, permitted[key.to_sym], strong_validation)
+ coerced_params[key] = coerced if !coerced.nil?
+ end
end
+ coerced_params
end
private
Boolean = :boolean
- def coerce(param, type, strong = false, options = {})
+ def coerce(param, type, strong_validation = false, options = {})
begin
return nil if param.nil?
return param if (param.is_a?(type) rescue false)
return Integer(param, 10) if type == Integer
return Float(param) if type == Float
return String(param) if type == String
return Date.parse(param) if type == Date
return Time.parse(param) if type == Time
return DateTime.parse(param) if type == DateTime
- return Array(param.split(options[:delimiter] || ",")) if type == Array
- return Hash[param.split(options[:delimiter] || ",").map{|c| c.split(options[:separator] || ":")}] if type == Hash
+ return coerce_array(param) if type == Array
+ return coerce_hash(param) if type == Hash
return coerce_boolean(param) if [TrueClass, FalseClass, Boolean].include? type
return nil
rescue ArgumentError
- raise InvalidParameterError, "'#{param}' is not a valid #{type}" if strong
+ raise InvalidParameterError, "'#{param}' is not a valid #{type}" if strong_validation
end
+ end
+
+ def coerce_array(param)
+ Array(param.split(options[:delimiter] || ","))
+ end
+
+ def coerce_hash(param)
+ Hash[param.split(options[:delimiter] || ",").map{|c| c.split(options[:separator] || ":")}]
end
def coerce_boolean(param)
coerced = /^(false|f|no|n|0)$/i === param.to_s ? false : /^(true|t|yes|y|1)$/i === param.to_s ? true : nil
raise ArgumentError if coerced.nil?