Sha256: 0a3dcff4554a9d62eb05dcc9b1cc915e63ccfb4ddb4c2d502f521b1893271070

Contents?: true

Size: 1.45 KB

Versions: 2

Compression:

Stored size: 1.45 KB

Contents

#
# Make the Grape::Endpoint quack like a ActionController
#
# This allows us to rely on the ActiveModel::Serializer#build_json method
# to lookup the approriate serializer.
#
module Grape
  module EndpointExtension
    attr_accessor :controller_name

    def namespace_options
      if respond_to?(:inheritable_setting)
        inheritable_setting.namespace
      else
        settings[:namespace] ? settings[:namespace].options : {}
      end
    end

    def route_options
      if respond_to?(:inheritable_setting)
        inheritable_setting.route
      else
        options[:route_options]
      end
    end

    def self.included(base)
      mattr_accessor :_serialization_scope
      self._serialization_scope = :current_user

      base.class_eval do
        def serialization_scope
          return unless _serialization_scope
          return unless respond_to?(_serialization_scope, true)
          send(_serialization_scope)
        end
      end
    end

    def render(resources, extra_options = {})
      options = extra_options.symbolize_keys
      env['ams_meta'] = options.slice(
        :meta, :meta_key
      )
      env['ams_adapter'] = options.slice(
        :adapter, :serializer, :each_serializer, :include,
        :fields, :key_transform, :links, :namespace
      )
      env['ams_extra'] = options[:extra]
      resources
    end

    def default_serializer_options
    end

    def url_options
    end
  end

  Endpoint.send(:include, EndpointExtension)
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
grape-active_model_serializers-1.5.2 lib/grape-active_model_serializers/endpoint_extension.rb
grape-active_model_serializers-1.5.1 lib/grape-active_model_serializers/endpoint_extension.rb