diff --git a/README.md b/README.md index f66900c..feecbff 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ See "Writing Tests" in https://github.com/intridea/grape. Enjoy :) + ## Contributing 1. Fork it diff --git a/lib/grape-active_model_serializers/formatter.rb b/lib/grape-active_model_serializers/formatter.rb index 53718c6..2346b61 100644 --- a/lib/grape-active_model_serializers/formatter.rb +++ b/lib/grape-active_model_serializers/formatter.rb @@ -3,15 +3,7 @@ module Grape module ActiveModelSerializers class << self def call(resource, env) - endpoint = env['api.endpoint'] - options = endpoint.namespace_options.merge(endpoint.route_options) - - if resource.respond_to?(:to_ary) && !resource.empty? - # ensure we have an root to fallback on - endpoint.controller_name = resource.first.class.name.underscore.pluralize - end - - serializer = ::ActiveModel::Serializer.build_json(endpoint, resource, options) + serializer = fetch_serializer(resource, env) if serializer serializer.to_json @@ -19,6 +11,21 @@ module Grape Grape::Formatter::Json.call resource, env end end + + def fetch_serializer(resource, env) + endpoint = env['api.endpoint'] + options = build_options_from_endpoint(endpoint) + + if resource.respond_to?(:to_ary) && !resource.empty? + # ensure we have an root to fallback on + endpoint.controller_name = resource.first.class.name.underscore.pluralize + end + ::ActiveModel::Serializer.build_json(endpoint, resource, options) + end + + def build_options_from_endpoint(endpoint) + endpoint.namespace_options.merge(endpoint.route_options) + end end end end