# File lib/gibbler.rb, line 409
    def __gibbler(digest_type=nil)
      klass = self.class
      d = self.keys.sort { |a,b| a.inspect <=> b.inspect }
      d.collect! do |name| 
        value = self[name]
        unless value.respond_to? :__gibbler
          gibbler_debug klass, :skipping, name
          next
        end
        '%s:%s:%s' % [value.class, name, value.__gibbler(digest_type)]
      end 
      d = d.join(':').__gibbler(digest_type)
      a = Gibbler.digest '%s:%s:%s' % [klass, d.size, d], digest_type
      gibbler_debug klass, a, [klass, d.size, d]
      a  
    end