Module Ultrasphinx
In: lib/ultrasphinx/fields.rb
lib/ultrasphinx/search.rb
lib/ultrasphinx/configure.rb
lib/ultrasphinx/spell.rb
lib/ultrasphinx/ultrasphinx.rb
lib/ultrasphinx/associations.rb
lib/ultrasphinx/search/internals.rb
lib/ultrasphinx/search/parser.rb
lib/ultrasphinx/search.rb
lib/ultrasphinx/spell.rb
lib/ultrasphinx/ultrasphinx.rb

Methods

Classes and Modules

Module Ultrasphinx::Associations
Module Ultrasphinx::DateSelf
Module Ultrasphinx::NumericSelf
Module Ultrasphinx::Spell
Class Ultrasphinx::Configure
Class Ultrasphinx::Fields
Class Ultrasphinx::Search

Constants

SUBDIR = "config/ultrasphinx"   Internal file paths
DIR = "#{RAILS_ROOT}/#{SUBDIR}"
THIS_DIR = File.expand_path(File.dirname(__FILE__))
CONF_PATH = "#{DIR}/#{RAILS_ENV}.conf"
ENV_BASE_PATH = "#{DIR}/#{RAILS_ENV}.base"
GENERIC_BASE_PATH = "#{DIR}/default.base"
BASE_PATH = (File.exist?(ENV_BASE_PATH) ? ENV_BASE_PATH : GENERIC_BASE_PATH)
MAX_INT = 2**32-1   Some miscellaneous constants
MAX_WORDS = 2**16
MAIN_INDEX = "main"
DELTA_INDEX = "delta"
INDEXES = [MAIN_INDEX, DELTA_INDEX]
CONFIG_MAP = { # These must be symbols for key mapping against Rails itself. :username => 'sql_user', :password => 'sql_pass', :host => 'sql_host', :database => 'sql_db', :port => 'sql_port', :socket => 'sql_sock'
CONNECTION_DEFAULTS = { :host => 'localhost', :password => '', :username => 'root'
SQL_FUNCTIONS = { 'mysql' => { 'group_concat' => "CAST(GROUP_CONCAT(DISTINCT ? ? SEPARATOR ' ') AS CHAR)", 'delta' => "DATE_SUB(NOW(), INTERVAL ? SECOND)", 'hash' => "CAST(CRC32(?) AS unsigned)", 'range_cast' => "?"
DEFAULTS = { 'mysql' => %( type = mysql sql_query_pre = SET SESSION group_concat_max_len = 65535 sql_query_pre = SET NAMES utf8 ), 'postgresql' => %( type = pgsql sql_query_pre = )
ADAPTER = ActiveRecord::Base.connection.instance_variable_get("@config")[:adapter] rescue 'mysql'
INDEXER_SETTINGS = options_for('indexer', BASE_PATH)   Introspect on the existing generated conf files.
CLIENT_SETTINGS = options_for('client', BASE_PATH)
DAEMON_SETTINGS = options_for('searchd', BASE_PATH)
SOURCE_SETTINGS = options_for('source', BASE_PATH)
INDEX_SETTINGS = options_for('index', BASE_PATH)
DICTIONARY = CLIENT_SETTINGS['dictionary_name'] || 'ap'
STOPWORDS_PATH = "#{Ultrasphinx::INDEX_SETTINGS['path']}/#{DICTIONARY}-stopwords.txt"
MODEL_CONFIGURATION = {}
SUBDIR = "config/ultrasphinx"   Internal file paths
DIR = "#{RAILS_ROOT}/#{SUBDIR}"
THIS_DIR = File.expand_path(File.dirname(__FILE__))
CONF_PATH = "#{DIR}/#{RAILS_ENV}.conf"
ENV_BASE_PATH = "#{DIR}/#{RAILS_ENV}.base"
GENERIC_BASE_PATH = "#{DIR}/default.base"
BASE_PATH = (File.exist?(ENV_BASE_PATH) ? ENV_BASE_PATH : GENERIC_BASE_PATH)
MAX_INT = 2**32-1   Some miscellaneous constants
MAX_WORDS = 2**16
MAIN_INDEX = "main"
DELTA_INDEX = "delta"
INDEXES = [MAIN_INDEX, DELTA_INDEX]
CONFIG_MAP = { # These must be symbols for key mapping against Rails itself. :username => 'sql_user', :password => 'sql_pass', :host => 'sql_host', :database => 'sql_db', :port => 'sql_port', :socket => 'sql_sock'
CONNECTION_DEFAULTS = { :host => 'localhost', :password => '', :username => 'root'
SQL_FUNCTIONS = { 'mysql' => { 'group_concat' => "CAST(GROUP_CONCAT(DISTINCT ? ? SEPARATOR ' ') AS CHAR)", 'delta' => "DATE_SUB(NOW(), INTERVAL ? SECOND)", 'hash' => "CAST(CRC32(?) AS unsigned)", 'range_cast' => "?"
DEFAULTS = { 'mysql' => %( type = mysql sql_query_pre = SET SESSION group_concat_max_len = 65535 sql_query_pre = SET NAMES utf8 ), 'postgresql' => %( type = pgsql sql_query_pre = )
ADAPTER = ActiveRecord::Base.connection.instance_variable_get("@config")[:adapter] rescue 'mysql'
INDEXER_SETTINGS = options_for('indexer', BASE_PATH)   Introspect on the existing generated conf files.
CLIENT_SETTINGS = options_for('client', BASE_PATH)
DAEMON_SETTINGS = options_for('searchd', BASE_PATH)
SOURCE_SETTINGS = options_for('source', BASE_PATH)
INDEX_SETTINGS = options_for('index', BASE_PATH)
DICTIONARY = CLIENT_SETTINGS['dictionary_name'] || 'ap'
STOPWORDS_PATH = "#{Ultrasphinx::INDEX_SETTINGS['path']}/#{DICTIONARY}-stopwords.txt"
MODEL_CONFIGURATION = {}

Public Class methods

See if a delta index was defined.

[Source]

     # File lib/ultrasphinx/ultrasphinx.rb, line 191
191:   def self.delta_index_present?
192:     if File.exist?(CONF_PATH) 
193:       File.open(CONF_PATH).readlines.detect do |line|
194:         line =~ /^index delta/
195:       end
196:     end
197:   end

See if a delta index was defined.

[Source]

     # File lib/ultrasphinx/ultrasphinx.rb, line 191
191:   def self.delta_index_present?
192:     if File.exist?(CONF_PATH) 
193:       File.open(CONF_PATH).readlines.detect do |line|
194:         line =~ /^index delta/
195:       end
196:     end
197:   end

[Source]

    # File lib/ultrasphinx/ultrasphinx.rb, line 61
61:   def self.load_stored_procedure(name)
62:     open("#{THIS_DIR}/postgresql/#{name}.sql").read.gsub(/\s+/, ' ')
63:   end

[Source]

    # File lib/ultrasphinx/ultrasphinx.rb, line 61
61:   def self.load_stored_procedure(name)
62:     open("#{THIS_DIR}/postgresql/#{name}.sql").read.gsub(/\s+/, ' ')
63:   end

Debug-mode logger.

[Source]

     # File lib/ultrasphinx/ultrasphinx.rb, line 111
111:   def self.log msg
112:     # XXX Method name is stupid.
113:     if defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER
114:       RAILS_DEFAULT_LOGGER.debug msg
115:     else
116:       STDERR.puts msg
117:     end
118:   end

Debug-mode logger.

[Source]

     # File lib/ultrasphinx/ultrasphinx.rb, line 111
111:   def self.log msg
112:     # XXX Method name is stupid.
113:     if defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER
114:       RAILS_DEFAULT_LOGGER.debug msg
115:     else
116:       STDERR.puts msg
117:     end
118:   end

Configuration file parser.

[Source]

     # File lib/ultrasphinx/ultrasphinx.rb, line 121
121:   def self.options_for(heading, path)
122:     # Evaluate ERB
123:     template = ERB.new(File.open(path) {|f| f.read})
124:     contents = template.result(binding)
125:     
126:     # Find the correct heading.
127:     section = contents[/^#{heading.gsub('/', '__')}\s*?\{(.*?)\}/m, 1]
128:     
129:     if section
130:       # Convert to a hash
131:       options = section.split("\n").map do |line|
132:         line =~ /\s*(.*?)\s*=\s*([^\#]*)/
133:         $1 ? [$1, $2.strip] : []
134:       end      
135:       Hash[*options.flatten] 
136:     else
137:       # XXX Is it safe to raise here?
138:       Ultrasphinx.say "warning; heading #{heading} not found in #{path}; it may be corrupted. "
139:       {}    
140:     end    
141:   end

Configuration file parser.

[Source]

     # File lib/ultrasphinx/ultrasphinx.rb, line 121
121:   def self.options_for(heading, path)
122:     # Evaluate ERB
123:     template = ERB.new(File.open(path) {|f| f.read})
124:     contents = template.result(binding)
125:     
126:     # Find the correct heading.
127:     section = contents[/^#{heading.gsub('/', '__')}\s*?\{(.*?)\}/m, 1]
128:     
129:     if section
130:       # Convert to a hash
131:       options = section.split("\n").map do |line|
132:         line =~ /\s*(.*?)\s*=\s*([^\#]*)/
133:         $1 ? [$1, $2.strip] : []
134:       end      
135:       Hash[*options.flatten] 
136:     else
137:       # XXX Is it safe to raise here?
138:       Ultrasphinx.say "warning; heading #{heading} not found in #{path}; it may be corrupted. "
139:       {}    
140:     end    
141:   end

Warn-mode logger. Also called from rake tasks.

[Source]

     # File lib/ultrasphinx/ultrasphinx.rb, line 95
 95:   def self.say msg
 96:     # XXX Method name is stupid.
 97:     if with_rake
 98:       puts msg[0..0].upcase + msg[1..-1]
 99:     else
100:       msg = "** ultrasphinx: #{msg}"
101:       if defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER
102:         RAILS_DEFAULT_LOGGER.warn msg
103:       else
104:         STDERR.puts msg
105:       end
106:     end        
107:     nil # Explicitly return nil
108:   end

Warn-mode logger. Also called from rake tasks.

[Source]

     # File lib/ultrasphinx/ultrasphinx.rb, line 95
 95:   def self.say msg
 96:     # XXX Method name is stupid.
 97:     if with_rake
 98:       puts msg[0..0].upcase + msg[1..-1]
 99:     else
100:       msg = "** ultrasphinx: #{msg}"
101:       if defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER
102:         RAILS_DEFAULT_LOGGER.warn msg
103:       else
104:         STDERR.puts msg
105:       end
106:     end        
107:     nil # Explicitly return nil
108:   end

[Validate]