class ThinkingSphinx::ActiveRecord::Callbacks::UpdateCallbacks

Constants

CHANGED_ATTRIBUTES

Public Instance Methods

after_update() click to toggle source
# File lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb, line 14
def after_update
  return unless !ThinkingSphinx::Callbacks.suspended? && updates_enabled?

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

Private Instance Methods

attributes_hash_for(index) click to toggle source
# File lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb, line 24
def attributes_hash_for(index)
  updateable_attributes_for(index).inject({}) do |hash, attribute|
    if changed_attributes.include?(attribute.columns.first.__name.to_s)
      hash[attribute.name] = attribute.value_for(instance)
    end

    hash
  end
end
changed_attributes() click to toggle source
# File lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb, line 34
def changed_attributes
  @changed_attributes ||= CHANGED_ATTRIBUTES.call instance
end
configuration() click to toggle source
# File lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb, line 38
def configuration
  ThinkingSphinx::Configuration.instance
end
indices() click to toggle source
# File lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb, line 42
def indices
  @indices ||= begin
    all = configuration.indices_for_references(reference)
    all.reject { |index| index.type == 'rt' }
  end
end
reference() click to toggle source
# File lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb, line 49
def reference
  ThinkingSphinx::IndexSet.reference_name(instance.class)
end
update(index) click to toggle source
# File lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb, line 53
def update(index)
  attributes = attributes_hash_for(index)
  return if attributes.empty?

  sphinxql = Riddle::Query.update(
    index.name,
    index.document_id_for_key(instance.public_send(index.primary_key)),
    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
updateable_attributes_for(index) click to toggle source
# File lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb, line 69
def updateable_attributes_for(index)
  index.sources.collect(&:attributes).flatten.select { |attribute|
    attribute.updateable?
  }
end
updates_enabled?() click to toggle source
# File lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb, line 75
def updates_enabled?
  configuration.settings['attribute_updates']
end