module Strelka::DataUtilities

A collection of miscellaneous functions that are useful for manipulating complex data structures.

include Strelka::DataUtilities
newhash = deep_copy( oldhash )

Public Instance Methods

autovivify( hash, key ) click to toggle source

Create and return a Hash that will auto-vivify any values it is missing with another auto-vivifying Hash.

# File lib/strelka/mixins.rb, line 218
def autovivify( hash, key )
        hash[ key ] = Hash.new( &Strelka::DataUtilities.method(:autovivify) )
end
deep_copy( obj ) click to toggle source

Recursively copy the specified obj and return the result.

# File lib/strelka/mixins.rb, line 189
def deep_copy( obj )

        # Handle mocks during testing
        return obj if obj.class.name == 'RSpec::Mocks::Mock'

        return case obj
                when NilClass, Numeric, TrueClass, FalseClass, Symbol,
                     Module, Encoding, IO, Tempfile
                        obj

                when Array
                        obj.map {|o| deep_copy(o) }

                when Hash
                        newhash = {}
                        newhash.default_proc = obj.default_proc if obj.default_proc
                        obj.each do |k,v|
                                newhash[ deep_copy(k) ] = deep_copy( v )
                        end
                        newhash

                else
                        obj.clone
                end
end
internify_keys( hash )
Alias for: symbolify_keys
stringify_keys( hash ) click to toggle source

Return a version of the given hash with its keys transformed into Strings from whatever they were before.

# File lib/strelka/mixins.rb, line 225
def stringify_keys( hash )
        newhash = {}

        hash.each do |key,val|
                if val.is_a?( Hash )
                        newhash[ key.to_s ] = stringify_keys( val )
                else
                        newhash[ key.to_s ] = val
                end
        end

        return newhash
end
symbolify_keys( hash ) click to toggle source

Return a duplicate of the given hash with its identifier-like keys transformed into symbols from whatever they were before.

# File lib/strelka/mixins.rb, line 242
def symbolify_keys( hash )
        newhash = {}

        hash.each do |key,val|
                keysym = key.to_s.dup.to_sym

                if val.is_a?( Hash )
                        newhash[ keysym ] = symbolify_keys( val )
                else
                        newhash[ keysym ] = val
                end
        end

        return newhash
end
Also aliased as: internify_keys