module Grape::Formatter::SerializableHash

Public Class Methods

call(object, _env) click to toggle source
# File lib/grape/formatter/serializable_hash.rb, line 7
def call(object, _env)
  return object if object.is_a?(String)
  return ::Grape::Json.dump(serialize(object)) if serializable?(object)
  return object.to_json if object.respond_to?(:to_json)

  ::Grape::Json.dump(object)
end

Private Class Methods

array_serializable?(object) click to toggle source
# File lib/grape/formatter/serializable_hash.rb, line 33
def array_serializable?(object)
  object.is_a?(Array) && object.all? { |o| o.respond_to? :serializable_hash }
end
serializable?(object) click to toggle source
# File lib/grape/formatter/serializable_hash.rb, line 17
def serializable?(object)
  object.respond_to?(:serializable_hash) || array_serializable?(object) || object.is_a?(Hash)
end
serialize(object) click to toggle source
# File lib/grape/formatter/serializable_hash.rb, line 21
def serialize(object)
  if object.respond_to? :serializable_hash
    object.serializable_hash
  elsif array_serializable?(object)
    object.map(&:serializable_hash)
  elsif object.is_a?(Hash)
    object.transform_values { |v| serialize(v) }
  else
    object
  end
end