class ApiMaker::ResultParser

Attributes

ability[R]
args[R]

Public Class Methods

new(object, ability: nil, args: nil, controller: nil) click to toggle source
# File lib/api_maker/result_parser.rb, line 8
def initialize(object, ability: nil, args: nil, controller: nil)
  @object = object
  @ability = ability || controller&.__send__(:current_ability)
  @args = args || controller&.__send__(:api_maker_args) || {}
end
parse(*args) click to toggle source
# File lib/api_maker/result_parser.rb, line 4
def self.parse(*args)
  ApiMaker::ResultParser.new(*args).result
end

Public Instance Methods

result() click to toggle source
# File lib/api_maker/result_parser.rb, line 14
def result
  parse_object(@object)
end

Private Instance Methods

parse_object(object) click to toggle source
# File lib/api_maker/result_parser.rb, line 20
def parse_object(object)
  if object.is_a?(Hash)
    result = {}
    object.each do |key, value|
      result[key] = parse_object(value)
    end

    result
  elsif object.is_a?(Array)
    object.map { |value| parse_object(value) }
  elsif object.class.name == "Money"
    {api_maker_type: :money, amount: object.cents, currency: object.currency.iso_code}
  elsif object.is_a?(Date)
    object.iso8601
  elsif object.is_a?(Time)
    object.utc.iso8601
  elsif object.is_a?(ApiMaker::CollectionSerializer) || object.is_a?(ApiMaker::Serializer)
    parse_object(object.as_json)
  elsif object.is_a?(ActiveRecord::Base)
    serializer = ApiMaker::Serializer.new(ability: ability, args: args, model: object)

    {
      api_maker_type: :model,
      model_name: serializer.resource.collection_name,
      serialized: parse_object(serializer.as_json)
    }
  else
    object
  end
end