Creates a digest for the current state of self based on:
Object#class
Length of Object#name || 0
Object#name || "
e.g. Digest::SHA1.hexdigest "Class:6:Object" #=>
This is a default method appropriate for only the most basic objects like Class and Module.
# File lib/gibbler.rb, line 197 def __gibbler(digest_type=nil) klass = self.class nom = self.name if self.respond_to?(:name) nom ||= '' a = Gibbler.digest '%s:%s:%s' % [klass, nom.size, nom], digest_type gibbler_debug klass, a, [klass, nom.size, nom] a end
The cache is in the Attic.
# File lib/gibbler/aliases.rb, line 12 def digest_cache; gibbler_cache; end
A simple override on Object#freeze to create a digest before the object is frozen. Once the object is frozen obj.gibbler will return the cached value with out calculation.
# File lib/gibbler.rb, line 210 def freeze() gibbler_debug :FREEZE, self.class, caller[0] if Gibbler.debug? self.gibbler super self end
Has this object been modified?
This method compares the return value from digest with the previous value returned by gibbler (the value is stored in the attic as gibbler_cache). See Attic
# File lib/gibbler.rb, line 175 def gibbled? self.gibbler_cache ||= self.gibbler was, now = self.gibbler_cache.clone, self.gibbler gibbler_debug :gibbled?, was, now was != now end
Calculates a digest for the current object instance. Objects that are a kind of Hash or Array are processed recursively. The length of the returned String depends on the digest type. Also stores the value in the attic.
obj.gibbler # => a5b1191a obj.gibbler_cache # => a5b1191a
Calling gibbler_cache returns the most recent digest without calculation.
If the object is frozen, this will return the value of gibbler_cache.
# File lib/gibbler.rb, line 162 def gibbler(digest_type=nil) #gibbler_debug caller[0] gibbler_debug :GIBBLER, self.class, self return self.gibbler_cache if self.frozen? self.gibbler_cache = Gibbler::Digest.new self.__gibbler(digest_type) end
# File lib/gibbler.rb, line 182 def gibbler_debug(*args) return unless Gibbler.debug? p args end
# File lib/gibbler.rb, line 145 def gibbler_fields end
Generated with the Darkfish Rdoc Generator 2.