lib/grape/validations/coerce.rb in grape-0.6.1 vs lib/grape/validations/coerce.rb in grape-0.7.0
- old
+ new
@@ -1,15 +1,14 @@
module Grape
-
class API
Boolean = Virtus::Attribute::Boolean # rubocop:disable ConstantName
end
module Validations
-
class CoerceValidator < SingleOptionValidator
def validate_param!(attr_name, params)
+ raise Grape::Exceptions::Validation, param: @scope.full_name(attr_name), message_key: :coerce unless params.is_a? Hash
new_value = coerce_value(@option, params[attr_name])
if valid_type?(new_value)
params[attr_name] = new_value
else
raise Grape::Exceptions::Validation, param: @scope.full_name(attr_name), message_key: :coerce
@@ -45,18 +44,20 @@
_valid_single_type?(@option, val)
end
end
def coerce_value(type, val)
+ # Don't coerce things other than nil to Arrays or Hashes
+ return val || [] if type == Array
+ return val || {} if type == Hash
+
converter = Virtus::Attribute.build(type)
converter.coerce(val)
# not the prettiest but some invalid coercion can currently trigger
# errors in Virtus (see coerce_spec.rb:75)
rescue
InvalidValue.new
end
-
end
-
end
end