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

Changeset 326

Show
Ignore:
Timestamp:
02/18/08 20:36:07 (8 months ago)
Author:
jk
Message:

support for early loaded classes

Files:

Legend:

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

    r324 r326  
    157157  def self.define_index(name, options = {}) 
    158158    name = name.to_sym 
    159     raise IndexAlreadyDefined.new(name) if ferret_indexes.has_key?(name) 
     159    pending_classes = nil 
     160    if ferret_indexes.has_key?(name) 
     161      # seems models have been already loaded. remove that index for now, 
     162      # re-register any already loaded classes later on. 
     163      idx = get_index(name) 
     164      pending_classes = idx.index_definition[:registered_models] 
     165      pending_classes_configs = idx.registered_models_config 
     166      idx.close 
     167      ferret_indexes.delete(name) 
     168    end 
     169 
    160170    index_definition = { 
    161171      :index_dir => "#{ActsAsFerret::index_dir}/#{name}", 
     
    205215    index_definition[:ferret_fields].update build_field_config( options[:additional_fields] ) 
    206216 
    207     ferret_indexes[name] = create_index_instance index_definition 
     217    idx = ferret_indexes[name] = create_index_instance( index_definition ) 
     218 
     219    # re-register early loaded classes 
     220    if pending_classes 
     221      pending_classes.each { |clazz| idx.register_class clazz, pending_classes_configs[clazz] } 
     222    end 
     223 
     224    return idx 
    208225  end 
    209226  
  • trunk/plugin/acts_as_ferret/lib/index.rb

    r323 r326  
    2121    include FerretFindMethods 
    2222 
    23     attr_accessor :logger, :index_name, :index_definition 
     23    attr_reader :logger, :index_name, :index_definition, :registered_models_config 
    2424    def initialize(index_definition) 
    2525      @index_definition = index_definition 
     26      @registered_models_config = {} 
    2627      @index_name = index_definition[:name] 
    2728      @logger = IndexLogger.new(ActsAsFerret::logger, @index_name) 
     
    3334      logger.info "register class #{clazz} with index #{index_name}" 
    3435      index_definition[:registered_models] << clazz 
     36      @registered_models_config[clazz] = options 
    3537 
    3638      # merge fields from this acts_as_ferret call with predefined fields 

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