Sha256: 4105d95a41bf3c92e5ef74b4aa570529fcedfaff08e956fb660af3caa62e3d87

Contents?: true

Size: 972 Bytes

Versions: 4

Compression:

Stored size: 972 Bytes

Contents

class ThinkingSphinx::Middlewares::StaleIdFilter <
  ThinkingSphinx::Middlewares::Middleware

  def call(contexts)
    @context   = contexts.first
    @stale_ids = []
    @retries   = stale_retries

    begin
      app.call contexts
    rescue ThinkingSphinx::Search::StaleIdsException => error
      raise error if @retries <= 0

      append_stale_ids error.ids
      ThinkingSphinx::Logger.log :message, log_message

      @retries -= 1 and retry
    end
  end

  private

  def append_stale_ids(ids)
    @stale_ids |= ids

    context.search.options[:without_ids] ||= []
    context.search.options[:without_ids] |= ids
  end

  def log_message
    'Stale Ids (%s %s left): %s' % [
      @retries, (@retries == 1 ? 'try' : 'tries'), @stale_ids.join(', ')
    ]
  end

  def stale_retries
    case context.search.options[:retry_stale]
    when nil, TrueClass
      2
    when FalseClass
      0
    else
      context.search.options[:retry_stale].to_i
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
thinking-sphinx-3.1.4 lib/thinking_sphinx/middlewares/stale_id_filter.rb
thinking-sphinx-3.1.3 lib/thinking_sphinx/middlewares/stale_id_filter.rb
thinking-sphinx-3.1.2 lib/thinking_sphinx/middlewares/stale_id_filter.rb
thinking-sphinx-3.1.1 lib/thinking_sphinx/middlewares/stale_id_filter.rb