Sha256: 8aa76cdaf1f585026435cd912e922e7b9696985e9ee78d5e7d95531c00ab7877

Contents?: true

Size: 1.63 KB

Versions: 3

Compression:

Stored size: 1.63 KB

Contents

module ActiveLucene
  class Document
    PER_PAGE = 20

    attr_reader :attributes, :id, :highlight

    def initialize(attributes = {})
      @attributes = attributes.stringify_keys
      @highlight = @attributes.delete('highlight')
      @id = @attributes.delete('id') || object_id.to_s
    end

    def save
      document = org.apache.lucene.document.Document.new
      _all = []
      @attributes.each do |key, value|
        document.add Field.new key, value, Field::Store::YES, Field::Index::ANALYZED
        _all << value
      end
      document.add Field.new ID, @id, Field::Store::YES, Field::Index::NOT_ANALYZED
      document.add Field.new ALL, _all.join(' '), Field::Store::NO, Field::Index::ANALYZED
      Writer.write document
    end

    def destroy
      Writer.delete @id
    end

    def update_attributes(new_attributes)
      destroy
      self.class.create! attributes.merge(new_attributes.merge(:id => @id))
    end
    alias :update_attributes! :update_attributes

    def to_param
      @id
    end

    def self.create!(attributes)
      returning new(attributes) do |model|
        model.save
      end
    end

    def self.find(param)
      if param.instance_of? Symbol
        search :all
      else
        search(:id => param).first
      end
    end

    def self.search(param)
      search = Searcher.search(param)
      results = search.attributes.map { |attributes| new attributes }
      results.instance_eval "def total_pages; #{search.total_pages}; end;"
      results
    end

    def self.columns
      []
    end

    private

    def method_missing(method_name, *args)
      @attributes[method_name.to_s]
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
active_lucene-0.5.2 lib/active_lucene/document.rb
active_lucene-0.5.1 lib/active_lucene/document.rb
active_lucene-0.5.0 lib/active_lucene/document.rb