lib/thinking_sphinx.rb in ebeigarts-thinking-sphinx-1.1.22 vs lib/thinking_sphinx.rb in ebeigarts-thinking-sphinx-1.2.10

- old
+ new

@@ -3,26 +3,29 @@ end require 'active_record' require 'riddle' require 'after_commit' +require 'yaml' +require 'thinking_sphinx/core/array' require 'thinking_sphinx/core/string' require 'thinking_sphinx/property' require 'thinking_sphinx/active_record' require 'thinking_sphinx/association' require 'thinking_sphinx/attribute' -require 'thinking_sphinx/collection' require 'thinking_sphinx/configuration' +require 'thinking_sphinx/excerpter' require 'thinking_sphinx/facet' require 'thinking_sphinx/class_facet' -require 'thinking_sphinx/facet_collection' +require 'thinking_sphinx/facet_search' require 'thinking_sphinx/field' require 'thinking_sphinx/index' require 'thinking_sphinx/source' require 'thinking_sphinx/rails_additions' require 'thinking_sphinx/search' +require 'thinking_sphinx/search_methods' require 'thinking_sphinx/deltas' require 'thinking_sphinx/adapters/abstract_adapter' require 'thinking_sphinx/adapters/mysql_adapter' require 'thinking_sphinx/adapters/postgresql_adapter' @@ -34,184 +37,177 @@ Merb::Plugins.add_rakefiles( File.join(File.dirname(__FILE__), "thinking_sphinx", "tasks") ) if defined?(Merb) module ThinkingSphinx - module Version #:nodoc: - Major = 1 - Minor = 1 - Tiny = 22 - - String = [Major, Minor, Tiny].join('.') - end - # A ConnectionError will get thrown when a connection to Sphinx can't be # made. class ConnectionError < StandardError end - + # A StaleIdsException is thrown by Collection.instances_from_matches if there # are records in Sphinx but not in the database, so the search can be retried. class StaleIdsException < StandardError attr_accessor :ids def initialize(ids) self.ids = ids end end + # The current version of Thinking Sphinx. + # + # @return [String] The version number as a string + # + def self.version + hash = YAML.load_file File.join(File.dirname(__FILE__), '../VERSION.yml') + [hash[:major], hash[:minor], hash[:patch]].join('.') + end + # The collection of indexed models. Keep in mind that Rails lazily loads # its classes, so this may not actually be populated with _all_ the models # that have Sphinx indexes. def self.indexed_models @@indexed_models ||= [] end - + def self.unique_id_expression(offset = nil) "* #{ThinkingSphinx.indexed_models.size} + #{offset || 0}" end - + # Check if index definition is disabled. - # + # def self.define_indexes? @@define_indexes = true unless defined?(@@define_indexes) @@define_indexes == true end - + # Enable/disable indexes - you may want to do this while migrating data. - # + # # ThinkingSphinx.define_indexes = false - # + # def self.define_indexes=(value) @@define_indexes = value end - + @@deltas_enabled = nil # Check if delta indexing is enabled. - # + # def self.deltas_enabled? @@deltas_enabled = (ThinkingSphinx::Configuration.environment != 'test') if @@deltas_enabled.nil? @@deltas_enabled end - + # Enable/disable all delta indexing. # # ThinkingSphinx.deltas_enabled = false # def self.deltas_enabled=(value) @@deltas_enabled = value end - + @@updates_enabled = nil - + # Check if updates are enabled. True by default, unless within the test # environment. - # + # def self.updates_enabled? @@updates_enabled = (ThinkingSphinx::Configuration.environment != 'test') if @@updates_enabled.nil? @@updates_enabled end - + # Enable/disable updates to Sphinx - # + # # ThinkingSphinx.updates_enabled = false # def self.updates_enabled=(value) @@updates_enabled = value end - + @@suppress_delta_output = false - + def self.suppress_delta_output? @@suppress_delta_output end - + def self.suppress_delta_output=(value) @@suppress_delta_output = value end - + # Checks to see if MySQL will allow simplistic GROUP BY statements. If not, # or if not using MySQL, this will return false. - # + # def self.use_group_by_shortcut? !!( mysql? && ::ActiveRecord::Base.connection.select_all( "SELECT @@global.sql_mode, @@session.sql_mode;" ).all? { |key,value| value.nil? || value[/ONLY_FULL_GROUP_BY/].nil? } ) end - + @@remote_sphinx = false - + # An indication of whether Sphinx is running on a remote machine instead of # the same machine. - # + # def self.remote_sphinx? @@remote_sphinx end - + # Tells Thinking Sphinx that Sphinx is running on a different machine, and - # thus it can't reliably guess whether it is running or not (ie: the + # thus it can't reliably guess whether it is running or not (ie: the # #sphinx_running? method), and so just assumes it is. - # + # # Useful for multi-machine deployments. Set it in your production.rb file. - # + # # ThinkingSphinx.remote_sphinx = true - # + # def self.remote_sphinx=(value) @@remote_sphinx = value end - + # Check if Sphinx is running. If remote_sphinx is set to true (indicating # Sphinx is on a different machine), this will always return true, and you # will have to handle any connection errors yourself. - # + # def self.sphinx_running? remote_sphinx? || sphinx_running_by_pid? end - + # Check if Sphinx is actually running, provided the pid is on the same # machine as this code. - # + # def self.sphinx_running_by_pid? !!sphinx_pid && pid_active?(sphinx_pid) end - + def self.sphinx_pid - pid_file = ThinkingSphinx::Configuration.instance.pid_file - cat_command = 'cat' - return nil unless File.exists?(pid_file) - - if microsoft? - pid_file.gsub!('/', '\\') - cat_command = 'type' + if File.exists?(ThinkingSphinx::Configuration.instance.pid_file) + File.read(ThinkingSphinx::Configuration.instance.pid_file)[/\d+/] + else + nil end - - `#{cat_command} #{pid_file}`[/\d+/] end - + def self.pid_active?(pid) - return true if microsoft? - - begin - # In JRuby this returns -1 if the process doesn't exist - Process.getpgid(pid.to_i) != -1 - rescue Exception => e - false - end + !!Process.kill(0, pid.to_i) + rescue Exception => e + false end - + def self.microsoft? RUBY_PLATFORM =~ /mswin/ end - + def self.jruby? defined?(JRUBY_VERSION) end - + def self.mysql? ::ActiveRecord::Base.connection.class.name.demodulize == "MysqlAdapter" || ::ActiveRecord::Base.connection.class.name.demodulize == "MysqlplusAdapter" || ( jruby? && ::ActiveRecord::Base.connection.config[:adapter] == "jdbcmysql" ) end + + extend ThinkingSphinx::SearchMethods::ClassMethods end