mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 15:23:06 +00:00
* Fix #1759, Grape integration, adds serialization_context - `serialization_context` is added in grape formatter so grape continues to render models without an explicit call to the `render` helper method - Made it straightforward for subclasses to add other serializer options (such as `serialization_scope`). * Updated Grape tests to include: - paginated collections - implicit Grape serializer (i.e. without explicit invocation of `render` helper method) * Update Changelog with fixes.
This commit is contained in:
committed by
Benjamin Fleischer
parent
a7296e8a92
commit
580492282f
@@ -2,14 +2,31 @@
|
||||
#
|
||||
# Serializer options can be passed as a hash from your Grape endpoint using env[:active_model_serializer_options],
|
||||
# or better yet user the render helper in Grape::Helpers::ActiveModelSerializers
|
||||
|
||||
require 'active_model_serializers/serialization_context'
|
||||
|
||||
module Grape
|
||||
module Formatters
|
||||
module ActiveModelSerializers
|
||||
def self.call(resource, env)
|
||||
serializer_options = {}
|
||||
serializer_options.merge!(env[:active_model_serializer_options]) if env[:active_model_serializer_options]
|
||||
serializer_options = build_serializer_options(env)
|
||||
::ActiveModelSerializers::SerializableResource.new(resource, serializer_options).to_json
|
||||
end
|
||||
|
||||
def self.build_serializer_options(env)
|
||||
ams_options = env[:active_model_serializer_options] || {}
|
||||
|
||||
# Add serialization context
|
||||
ams_options.fetch(:serialization_context) do
|
||||
request = env['grape.request']
|
||||
ams_options[:serialization_context] = ::ActiveModelSerializers::SerializationContext.new(
|
||||
request_url: request.url[/\A[^?]+/],
|
||||
query_parameters: request.params
|
||||
)
|
||||
end
|
||||
|
||||
ams_options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# Helpers can be included in your Grape endpoint as: helpers Grape::Helpers::ActiveModelSerializers
|
||||
|
||||
require 'active_model_serializers/serialization_context'
|
||||
|
||||
module Grape
|
||||
module Helpers
|
||||
module ActiveModelSerializers
|
||||
@@ -11,12 +9,6 @@ module Grape
|
||||
#
|
||||
# Example: To include pagination meta data: render(posts, meta: { page: posts.page, total_pages: posts.total_pages })
|
||||
def render(resource, active_model_serializer_options = {})
|
||||
active_model_serializer_options.fetch(:serialization_context) do
|
||||
active_model_serializer_options[:serialization_context] = ::ActiveModelSerializers::SerializationContext.new(
|
||||
original_url: request.url[/\A[^?]+/],
|
||||
query_parameters: request.params
|
||||
)
|
||||
end
|
||||
env[:active_model_serializer_options] = active_model_serializer_options
|
||||
resource
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user