class Kumogata::Utils
  class << self
    def camelize(str)
      str.to_s.split(/[-_]/).map {|i|
        i[0, 1].upcase + i[1..-1].downcase
      }.join
    end

    def get_user_host
      user = `whoami`.strip rescue ''
      host = `hostname`.strip rescue ''
      user_host = [user, host].select {|i| not i.empty? }.join('-')
      user_host.empty? ? nil : user_host
    end

    def random_param_name(n)
      a_zA_Z0_9 = (('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a)
      a_zA_Z0_9.sample(n).join
    end

    def filter_backtrace(backtrace)
      filter_path = ['(eval)']

      if defined?(Gem)
        filter_path.concat(Gem.path)
        filter_path << Gem.bindir
      end

      RbConfig::CONFIG.select {|k, v|
        k.to_s =~ /libdir/
      }.each {|k, v| filter_path << v }

      filter_path = filter_path.map {|i| /\A#{Regexp.escape(i)}/ }

      backtrace.select do |path|
        path = path.split(':', 2).first
        not filter_path.any? {|i| i =~ path }
      end
    end

    def stringify(obj)
      case obj
      when Array
        obj.map {|i| stringify(i) }
      when Hash
        hash = {}
        obj.each {|k, v| hash[stringify(k)] = stringify(v) }
        hash
      else
        obj.to_s
      end
    end
  end # of class methods
end

module Kumogata
  ENCRYPTION_PASSWORD = Kumogata::Utils.random_param_name(16)
end
