Sha256: e550909550ae4630162f96be8c165dd3a34bd431110440d01819c9b5bf549d89

Contents?: true

Size: 1.6 KB

Versions: 16

Compression:

Stored size: 1.6 KB

Contents

module Isomorfeus
  module Data
    class FerretAccelerator
      def self.finalize(fer_acc)
        proc { fer_acc.close_index }
      end

      attr_reader :doc_class, :doc_class_name, :doc_class_name_u
      attr_accessor :index

      def initialize(doc_class, &block)
        @doc_class = doc_class
        @doc_class_name = doc_class.name
        @doc_class_name_u = @doc_class_name.underscore
        if block_given?
          res = block.call(self)
          @index = res unless @index
        else
          open_index
        end
        ObjectSpace.define_finalizer(self, self.class.finalize(self))
      end

      def destroy_index
        close_index
        FileUtils.rm_rf(index_path(doc_class_name))
      end

      def close_index
        @index.close
      end

      def create_doc(document)
        @index.add_document(document)
      end

      def destroy_doc(id)
        @index.delete(id)
        true
      end

      def load_doc(id)
        @index.doc(id)&.load
      end

      def save_doc(id, document)
        @index.update(id, document)
      end

      def search_each(query, options, &block)
        @index.search_each(query, options, &block)
      end

      private

      def index_path
        File.expand_path(File.join(Isomorfeus.data_documents_path, @doc_class_name_u))
      end

      def open_index
        FileUtils.mkdir_p(Isomorfeus.data_documents_path) unless Dir.exist?(Isomorfeus.data_documents_path)
        @index = Isomorfeus::Ferret::Index::Index.new(path: index_path, id_field: :key)
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
isomorfeus-data-2.0.5 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.4 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.3 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.2 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.1 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc10 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc9 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc8 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc7 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc6 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc5 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc4 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc3 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc2 lib/isomorfeus/data/ferret_accelerator.rb
isomorfeus-data-2.0.0.rc1 lib/isomorfeus/data/ferret_accelerator.rb