active_model_serializers/lib/action_controller/serialization.rb
Bruno Bacarini 2c2f948fa0 Add pagination links automatically
Pagination links will be included in your response automatically as long
as the resource is paginated using Kaminari or WillPaginate
and if you are using a JSON-API adapter. The others adapters does not have this feature.
2015-08-18 19:04:04 -03:00

75 lines
2.1 KiB
Ruby

require 'active_support/core_ext/class/attribute'
module ActionController
module Serialization
extend ActiveSupport::Concern
include ActionController::Renderers
# Deprecated
ADAPTER_OPTION_KEYS = ActiveModel::SerializableResource::ADAPTER_OPTION_KEYS
included do
class_attribute :_serialization_scope
self._serialization_scope = :current_user
end
def serialization_scope
send(_serialization_scope) if _serialization_scope &&
respond_to?(_serialization_scope, true)
end
def get_serializer(resource, options = {})
if ! use_adapter?
warn "ActionController::Serialization#use_adapter? has been removed. "\
"Please pass 'adapter: false' or see ActiveSupport::SerializableResource#serialize"
options[:adapter] = false
end
if resource.respond_to?(:current_page) && resource.respond_to?(:total_pages)
options[:pagination] = {}
options[:pagination][:original_url] = original_url
options[:pagination][:query_parameters] = query_parameters
end
ActiveModel::SerializableResource.serialize(resource, options) do |serializable_resource|
if serializable_resource.serializer?
serializable_resource.serialization_scope ||= serialization_scope
serializable_resource.serialization_scope_name = _serialization_scope
begin
serializable_resource.adapter
rescue ActiveModel::Serializer::ArraySerializer::NoSerializerError
resource
end
else
resource
end
end
end
# Deprecated
def use_adapter?
true
end
[:_render_option_json, :_render_with_renderer_json].each do |renderer_method|
define_method renderer_method do |resource, options|
serializable_resource = get_serializer(resource, options)
super(serializable_resource, options)
end
end
module ClassMethods
def serialization_scope(scope)
self._serialization_scope = scope
end
end
def original_url
request.original_url[/\A[^?]+/]
end
def query_parameters
request.query_parameters
end
end
end