class ThinkingSphinx::RealTime::Transcriber
Attributes
index[R]
Public Class Methods
new(index)
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 4 def initialize(index) @index = index end
Public Instance Methods
clear_before(time)
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 8 def clear_before(time) execute <<~SQL.strip DELETE FROM #{@index.name} WHERE sphinx_updated_at < #{time.to_i} SQL end
copy(*instances)
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 14 def copy(*instances) items = instances.select { |instance| instance.persisted? && copy?(instance) } return unless items.present? delete_existing items insert_replacements items end
Private Instance Methods
columns()
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 28 def columns @columns ||= properties.each_with_object(['id']) do |property, columns| columns << property.name end end
copy?(instance)
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 34 def copy?(instance) index.conditions.empty? || index.conditions.all? { |condition| case condition when Symbol instance.send(condition) when Proc condition.call instance else "Unexpected condition: #{condition}. Expecting Symbol or Proc." end } end
delete_existing(instances)
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 47 def delete_existing(instances) ids = instances.collect(&index.primary_key.to_sym) execute <<~SQL.strip DELETE FROM #{@index.name} WHERE sphinx_internal_id IN (#{ids.join(', ')}) SQL end
execute(sphinxql)
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 55 def execute(sphinxql) ThinkingSphinx::Logger.log :query, sphinxql do ThinkingSphinx::Connection.take do |connection| connection.execute sphinxql end end end
insert_replacements(instances)
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 63 def insert_replacements(instances) insert = Riddle::Query::Insert.new index.name, columns, values(instances) execute insert.replace!.to_sql end
instrument(message, options = {})
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 68 def instrument(message, options = {}) ActiveSupport::Notifications.instrument( "#{message}.thinking_sphinx.real_time", options.merge(:index => index) ) end
properties()
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 74 def properties @properties ||= index.fields + index.attributes end
values(instances)
click to toggle source
# File lib/thinking_sphinx/real_time/transcriber.rb, line 78 def values(instances) instances.each_with_object([]) do |instance, array| begin array << ThinkingSphinx::RealTime::TranscribeInstance.call( instance, index, properties ) rescue ThinkingSphinx::TranscriptionError => error instrument 'error', :error => error end end end