module Grape::Formatter::GarActiveModelSerializers

Public Class Methods

call(resource, env) click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 35
def self.call(resource, env)
  if serializer = Grape::Formatter::ActiveModelSerializers.fetch_serializer(resource, env)
    serializer.root = false
    %Q[{\"result\":{\"#{pluralized_resource(serializer, env)}\":#{dump_to_json_array_string(serializer)}}}]
  else
    Grape::Formatter::GarJsonSerializer.call resource, env
  end
end

Private Class Methods

dump_to_json_array_string(serializer) click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 46
def self.dump_to_json_array_string(serializer)
  str = serializer.object.try(:empty?) ? nil : MultiJson.dump(serializer)
  str = "[#{str}]" unless is_serialized_array_string?(str)
  str
end
is_serialized_array_string?(str) click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 52
def self.is_serialized_array_string?(str)
  str.present? && str[0,1] == '[' && str[-1,1] == ']'
end
pluralized_resource(serializer, env) click to toggle source
# File lib/grape_ape_rails/handlers/formatters.rb, line 56
def self.pluralized_resource(serializer, env)
  single = serializer.try(:resource_singular) || serializer.instance_variable_get(:@resource_name).try(:singularize) || serializer.instance_variable_get(:@object).class.name.underscore
  plural = serializer.try(:resource_plural) || serializer.instance_variable_get(:@resource_name) || single.pluralize
  # allow the pluralized resource name to be overriden with a custom route setting
  if env["rack.routing_args"][:route_info].route_settings[:custom] && env["rack.routing_args"][:route_info].route_settings[:custom][:resource_plural]
    plural = env["rack.routing_args"][:route_info].route_settings[:custom][:resource_plural].to_s.downcase
  end
  plural
end