Sha256: 8da00adbab1bb29aadda14df617f6c4548d1b3593e069998a9ea5349894799d6

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

module Linecook
  module Utils
    module_function
    
    def nest_hash
      Hash.new {|hash, key| hash[key] = nest_hash }
    end
    
    def serial_merge(*hashes)
      attrs = {}
      while overrides = hashes.shift
        attrs = deep_merge(attrs, overrides)
      end
      attrs
    end
    
    def deep_merge(a, b)
      b.each_pair do |key, current|
        previous = a[key]
        a[key] = deep_merge?(previous, current) ? deep_merge(previous, current) : current
      end
      
      a
    end
    
    def deep_merge?(previous, current)
      current.kind_of?(Hash) && previous.kind_of?(Hash)
    end
    
    def camelize(str)
      str.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
    end
    
    def underscore(str)
      str.gsub(/::/, '/').
      gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
      gsub(/([a-z\d])([A-Z])/,'\1_\2').
      tr("-", "_").
      downcase
    end
    
    def constantize(const_name)
      constants = camelize(const_name).split(/::/)
      
      const = Object
      while name = constants.shift
        const = const.const_get(name)
      end
      
      const
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
linecook-0.6.2 lib/linecook/utils.rb