def load!
      text = source||""
      @cached_stuff ||= 
      begin
        if options[:cache_to] # Getting recorded hash dump
          Marshal.load(Base64.decode64(@env.send(options[:cache_to]))).tap do |cached_stuff|
            if cached_stuff.time < Date.new(2012,7,25)
              #### CACHE OUT OF DATE ####
              warn "WARNING: html_slicer's cached stuff for #{@env.class.name} records has become unacceptable because of code changes. Update each record again. Visit http://vkvon.ru/projects/html_slicer for further details."
              raise Exception 
            end
          end
        else
          raise Exception
        end
      rescue Exception, TypeError, NoMethodError # New cache object otherwise
        CachedStuff.new
      end
      if @document.blank? || !@cached_stuff.valid_text?(text) # Initialize new @document if not exist or content has been changed
        @document = ::HTML::Document.new(text)
        @cached_stuff.hexdigest_for = text
      end
      if @cached_stuff.changed? || !@cached_stuff.valid_resizing_options?(@resizing_options) # Initialize new resizing process if the content or options has been changed
        if @resizing_options
          @cached_stuff.resizing = Resizing.new(@document, @resizing_options)
        else
          @cached_stuff.resizing = nil
        end
      end
      if @cached_stuff.changed? || !@cached_stuff.valid_slicing_options?(@slicing_options) # Initialize new slicing process if the content or options has been changed
        if @slicing_options
          @cached_stuff.slicing = Slicing.new(@document, @slicing_options)
        else
          @cached_stuff.slicing = nil
        end
      end
      if @cached_stuff.changed? # Serialize and dump the cache if any changes provided
        @cached_stuff.changed = false
        if options[:cache_to]
          @env.send("#{options[:cache_to]}=", @cached_stuff.to_dump)
        end
      end
    end
def load!
      text = source||""
      @cached_stuff ||= 
      begin
        if options[:cache_to] # Getting recorded hash dump
          Marshal.load(Base64.decode64(@env.send(options[:cache_to]))).tap do |cached_stuff|
            if cached_stuff.time < Date.new(2012,7,25)
              #### CACHE OUT OF DATE ####
              warn "WARNING: html_slicer's cached stuff for #{@env.class.name} records has become unacceptable because of code changes. Update each record again. Visit http://vkvon.ru/projects/html_slicer for further details."
              raise Exception 
            end
          end
        else
          raise Exception
        end
      rescue Exception, TypeError, NoMethodError # New cache object otherwise
        CachedStuff.new
      end
      if @document.blank? || !@cached_stuff.valid_text?(text) # Initialize new @document if not exist or content has been changed
        @document = ::HTML::Document.new(text)
        @cached_stuff.hexdigest_for = text
      end
      if @cached_stuff.changed? || !@cached_stuff.valid_resizing_options?(@resizing_options) # Initialize new resizing process if the content or options has been changed
        if @resizing_options
          @cached_stuff.resizing = Resizing.new(@document, @resizing_options)
        else
          @cached_stuff.resizing = nil
        end
      end
      if @cached_stuff.changed? || !@cached_stuff.valid_slicing_options?(@slicing_options) # Initialize new slicing process if the content or options has been changed
        if @slicing_options
          @cached_stuff.slicing = Slicing.new(@document, @slicing_options)
        else
          @cached_stuff.slicing = nil
        end
      end
      if @cached_stuff.changed? # Serialize and dump the cache if any changes provided
        @cached_stuff.changed = false
        if options[:cache_to]
          @env.send("#{options[:cache_to]}=", @cached_stuff.to_dump)
        end
      end
    end
Process initializer