Sha256: f576ba0ff40f91470251d17d0de82087fd39a6447e86939d7cf8378a50b2626a

Contents?: true

Size: 1.57 KB

Versions: 12

Compression:

Stored size: 1.57 KB

Contents

module ThinkingSphinx
  module ActiveRecord
    module AttributeUpdates
      def self.included(base)
        base.class_eval do
          after_save :update_attribute_values
        end
      end

      private

      def update_attribute_values
        return true unless ThinkingSphinx.updates_enabled? &&
          ThinkingSphinx.sphinx_running?

        self.class.sphinx_indexes.each do |index|
          attribute_pairs  = attribute_values_for_index(index)
          attribute_names  = attribute_pairs.keys
          attribute_values = attribute_names.collect { |key|
            attribute_pairs[key]
          }

          update_index index.core_name, attribute_names, attribute_values
          next unless index.delta?
          update_index index.delta_name, attribute_names, attribute_values
        end

        true
      end

      def updatable_attributes(index)
        index.attributes.select { |attrib| attrib.updatable? }
      end

      def attribute_values_for_index(index)
        updatable_attributes(index).inject({}) { |hash, attrib|
          hash[attrib.unique_name.to_s] = attrib.live_value self
          hash
        }
      end

      def update_index(index_name, attribute_names, attribute_values)
        config = ThinkingSphinx::Configuration.instance
        config.client.update index_name, attribute_names, {
          sphinx_document_id => attribute_values
        }
      rescue Riddle::ConnectionError, Riddle::ResponseError,
        ThinkingSphinx::SphinxError, Errno::ETIMEDOUT
        # Not the end of the world if Sphinx isn't running.
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
thinking-sphinx-2.0.14 lib/thinking_sphinx/active_record/attribute_updates.rb
friendlyfashion-thinking-sphinx-2.0.13.3 lib/thinking_sphinx/active_record/attribute_updates.rb
friendlyfashion-thinking-sphinx-2.0.13.2 lib/thinking_sphinx/active_record/attribute_updates.rb
friendlyfashion-thinking-sphinx-2.0.13.1 lib/thinking_sphinx/active_record/attribute_updates.rb
friendlyfashion-thinking-sphinx-2.0.13 lib/thinking_sphinx/active_record/attribute_updates.rb
thinking-sphinx-2.0.13 lib/thinking_sphinx/active_record/attribute_updates.rb
thinking-sphinx-2.0.12 lib/thinking_sphinx/active_record/attribute_updates.rb
thinking-sphinx-2.0.11 lib/thinking_sphinx/active_record/attribute_updates.rb
thinking-sphinx-2.0.10 lib/thinking_sphinx/active_record/attribute_updates.rb
thinking-sphinx-2.0.9 lib/thinking_sphinx/active_record/attribute_updates.rb
thinking-sphinx-2.0.8 lib/thinking_sphinx/active_record/attribute_updates.rb
thinking-sphinx-2.0.7 lib/thinking_sphinx/active_record/attribute_updates.rb