diff --git a/lib/grape/http/request.rb b/lib/grape/http/request.rb index 011e1fd358..ebcd3e2b66 100644 --- a/lib/grape/http/request.rb +++ b/lib/grape/http/request.rb @@ -1,8 +1,23 @@ module Grape class Request < Rack::Request + class Params < ::Hash + include Hashie::Extensions::MergeInitializer + include Hashie::Extensions::IndifferentAccess + include Hashie::Extensions::MethodAccess + + def convert_value(value) + super(value).tap do |converted_value| + if converted_value.is_a?(Hash) + value_self = (class << converted_value; self; end) + value_self.send :include, Hashie::Extensions::MethodAccess + end + end + end + end + def params @params ||= begin - params = Hashie::Mash.new(super) + params = Params.new(super) if env['rack.routing_args'] args = env['rack.routing_args'].dup # preserve version from query string parameters diff --git a/lib/grape/validations/coerce.rb b/lib/grape/validations/coerce.rb index 910166403a..67b4e7a5d0 100644 --- a/lib/grape/validations/coerce.rb +++ b/lib/grape/validations/coerce.rb @@ -31,7 +31,7 @@ def _valid_single_type?(klass, val) if klass == Virtus::Attribute::Boolean val.is_a?(TrueClass) || val.is_a?(FalseClass) elsif klass == Rack::Multipart::UploadedFile - val.is_a?(Hashie::Mash) && val.key?(:tempfile) + val.is_a?(Hash) && val.key?(:tempfile) else val.is_a?(klass) end