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