Sha256: f8865a3d54b5fd42bf0cab92ba8b2a9b67f1d87a47a7ee3cb0477bf8c05111a7

Contents?: true

Size: 1.82 KB

Versions: 2

Compression:

Stored size: 1.82 KB

Contents

require 'indexers/dsl/api'
require 'indexers/dsl/mappings'
require 'indexers/dsl/traitable'
require 'indexers/dsl/search'
require 'indexers/dsl/serialization'
require 'indexers/extensions/active_record/base'
require 'indexers/collection'
require 'indexers/computed_sorts'
require 'indexers/concern'
require 'indexers/configuration'
require 'indexers/definitions'
require 'indexers/indexer'
require 'indexers/pagination'
require 'indexers/proxy'
require 'indexers/railtie'
require 'indexers/version'

module Indexers
  class << self

    def namespace
      "#{Rails.application.class.parent_name} #{Rails.env}".parameterize(separator: '_')
    end

    def client
      @client ||= begin
        require 'elasticsearch'
        Elasticsearch::Client.new YAML.load_file("#{Rails.root}/config/elasticsearch.yml")[Rails.env]
      end
    end

    def configure
      yield configuration
    end

    def configuration
      @configuration ||= Configuration.new
    end

    def computed_sorts
      @computed_sorts ||= ComputedSorts.new
    end

    def definitions
      @definitions ||= Definitions.new
    end

    def define(*args, &block)
      Proxy.new *args, &block
    end

    def index
      unless client.indices.exists?(index: namespace)
        client.indices.create(
          index: namespace,
          body: { settings: configuration.analysis }
        )
      end
      definitions.each &:build
    end

    def reindex
      unindex
      index
    end

    def unindex
      if client.indices.exists?(index: namespace)
        client.indices.delete index: namespace
      end
    end

    def suggest(*args)
      response = client.suggest(
        index: namespace,
        body: { suggestions: Dsl::Api.new(args, &configuration.suggestions).to_h }
      )
      response['suggestions'].first['options'].map &:symbolize_keys
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
indexers-5.1.1 lib/indexers.rb
indexers-5.1.0 lib/indexers.rb