module Grape::Formatter::SerializableHash

Public Class Methods

call(object, env) click to toggle source
# File lib/grape/formatter/serializable_hash.rb, line 6
def call(object, env)
  return object if object.is_a?(String)
  return MultiJson.dump(serialize(object)) if serializable?(object)
  return object.to_json if object.respond_to?(:to_json)
  MultiJson.dump(object)
end

Private Class Methods

serializable?(object) click to toggle source
# File lib/grape/formatter/serializable_hash.rb, line 15
def serializable?(object)
 object.respond_to?(:serializable_hash) ||
   object.kind_of?(Array) && !object.map {|o| o.respond_to? :serializable_hash }.include?(false) ||
   object.kind_of?(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 object.kind_of?(Array) && !object.map {|o| o.respond_to? :serializable_hash }.include?(false)
    object.map {|o| o.serializable_hash }
  elsif object.kind_of?(Hash)
    object.inject({}) { |h,(k,v)| h[k] = serialize(v); h }
  else
    object
  end
end