Sha256: 45481ad43f117189045783db15584fc535f2e10c961c9d47b9e996718807a04c

Contents?: true

Size: 1.45 KB

Versions: 4

Compression:

Stored size: 1.45 KB

Contents

class ThinkingSphinx::ActiveRecord::Callbacks::UpdateCallbacks <
  ThinkingSphinx::Callbacks

  callbacks :after_update

  def after_update
    return unless updates_enabled?

    indices.each do |index|
      update index unless index.distributed?
    end
  end

  private

  def attributes_hash_for(index)
    updateable_attributes_for(index).inject({}) do |hash, attribute|
      if instance.changed.include?(attribute.columns.first.__name.to_s)
        hash[attribute.name] = attribute.value_for(instance)
      end

      hash
    end
  end

  def configuration
    ThinkingSphinx::Configuration.instance
  end

  def indices
    @indices ||= begin
      all = configuration.indices_for_references(reference)
      all.reject { |index| index.type == 'rt' }
    end
  end

  def reference
    instance.class.name.underscore.to_sym
  end

  def update(index)
    attributes = attributes_hash_for(index)
    return if attributes.empty?

    sphinxql = Riddle::Query.update(
      index.name, index.document_id_for_key(instance.id), attributes
    )
    ThinkingSphinx::Connection.take do |connection|
      connection.execute(sphinxql)
    end
  rescue ThinkingSphinx::ConnectionError => error
    # This isn't vital, so don't raise the error.
  end

  def updateable_attributes_for(index)
    index.sources.collect(&:attributes).flatten.select { |attribute|
      attribute.updateable?
    }
  end

  def updates_enabled?
    configuration.settings['attribute_updates']
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
thinking-sphinx-3.1.4 lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb
thinking-sphinx-3.1.3 lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb
thinking-sphinx-3.1.2 lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb
thinking-sphinx-3.1.1 lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb