Changeset 308
- Timestamp:
- 02/02/08 16:40:34 (8 months ago)
- Files:
-
- trunk/demo/app/models/comment.rb (modified) (1 diff)
- trunk/demo/app/models/content_base.rb (modified) (1 diff)
- trunk/demo/app/models/shared_index1.rb (modified) (1 diff)
- trunk/demo/app/models/shared_index2.rb (modified) (1 diff)
- trunk/demo/script/ferret_server (modified) (1 prop)
- trunk/demo/test/unit/content_test.rb (modified) (2 diffs)
- trunk/demo/test/unit/remote_index_test.rb (added)
- trunk/plugin/acts_as_ferret/lib/act_methods.rb (modified) (2 diffs)
- trunk/plugin/acts_as_ferret/lib/index.rb (modified) (1 diff)
- trunk/plugin/acts_as_ferret/lib/remote_index.rb (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/demo/app/models/comment.rb
r307 r308 29 29 acts_as_ferret( :store_class_name => true, 30 30 :remote => ENV['AAF_REMOTE'] == 'true', # for testing drb remote indexing 31 :raise_drb_errors => ENV['RAISE_DRB_ERRORS'] == 'true', 31 32 :fields => { 32 33 :content => { :store => :yes }, trunk/demo/app/models/content_base.rb
r245 r308 17 17 :store_class_name => true, 18 18 :boost => :record_boost, 19 :raise_drb_errors => ENV['RAISE_DRB_ERRORS'] == 'true', 19 20 :remote => ENV['AAF_REMOTE'] == 'true') 20 21 trunk/demo/app/models/shared_index1.rb
r246 r308 5 5 :single_index => true, 6 6 :remote => ENV['AAF_REMOTE'] == 'true', 7 :raise_drb_errors => ENV['RAISE_DRB_ERRORS'] == 'true', 7 8 :ferret => { :default_field => DEFAULT_FIELDS } 8 9 ) trunk/demo/app/models/shared_index2.rb
r246 r308 1 1 class SharedIndex2 < ActiveRecord::Base 2 acts_as_ferret( { :fields => { :name => { :store => :yes } }, 3 :single_index => true, 4 :remote => ENV['AAF_REMOTE'] == 'true' }, 5 { :default_field => SharedIndex1::DEFAULT_FIELDS } ) 2 acts_as_ferret( :fields => { :name => { :store => :yes } }, 3 :single_index => true, 4 :remote => ENV['AAF_REMOTE'] == 'true', 5 :raise_drb_errors => ENV['RAISE_DRB_ERRORS'] == 'true', 6 :ferret => { :default_field => SharedIndex1::DEFAULT_FIELDS } ) 6 7 end trunk/demo/script/ferret_server
- Property svn:executable set to *
trunk/demo/test/unit/content_test.rb
r290 r308 262 262 c1.save 263 263 fi = Content.aaf_index.ferret_index 264 assert fi 264 265 hits = fi.search('title:"Content item 1"') 265 266 assert_equal 1, hits.total_hits … … 336 337 sorting = [ Ferret::Search::SortField.new(:id, :reverse => true) ] 337 338 result = Content.find_with_ferret('comment_count:2', :sort => sorting) 339 assert !result.empty? 338 340 assert result.first.id > result.last.id 339 341 trunk/plugin/acts_as_ferret/lib/act_methods.rb
r307 r308 42 42 # algorithm if this model uses a non-integer primary key named 43 43 # 'id' on MySQL. 44 # 45 # raise_drb_errors:: Set this to true if you want aaf to raise Exceptions 46 # in case the DRb server cannot be reached (in other word - behave like 47 # versions up to 0.4.3). Defaults to false so DRb exceptions 48 # are logged but not raised. Be sure to set up some 49 # monitoring so you still detect when your DRb server died for 50 # whatever reason. 44 51 # 45 52 # ferret:: Hash of Options that directly influence the way the Ferret engine works. You … … 118 125 :ferret_fields => {}, # list of indexed fields that will be filled later 119 126 :enabled => true, # used for class-wide disabling of Ferret 120 :mysql_fast_batches => true # turn off to disable the faster, id based batching mechanism for MySQL 127 :mysql_fast_batches => true, # turn off to disable the faster, id based batching mechanism for MySQL 128 :raise_drb_errors => false # handle DRb connection errors by default 121 129 } 122 130 trunk/plugin/acts_as_ferret/lib/index.rb
r298 r308 12 12 end 13 13 14 class << self15 def proxy_method(name, *args)16 define_method name do |*args|17 @server.send name, model_class_name, *args18 end19 end20 21 def index_proxy_method(*names)22 names.each do |name|23 define_method name do |*args|24 @server.send :"index_#{name}", model_class_name, *args25 end26 end27 end28 29 end30 14 end 31 15 trunk/plugin/acts_as_ferret/lib/remote_index.rb
r170 r308 7 7 8 8 def initialize(config) 9 @config = config 10 @ferret_config = config[:ferret] 9 super 11 10 @server = DRbObject.new(nil, config[:remote]) 12 11 end … … 14 13 def method_missing(method_name, *args) 15 14 args.unshift model_class_name 16 @server.send(method_name, *args) 15 handle_drb_error { @server.send(method_name, *args) } 16 end 17 18 # Proxy any methods that require special return values in case of errors 19 { 20 :highlight => [] 21 }.each do |method_name, default_result| 22 define_method method_name do |*args| 23 args.unshift model_class_name 24 handle_drb_error(default_result) { @server.send method_name, *args } 25 end 17 26 end 18 27 19 28 def find_id_by_contents(q, options = {}, &proc) 20 total_hits, results = @server.find_id_by_contents(model_class_name, q, options)29 total_hits, results = handle_drb_error([0, []]) { @server.find_id_by_contents(model_class_name, q, options) } 21 30 block_given? ? yield_results(total_hits, results, &proc) : [ total_hits, results ] 22 31 end 23 32 24 33 def id_multi_search(query, models, options, &proc) 25 total_hits, results = @server.id_multi_search(model_class_name, query, models, options)34 total_hits, results = handle_drb_error([0, []]) { @server.id_multi_search(model_class_name, query, models, options) } 26 35 block_given? ? yield_results(total_hits, results, &proc) : [ total_hits, results ] 27 36 end … … 29 38 # add record to index 30 39 def add(record) 31 @server.add record.class.name, record.to_doc40 handle_drb_error { @server.add record.class.name, record.to_doc } 32 41 end 33 42 alias << add 34 43 35 44 private 45 46 def handle_drb_error(return_value_in_case_of_error = false) 47 yield 48 rescue DRb::DRbConnError => e 49 logger.error "DRb connection error: #{e}" 50 logger.warn e.backtrace.join("\n") 51 raise e if aaf_configuration[:raise_drb_errors] 52 return_value_in_case_of_error 53 end 36 54 37 55 def yield_results(total_hits, results) … … 43 61 44 62 def model_class_name 45 @config[:class_name]63 aaf_configuration[:class_name] 46 64 end 47 65
