class ApiResponse

Constants

EMPTY_SERIALIZER
ERROR_SERIALIZER
SENSITIVE_REQUEST_PARAMS
SERIALIZER_SUFFIX

Attributes

custom_serializer[RW]
result[RW]

Public Class Methods

new(result, custom_serializer = nil) click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 10
def initialize(result, custom_serializer = nil)
  @result = result
  @custom_serializer = custom_serializer
end
serialize(result, options = {}) click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 23
def self.serialize(result, options = {})
  serializer = options.delete(:serializer)

  new(result, serializer).serialize(options)
end

Public Instance Methods

serialize(options = {}) click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 15
def serialize(options = {})
  request = options.delete(:request)

  serializer.new(
    result, options.merge(collection_options(request))
  ).serializable_hash
end

Private Instance Methods

array?() click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 33
def array?
  result.is_a?(Array)
end
collection?() click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 37
def collection?
  result.is_a?(ActiveRecord::Relation)
end
collection_options(request = nil) click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 72
def collection_options(request = nil)
  options = {}

  return options if error?

  options[:is_collection] = array? || collection?

  if collection? && result.respond_to?(:total_count)
    options[:meta] = {
      page_size: result.limit_value,
      total_count: result.total_count,
      total_pages: result.total_pages
    }

    options[:links] = {
      prev: link(result.prev_page, request),
      next: link(result.next_page, request)
    }
  end

  options
end
empty?() click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 50
def empty?
  (array? || collection?) && result.empty?
end
error?() click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 41
def error?
  [
    result.is_a?(ActiveModel::Errors),
    result.is_a?(ActiveResource::Errors),
    result.is_a?(StandardError),
    result.is_a?(String)
  ].any?
end
resource?() click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 54
def resource?
  !array && !collection? && !error?
end
resource_type() click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 58
def resource_type
  return custom_serializer.to_s.classify if custom_serializer
  return ERROR_SERIALIZER if error?
  return EMPTY_SERIALIZER if empty?
  return result.first.class.name if array?
  return result.class.to_s.deconstantize if collection?

  result.class.name
end
serializer() click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 68
def serializer
  "#{resource_type}#{SERIALIZER_SUFFIX}".constantize
end