ferret_result.rb 793 Bytes
module ActsAsFerret

  # mixed into the FerretResult and AR classes calling acts_as_ferret
  module ResultAttributes
    # holds the score this record had when it was found via
    # acts_as_ferret
    attr_accessor :ferret_score

    attr_accessor :ferret_rank
  end

  class FerretResult
    include ResultAttributes
    attr_accessor :id

    def initialize(model, id, score, data = {})
      @model = model.constantize
      @id = id
      @ferret_score = score
      @data = data
    end
    
    def method_missing(method, *args)
      if @ar_record || @data[method].nil?
        ferret_load_record unless @ar_record
        @ar_record.send method, *args
      else
        @data[method]
      end
    end

    def ferret_load_record
      @ar_record = @model.find(id)
    end
  end
end