class AlgoliaSearch::SafeIndex

this class wraps an Algolia::Index object ensuring all raised exceptions are correctly logged or thrown depending on the `raise_on_failure` option

Public Class Methods

move_index(old_name, new_name) click to toggle source

expose move as well

# File lib/algoliasearch-rails.rb, line 327
def self.move_index(old_name, new_name)
  SafeIndex.log_or_throw(:move_index, true) do
    AlgoliaSearch.client.move_index(old_name, new_name)
  end
end
new(name, raise_on_failure) click to toggle source
# File lib/algoliasearch-rails.rb, line 293
def initialize(name, raise_on_failure)
  @index = AlgoliaSearch.client.init_index(name)
  @raise_on_failure = raise_on_failure.nil? || raise_on_failure
end

Private Class Methods

log_or_throw(method, raise_on_failure) { || ... } click to toggle source
# File lib/algoliasearch-rails.rb, line 334
def self.log_or_throw(method, raise_on_failure, &block)
  begin
    yield
  rescue Algolia::AlgoliaError => e
    raise e if raise_on_failure
    # log the error
    (Rails.logger || Logger.new(STDOUT)).error("[algoliasearch-rails] #{e.message}")
    # return something
    case method.to_s
    when 'search'
      # some attributes are required
      { 'hits' => [], 'hitsPerPage' => 0, 'page' => 0, 'facets' => {}, 'error' => e }
    else
      # empty answer
      { 'error' => e }
    end
  end
end

Public Instance Methods

get_settings(*args) click to toggle source

special handling of get_settings to avoid raising errors on 404

# File lib/algoliasearch-rails.rb, line 315
def get_settings(*args)
  SafeIndex.log_or_throw(:get_settings, @raise_on_failure) do
    begin
      @index.get_settings(*args)
    rescue Algolia::AlgoliaHttpError => e
      return {} if e.code == 404 # not fatal
      raise e
    end
  end
end
wait_task(task_id) click to toggle source

special handling of wait_task to handle null task_id

# File lib/algoliasearch-rails.rb, line 307
def wait_task(task_id)
  return if task_id.nil? && !@raise_on_failure # ok
  SafeIndex.log_or_throw(:wait_task, @raise_on_failure) do
    @index.wait_task(task_id)
  end
end