Sha256: 69c62f1ae8377cc0562be5acf7ea1324b440e562028d3646c3e9fd94caa792ed

Contents?: true

Size: 1.86 KB

Versions: 32

Compression:

Stored size: 1.86 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)
        config = ThinkingSphinx::Configuration.instance
        rotate = ThinkingSphinx.sphinx_running? ? "--rotate" : ""
        
        output = `#{config.bin_path}#{config.indexer_binary_name} --config "#{config.config_file}" #{rotate} #{model.delta_index_names.join(' ')}`
        puts(output) unless ThinkingSphinx.suppress_delta_output?
      end
      
      def delete_from_core(model, instance)
        model.core_index_names.each do |index_name|
          model.delete_in_index index_name, instance.sphinx_document_id
        end
      end
      
      def adapter
        @adapter = @index.model.sphinx_database_adapter
      end
    end
  end
end

Version data entries

32 entries across 32 versions & 3 rubygems

Version Path
friendlyfashion-thinking-sphinx-2.0.14.1 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-2.0.14 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-1.4.14 lib/thinking_sphinx/deltas/default_delta.rb
friendlyfashion-thinking-sphinx-2.0.13.3 lib/thinking_sphinx/deltas/default_delta.rb
friendlyfashion-thinking-sphinx-2.0.13.2 lib/thinking_sphinx/deltas/default_delta.rb
friendlyfashion-thinking-sphinx-2.0.13.1 lib/thinking_sphinx/deltas/default_delta.rb
friendlyfashion-thinking-sphinx-2.0.13 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-2.0.13 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-1.4.13 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-2.0.12 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-1.4.12 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-2.0.11 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-1.4.11 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-2.0.10 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-1.4.10 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-2.0.9 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-1.4.9 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-2.0.8 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-1.4.8 lib/thinking_sphinx/deltas/default_delta.rb
thinking-sphinx-2.0.7 lib/thinking_sphinx/deltas/default_delta.rb