Sha256: 8f66a937e275c60c77221338c6fa1a2b3853ae64eb7b85b0afdae7abbcdba567

Contents?: true

Size: 1.45 KB

Versions: 15

Compression:

Stored size: 1.45 KB

Contents

require 'drb'
module ActsAsFerret

  # This index implementation connects to a remote ferret server instance. It
  # basically forwards all calls to the remote server.
  class RemoteIndex < AbstractIndex
    include RemoteFunctions

    def initialize(config)
      super
      @server = DRbObject.new(nil, ActsAsFerret::remote)
    end

    # Cause model classes to be loaded (and indexes get declared) on the DRb
    # side of things.
    def register_class(clazz, options)
      handle_drb_error { @server.register_class clazz.name }
    end

    def method_missing(method_name, *args)
      args.unshift index_name
      handle_drb_error { @server.send(method_name, *args) }
    end

    # Proxy any methods that require special return values in case of errors
    { 
      :highlight => [] 
    }.each do |method_name, default_result|
      define_method method_name do |*args|
        args.unshift index_name
        handle_drb_error(default_result) { @server.send method_name, *args }
      end
    end

    def find_ids(q, options = {}, &proc)
      total_hits, results = handle_drb_error([0, []]) { @server.find_ids(index_name, q, options) }
      block_given? ? yield_results(total_hits, results, &proc) : [ total_hits, results ]
    end

    # add record to index
    def add(record)
      handle_drb_error { @server.add index_name, record.to_doc }
    end
    alias << add

    private

    #def model_class_name
    #  index_definition[:class_name]
    #end

  end

end

Version data entries

15 entries across 15 versions & 4 rubygems

Version Path
cehoffman-acts_as_ferret-0.4.4 lib/remote_index.rb
jkraemer-acts_as_ferret-0.4.4 lib/remote_index.rb
acts_as_ferret-0.5.4 lib/acts_as_ferret/remote_index.rb
acts_as_ferret-0.5.3 lib/acts_as_ferret/remote_index.rb
watson-acts_as_ferret-0.4.8.2 lib/remote_index.rb
acts_as_ferret-0.5.2 lib/acts_as_ferret/remote_index.rb
acts_as_ferret-0.4.8.2 lib/remote_index.rb
acts_as_ferret-0.4.8.1 lib/remote_index.rb
acts_as_ferret-0.5.1 lib/acts_as_ferret/remote_index.rb
acts_as_ferret-0.5 lib/acts_as_ferret/remote_index.rb
acts_as_ferret-0.4.8.rails3 lib/remote_index.rb
acts_as_ferret-0.4.8 lib/remote_index.rb
acts_as_ferret-0.4.7 lib/remote_index.rb
acts_as_ferret-0.4.6 lib/remote_index.rb
acts_as_ferret-0.4.4 lib/remote_index.rb