diff --git a/lib/jsonapi/mime_types.rb b/lib/jsonapi/mime_types.rb index bff7f30ea..9fd9c7a1c 100644 --- a/lib/jsonapi/mime_types.rb +++ b/lib/jsonapi/mime_types.rb @@ -1,15 +1,28 @@ module JSONAPI MEDIA_TYPE = 'application/vnd.api+json' -end -Mime::Type.register JSONAPI::MEDIA_TYPE, :api_json + module MimeTypes + def self.install + Mime::Type.register JSONAPI::MEDIA_TYPE, :api_json + + if Rails::VERSION::MAJOR >= 5 + parsers = ActionDispatch::Request.parameter_parsers.merge( + Mime::Type.lookup(JSONAPI::MEDIA_TYPE).symbol => parser + ) + ActionDispatch::Request.parameter_parsers = parsers + else + ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime::Type.lookup(JSONAPI::MEDIA_TYPE)] = parser + end + end -parsers = Rails::VERSION::MAJOR >= 5 ? - ActionDispatch::Http::Parameters : - ActionDispatch::ParamsParser + def self.parser + lambda do |body| + data = JSON.parse(body) + data = {:_json => data} unless data.is_a?(Hash) + data.with_indifferent_access + end + end + end -parsers::DEFAULT_PARSERS[Mime::Type.lookup(JSONAPI::MEDIA_TYPE)] = lambda do |body| - data = JSON.parse(body) - data = {:_json => data} unless data.is_a?(Hash) - data.with_indifferent_access + MimeTypes.install end