1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
require 'active_record'
prefix = defined?(JRUBY_VERSION) ? "jdbc" : ""
require "active_record/connection_adapters/#{prefix}mysql_adapter"
begin
require "active_record/connection_adapters/#{prefix}postgresql_adapter"
rescue LoadError
# No postgres? no prob...
end
require 'yaml'
class SphinxHelper
attr_accessor :host, :username, :password
attr_reader :path
def initialize
@host = "localhost"
@username = "thinking_sphinx"
@password = ""
if File.exist?("spec/fixtures/database.yml")
config = YAML.load(File.open("spec/fixtures/database.yml"))
@host = config["host"]
@username = config["username"]
@password = config["password"]
end
@path = File.expand_path(File.dirname(__FILE__))
end
def mysql_adapter
defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql'
end
def setup_mysql
ActiveRecord::Base.establish_connection(
:adapter => mysql_adapter,
:database => 'thinking_sphinx',
:username => @username,
:password => @password,
:host => @host
)
ActiveRecord::Base.logger = Logger.new(File.open("tmp/activerecord.log", "a"))
structure = File.open("spec/fixtures/structure.sql") { |f| f.read.chomp }
structure.split(';').each { |table|
ActiveRecord::Base.connection.execute table
}
File.open("spec/fixtures/data.sql") { |f|
while line = f.gets
ActiveRecord::Base.connection.execute line unless line.blank?
end
}
end
def setup_sphinx
@configuration = ThinkingSphinx::Configuration.instance.reset
File.open("spec/fixtures/sphinx/database.yml", "w") do |file|
YAML.dump({@configuration.environment => {
:adapter => mysql_adapter,
:host => @host,
:database => "thinking_sphinx",
:username => @username,
:password => @password
}}, file)
end
FileUtils.mkdir_p(@configuration.searchd_file_path)
@configuration.database_yml_file = "spec/fixtures/sphinx/database.yml"
@configuration.build
index
end
def reset
setup_mysql
end
def index
cmd = "indexer --config #{@configuration.config_file} --all"
cmd << " --rotate" if running?
`#{cmd}`
end
def start
return if running?
cmd = "searchd --config #{@configuration.config_file}"
`#{cmd}`
sleep(1)
unless running?
puts "Failed to start searchd daemon. Check #{@configuration.searchd_log_file}."
end
end
def stop
return unless running?
`kill #{pid}`
end
def pid
if File.exists?("#{@configuration.pid_file}")
`cat #{@configuration.pid_file}`[/\d+/]
else
nil
end
end
def running?
pid && `ps #{pid} | wc -l`.to_i > 1
end
end
|