To edit pages or tickets please login with username/password: aaf/aaf

Changeset 88

Show
Ignore:
Timestamp:
09/09/06 12:06:19 (2 years ago)
Author:
jk
Message:

r1098@monsoon: jk | 2006-09-09 14:05:52 +0200
disable automatic indexing in various ways

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plugin/acts_as_ferret/lib/acts_as_ferret.rb

    r85 r88  
    212212              include FerretMixin::Acts::ARFerret::InstanceMethods 
    213213 
    214               before_create :ferret_before_create 
    215               before_update :ferret_before_update 
     214 
    216215              after_create :ferret_create 
    217216              after_update :ferret_update 
     
    546545       
    547546      module InstanceMethods 
    548         attr_reader :reindex 
    549         @ferret_reindex = true 
    550          
    551         def ferret_before_update 
    552           @ferret_reindex = true 
    553         end 
    554         alias :ferret_before_create :ferret_before_update 
    555          
     547         
     548        # re-eneable ferret indexing after a call to #disable_ferret 
     549        def ferret_enable; @ferret_disabled = nil end 
     550        
     551        # returns true if ferret indexing is enabled 
     552        def ferret_enabled?; @ferret_disabled.nil? end 
     553 
     554        # Disable Ferret for a specified amount of time. ::once will disable 
     555        # Ferret for the next call to #save (this is the default), ::always will  
     556        # do so for all subsequent calls. 
     557        # To manually trigger reindexing of a record, you can call #ferret_update  
     558        # directly.  
     559        # 
     560        # When given a block, this will be executed without any ferret indexing of  
     561        # this object taking place. The optional argument in this case can be used  
     562        # to indicate if the object should be indexed after executing the block 
     563        # (::index_when_finished). Automatic Ferret indexing of this object will be  
     564        # turned on after the block has been executed. 
     565        def disable_ferret(option = :once) 
     566          if block_given? 
     567            @ferret_disabled = :always 
     568            yield 
     569            ferret_enable 
     570            ferret_update if option == :index_when_finished 
     571          elsif [:once, :always].include?(option) 
     572            @ferret_disabled = option 
     573          else 
     574            raise ArgumentError.new("Invalid Argument #{option}") 
     575          end 
     576        end 
     577 
    556578        # add to index 
    557579        def ferret_create 
    558           logger.debug "ferret_create/update: #{self.class.name} : #{self.id}" 
    559           if @ferret_reindex 
     580          if ferret_enabled? 
     581            logger.debug "ferret_create/update: #{self.class.name} : #{self.id}" 
    560582            self.class.ferret_index << self.to_doc 
    561           end 
    562           @ferret_reindex = true 
    563           true 
     583          else 
     584            ferret_enable if @ferret_disabled == :once 
     585          end 
     586          @ferret_enabled = true 
     587          true # signal success to AR 
    564588        end 
    565589        alias :ferret_update :ferret_create 
     
    580604            logger.warn("Could not find indexed value for this object: #{$!}") 
    581605          end 
    582           true 
     606          true # signal success to AR 
    583607        end 
    584608         

To edit pages or tickets please login with username/password: aaf/aaf