Module: JSONAPI::MimeTypes

Defined in:
lib/jsonapi/mime_types.rb

Class Method Summary collapse

Class Method Details

.installObject


7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/jsonapi/mime_types.rb', line 7

def self.install
  Mime::Type.register JSONAPI::MEDIA_TYPE, :api_json

  # :nocov:
  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
  # :nocov:
end

.parserObject


22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/jsonapi/mime_types.rb', line 22

def self.parser
  lambda do |body|
    begin
      data = JSON.parse(body)
      if data.is_a?(Hash)
        data.with_indifferent_access
      else
        fail JSONAPI::Exceptions::InvalidRequestFormat.new
      end
    rescue JSON::ParserError => e
      { _parser_exception: JSONAPI::Exceptions::BadRequest.new(e.to_s)  }
    rescue => e
      { _parser_exception: e }
    end
  end
end