class Hydrochlorb::Serializer
Public Class Methods
serialize(obj, options = {})
click to toggle source
# File lib/hydrochlorb/serializer.rb, line 5 def serialize(obj, options = {}) indent = options[:indent] indent = 2 unless indent.is_a? Integer and indent >= 0 dump(obj, nil, indent, 0) end
Private Class Methods
dump(obj, key = nil, indent = 0, depth = 0)
click to toggle source
# File lib/hydrochlorb/serializer.rb, line 14 def dump(obj, key = nil, indent = 0, depth = 0) prefix = ' ' * indent * depth case obj when Array if !obj.empty? && obj.all? { |v| v.is_a? Hash } obj.map do |v| send(__method__, v, key, indent, depth) end.compact.join("\n") else "#{prefix}#{key} = [" + obj.map { |v| send(__method__, v) }.compact.join(', ') + ']' end when Hash compacted = key.to_s.empty? || (!obj.empty? && obj.values.all? { |v| v.is_a? Hash }) str = obj.map do |k, v| k = k.to_s.strip k = k.to_json unless k =~ /^\w+$/ and (key.to_s.empty? or not compacted) send(__method__, v, (compacted ? "#{key} #{k}".strip : k), indent, (compacted ? depth : depth + 1)) end.compact.join("\n") compacted ? str : "#{prefix}#{key} {\n" + (str.empty? ? '' : "#{str}\n") + "#{prefix}}" when Numeric, TrueClass, FalseClass (key ? "#{prefix}#{key} = " : '') + obj.to_json else (key ? "#{prefix}#{key} = " : '') + obj.to_s.to_json unless obj.nil? end end