Sha256: 779d7afad48de0b8641fc6b3cd26aed068551983b7af91f9313f97764b1ee870
Contents?: true
Size: 1.18 KB
Versions: 1
Compression:
Stored size: 1.18 KB
Contents
# frozen_string_literal: true module RShade module Serializer class Traversal attr_reader :types def initialize(custom_types = {}) @types = default_types.merge(custom_types) end def call(hash) new_val = {} hash.each do |name, value| new_val[name] = traverse(value) end new_val end def merge!(new_types) @types.merge!(new_types) end def default_types { default: lambda(&:to_s), Integer => ->(value) { value }, Float => ->(value) { value }, Numeric => ->(value) { value }, String => ->(value) { value }, Hash => lambda do |value| hash = {} value.each do |k, v| hash[k] = traverse(v) end hash end, Array => lambda do |value| value.map { |item| traverse(item) } end } end def traverse(value) klass = Class klass = value.class unless value.is_a?(Class) serializer = types[klass] serializer ||= types[:default] serializer.call(value) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rshade-0.2.2 | lib/rshade/serializer/traversal.rb |