Sha256: 68484b671555fab14dd34693cc19f7855a2836813aa4e5027e7992b4b894fe17

Contents?: true

Size: 1.45 KB

Versions: 6

Compression:

Stored size: 1.45 KB

Contents

# DataTransformer is a singleton class that walks ruby data structures (nested
# hashes, arrays, etc..) and lets you transform them based on values or keys
#
# NOTE: DataTransformer is not automatically required, but can be when needed.

module Volt
  class DataTransformer
    # Takes a hash or array, and nested map's over the values, yielding to
    # the block the value.  The return value from the block replaces the
    # previous value.
    # NOTE: This does not yield hashes or arrays.
    def self.transform(data, transform_keys=true, &block)
      if data.is_a?(Hash)
        data.map do |key, value|
          key = transform(key, transform_keys, &block) if transform_keys
          value = transform(value, transform_keys, &block)
          [key, value]
        end.to_h
      elsif data.is_a?(Array)
        data.map do |value|
          transform(value, transform_keys, &block)
        end
      else
        # yield to the trasnformer
        yield(data)
      end
    end

    # Like #transform, except it only yields keys.
    def self.transform_keys(data, &block)
      if data.is_a?(Hash)
        data.map do |key, value|
          key = transform_keys(key, &block)
          value = transform_keys(value, &block)

          # map the key
          [yield(key), value]
        end.to_h
      elsif data.is_a?(Array)
        data.map do |value|
          transform_keys(value, &block)
        end
      else
        # no mapping
        data
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
volt-0.9.7.pre8 lib/volt/utils/data_transformer.rb
volt-0.9.7.pre7 lib/volt/utils/data_transformer.rb
volt-0.9.7.pre6 lib/volt/utils/data_transformer.rb
volt-0.9.7.pre5 lib/volt/utils/data_transformer.rb
volt-0.9.7.pre3 lib/volt/utils/data_transformer.rb
volt-0.9.7.pre2 lib/volt/utils/data_transformer.rb