Sha256: a92d040e38522cdbe5d21373be1e13f2c381bce4fa8f4d17a7d567c29a7a3fb3

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

require 'rails/railtie'

module SimpleJsonapi
  module Rails
    class Railtie < ::Rails::Railtie
      initializer 'simple_jsonapi_rails.initialize' do
        Mime::Type.register(SimpleJsonapi::MIME_TYPE, :jsonapi)

        ActiveSupport.on_load(:action_controller) do
          ::ActionDispatch::Request.parameter_parsers[:jsonapi] = ->(raw_post) do
            ActiveSupport::JSON.decode(raw_post)
          end

          # In the renderers, `self` is the controller

          ::ActionController::Renderers.add(:jsonapi_resource) do |resource, options|
            if respond_to?(:media_type)
              self.content_type = Mime[:jsonapi] unless self.media_type
            else
              self.content_type ||= Mime[:jsonapi]
            end

            SimpleJsonapi.render_resource(resource, options).to_json
          end

          ::ActionController::Renderers.add(:jsonapi_resources) do |resources, options|
            if respond_to?(:media_type)
              self.content_type = Mime[:jsonapi] unless self.media_type
            else
              self.content_type ||= Mime[:jsonapi]
            end

            SimpleJsonapi.render_resources(resources, options).to_json
          end

          ::ActionController::Renderers.add(:jsonapi_errors) do |errors, options|
            if respond_to?(:media_type)
              self.content_type = Mime[:jsonapi] unless self.media_type
            else
              self.content_type ||= Mime[:jsonapi]
            end

            SimpleJsonapi.render_errors(errors, options).to_json
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_jsonapi_rails-1.3.0 lib/simple_jsonapi/rails/railtie.rb