Sha256: 913deef382b663f296964aaa131888e7c25db167d8b7dbe92c5b315dd2daa5c7

Contents?: true

Size: 893 Bytes

Versions: 1

Compression:

Stored size: 893 Bytes

Contents

# frozen_string_literal: true

require 'json'

module JSONAPI
  MEDIA_TYPE = 'application/vnd.api+json'

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

      parsers = ActionDispatch::Request.parameter_parsers.merge(
        Mime::Type.lookup(JSONAPI::MEDIA_TYPE).symbol => parser
      )
      ActionDispatch::Request.parameter_parsers = parsers
    end

    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
  end

  MimeTypes.install
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jsonapi-resources-0.11.0.beta2 lib/jsonapi/mime_types.rb