Sha256: eb2161f2e2d208e0107929858974e13438cb22806e6d417a31c7a096e6e84b46

Contents?: true

Size: 1.53 KB

Versions: 5

Compression:

Stored size: 1.53 KB

Contents

module ThinkingSphinx
  module Deltas
    class DefaultDelta
      attr_accessor :column

      def initialize(index, options)
        @index  = index
        @column = options.delete(:delta_column) || :delta
      end

      def index(model, instance = nil)
        return true unless ThinkingSphinx.updates_enabled? &&
          ThinkingSphinx.deltas_enabled?
        return true if instance && !toggled(instance)

        update_delta_indexes model
        delete_from_core     model, instance if instance

        true
      end

      def toggle(instance)
        instance.send "#{@column}=", true
      end

      def toggled(instance)
        instance.send "#{@column}"
      end

      def reset_query(model)
        "UPDATE #{model.quoted_table_name} SET " +
        "#{model.connection.quote_column_name(@column.to_s)} = #{adapter.boolean(false)} " +
        "WHERE #{model.connection.quote_column_name(@column.to_s)} = #{adapter.boolean(true)}"
      end

      def clause(model, toggled)
        "#{model.quoted_table_name}.#{model.connection.quote_column_name(@column.to_s)}" +
        " = #{adapter.boolean(toggled)}"
      end

      private

      def update_delta_indexes(model)
        ThinkingSphinx::Deltas::IndexJob.new(model.delta_index_names).perform
      end

      def delete_from_core(model, instance)
        ThinkingSphinx::Deltas::DeleteJob.new(
          model.core_index_names, instance.sphinx_document_id
        ).perform
      end

      def adapter
        @adapter = @index.model.sphinx_database_adapter
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
friendlyfashion-thinking-sphinx-2.0.14.4 lib/thinking_sphinx/deltas/default_delta.rb
friendlyfashion-thinking-sphinx-2.0.14.3 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-2.1.0 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-1.5.0 lib/thinking_sphinx/deltas/default_delta.rb
friendlyfashion-thinking-sphinx-2.0.14.2 lib/thinking_sphinx/deltas/default_delta.rb