module Gibbler::Complex
Creates a digest based on:
-
An Array of instance variable names or method names and values in the format:
CLASS:LENGTH:VALUE
-
Return the digest for
class:length:value
where:
This method can be used by any class which stores values in instance variables.
class Episodes include Gibbler::Complex attr_accessor :season, :year, :cast end
Public Class Methods
gibbler(*fields)
click to toggle source
# File lib/gibbler.rb, line 333 def self.gibbler *fields @__gibbler_fields.push *fields end
gibbler_fields()
click to toggle source
# File lib/gibbler.rb, line 330 def self.gibbler_fields @__gibbler_fields end
included(obj)
click to toggle source
# File lib/gibbler.rb, line 325 def self.included(obj) obj.extend Attic obj.attic :gibbler_cache obj.class_eval do @__gibbler_fields = [] def self.gibbler_fields @__gibbler_fields end def self.gibbler *fields @__gibbler_fields.push *fields end def self.inherited(obj) obj.extend Attic obj.attic :gibbler_cache fields = @__gibbler_fields.clone obj.class_eval do @__gibbler_fields = fields end end end end
inherited(obj)
click to toggle source
# File lib/gibbler.rb, line 336 def self.inherited(obj) obj.extend Attic obj.attic :gibbler_cache fields = @__gibbler_fields.clone obj.class_eval do @__gibbler_fields = fields end end
Public Instance Methods
__gibbler(digest_type=nil)
click to toggle source
Creates a digest for the current state of self.
# File lib/gibbler.rb, line 358 def __gibbler(digest_type=nil) klass = self.class d = [] gibbler_debug :gibbler_fields, gibbler_fields gibbler_fields.each do |n| value = respond_to?(n) ? send(n) : instance_variable_get("@#{n}") unless value.respond_to? :__gibbler gibbler_debug klass, :skipping, n next end d << '%s:%s:%s' % [value.class, n, value.__gibbler(digest_type)] end d = d.join(Gibbler.delimiter).__gibbler(digest_type) a = Gibbler.digest "%s:%d:%s" % [klass, d.size, d], digest_type gibbler_debug klass, a, [klass, d.size, d] a end
__gibbler_revert!()
click to toggle source
# File lib/gibbler.rb, line 376 def __gibbler_revert! state = self.gibbler_object self.gibbler_cache state.instance_variables do |n| v = state.instance_variable_get n self.instance_variable_set v end end
gibbler_fields()
click to toggle source
# File lib/gibbler.rb, line 347 def gibbler_fields f = [self.class.gibbler_fields].compact.flatten if f.empty? f = instance_variables.sort.collect { |n| n.to_s[1..-1].to_sym # remove the '@' } end f end