jaikoo-thinking-sphinx 0.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENCE +20 -0
- data/README +76 -0
- data/lib/thinking_sphinx.rb +112 -0
- data/lib/thinking_sphinx/active_record.rb +153 -0
- data/lib/thinking_sphinx/active_record/delta.rb +80 -0
- data/lib/thinking_sphinx/active_record/has_many_association.rb +29 -0
- data/lib/thinking_sphinx/active_record/search.rb +50 -0
- data/lib/thinking_sphinx/adapters/abstract_adapter.rb +27 -0
- data/lib/thinking_sphinx/adapters/mysql_adapter.rb +9 -0
- data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +84 -0
- data/lib/thinking_sphinx/association.rb +144 -0
- data/lib/thinking_sphinx/attribute.rb +284 -0
- data/lib/thinking_sphinx/collection.rb +105 -0
- data/lib/thinking_sphinx/configuration.rb +314 -0
- data/lib/thinking_sphinx/field.rb +206 -0
- data/lib/thinking_sphinx/index.rb +432 -0
- data/lib/thinking_sphinx/index/builder.rb +220 -0
- data/lib/thinking_sphinx/index/faux_column.rb +110 -0
- data/lib/thinking_sphinx/rails_additions.rb +68 -0
- data/lib/thinking_sphinx/search.rb +436 -0
- data/spec/unit/thinking_sphinx/active_record/delta_spec.rb +132 -0
- data/spec/unit/thinking_sphinx/active_record/has_many_association_spec.rb +53 -0
- data/spec/unit/thinking_sphinx/active_record/search_spec.rb +107 -0
- data/spec/unit/thinking_sphinx/active_record_spec.rb +295 -0
- data/spec/unit/thinking_sphinx/association_spec.rb +247 -0
- data/spec/unit/thinking_sphinx/attribute_spec.rb +360 -0
- data/spec/unit/thinking_sphinx/collection_spec.rb +71 -0
- data/spec/unit/thinking_sphinx/configuration_spec.rb +512 -0
- data/spec/unit/thinking_sphinx/field_spec.rb +224 -0
- data/spec/unit/thinking_sphinx/index/builder_spec.rb +34 -0
- data/spec/unit/thinking_sphinx/index/faux_column_spec.rb +68 -0
- data/spec/unit/thinking_sphinx/index_spec.rb +317 -0
- data/spec/unit/thinking_sphinx/search_spec.rb +203 -0
- data/spec/unit/thinking_sphinx_spec.rb +129 -0
- data/tasks/thinking_sphinx_tasks.rake +1 -0
- data/tasks/thinking_sphinx_tasks.rb +100 -0
- metadata +103 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
require 'will_paginate/collection'
|
|
3
|
+
|
|
4
|
+
describe ThinkingSphinx::Search do
|
|
5
|
+
before :all do
|
|
6
|
+
@sphinx.setup_sphinx
|
|
7
|
+
@sphinx.start
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
after :all do
|
|
11
|
+
@sphinx.stop
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe "search_for_id method" do
|
|
15
|
+
before :each do
|
|
16
|
+
@client = Riddle::Client.stub_instance(
|
|
17
|
+
:filters => [],
|
|
18
|
+
:filters= => true,
|
|
19
|
+
:id_range= => true,
|
|
20
|
+
:query => {
|
|
21
|
+
:matches => []
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
ThinkingSphinx::Search.stub_methods(
|
|
26
|
+
:client_from_options => @client,
|
|
27
|
+
:search_conditions => ["", []]
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should set the client id range to focus on the given id" do
|
|
32
|
+
ThinkingSphinx::Search.search_for_id 42, "an_index"
|
|
33
|
+
|
|
34
|
+
@client.should have_received(:id_range=).with(42..42)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should query on the given index" do
|
|
38
|
+
ThinkingSphinx::Search.search_for_id 42, "an_index"
|
|
39
|
+
|
|
40
|
+
@client.should have_received(:query).with("", "an_index")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should return true if a record is returned" do
|
|
44
|
+
@client.stub_method(:query => {
|
|
45
|
+
:matches => [24]
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
ThinkingSphinx::Search.search_for_id(42, "an_index").should be_true
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should return false if no records are returned" do
|
|
52
|
+
ThinkingSphinx::Search.search_for_id(42, "an_index").should be_false
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe "instance_from_result method" do
|
|
57
|
+
before :each do
|
|
58
|
+
Person.track_methods(:find)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should honour the :include option" do
|
|
62
|
+
ellie = ThinkingSphinx::Search.search("Ellie Ford", :include => :contacts).first
|
|
63
|
+
pending
|
|
64
|
+
Person.should have_received(:find).with(ellie.id, :include => :contacts, :select => nil)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should honour the :select option" do
|
|
68
|
+
ellie = ThinkingSphinx::Search.search("Ellie Ford", :select => "*").first
|
|
69
|
+
pending
|
|
70
|
+
Person.should have_received(:find).with(ellie.id, :include => nil, :select => "*")
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
describe "instances_from_results method" do
|
|
76
|
+
before :each do
|
|
77
|
+
Person.track_methods(:find)
|
|
78
|
+
|
|
79
|
+
@ellie_ids = Person.search_for_ids "Ellie"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should call a find on all ids for the class" do
|
|
83
|
+
Person.search "Ellie"
|
|
84
|
+
|
|
85
|
+
Person.should have_received(:find).with(
|
|
86
|
+
:all,
|
|
87
|
+
:conditions => {:id => @ellie_ids},
|
|
88
|
+
:include => nil,
|
|
89
|
+
:select => nil
|
|
90
|
+
)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should honour the :include option" do
|
|
94
|
+
Person.search "Ellie", :include => :contacts
|
|
95
|
+
|
|
96
|
+
Person.should have_received(:find).with(
|
|
97
|
+
:all,
|
|
98
|
+
:conditions => {:id => @ellie_ids},
|
|
99
|
+
:include => :contacts,
|
|
100
|
+
:select => nil
|
|
101
|
+
)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "should honour the :select option" do
|
|
105
|
+
Person.search "Ellie", :select => "*"
|
|
106
|
+
|
|
107
|
+
Person.should have_received(:find).with(
|
|
108
|
+
:all,
|
|
109
|
+
:conditions => {:id => @ellie_ids},
|
|
110
|
+
:include => nil,
|
|
111
|
+
:select => "*"
|
|
112
|
+
)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
describe "count method" do
|
|
117
|
+
before :each do
|
|
118
|
+
@client = Riddle::Client.stub_instance(
|
|
119
|
+
:filters => [],
|
|
120
|
+
:filters= => true,
|
|
121
|
+
:id_range= => true,
|
|
122
|
+
:sort_mode => :asc,
|
|
123
|
+
:limit => 5,
|
|
124
|
+
:offset= => 0,
|
|
125
|
+
:sort_mode= => true,
|
|
126
|
+
:query => {
|
|
127
|
+
:matches => [],
|
|
128
|
+
:total => 50
|
|
129
|
+
}
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
ThinkingSphinx::Search.stub_methods(
|
|
133
|
+
:client_from_options => @client,
|
|
134
|
+
:search_conditions => ["", []]
|
|
135
|
+
)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "should return query total" do
|
|
139
|
+
ThinkingSphinx::Search.count(42, "an_index").should == 50
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
describe "search result" do
|
|
144
|
+
before :each do
|
|
145
|
+
@results = ThinkingSphinx::Search.search "nothing will match this"
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "should respond to previous_page" do
|
|
149
|
+
@results.should respond_to(:previous_page)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it "should respond to next_page" do
|
|
153
|
+
@results.should respond_to(:next_page)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "should respond to current_page" do
|
|
157
|
+
@results.should respond_to(:current_page)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it "should respond to total_pages" do
|
|
161
|
+
@results.should respond_to(:total_pages)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "should respond to total_entries" do
|
|
165
|
+
@results.should respond_to(:total_entries)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "should respond to offset" do
|
|
169
|
+
@results.should respond_to(:offset)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "should be a subclass of Array" do
|
|
173
|
+
@results.should be_kind_of(Array)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it "should not return results that have been deleted" do
|
|
178
|
+
Alpha.search("one").should_not be_empty
|
|
179
|
+
|
|
180
|
+
alpha = Alpha.find(:first, :conditions => {:name => "one"})
|
|
181
|
+
alpha.destroy
|
|
182
|
+
|
|
183
|
+
Alpha.search("one").should be_empty
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "should still return edited results using old data if there's no delta" do
|
|
187
|
+
Alpha.search("two").should_not be_empty
|
|
188
|
+
|
|
189
|
+
alpha = Alpha.find(:first, :conditions => {:name => "two"})
|
|
190
|
+
alpha.update_attributes(:name => "twelve")
|
|
191
|
+
|
|
192
|
+
Alpha.search("two").should_not be_empty
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
it "should not return edited results using old data if there's a delta" do
|
|
196
|
+
Beta.search("two").should_not be_empty
|
|
197
|
+
|
|
198
|
+
beta = Beta.find(:first, :conditions => {:name => "two"})
|
|
199
|
+
beta.update_attributes(:name => "twelve")
|
|
200
|
+
|
|
201
|
+
Beta.search("two").should be_empty
|
|
202
|
+
end
|
|
203
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ThinkingSphinx do
|
|
4
|
+
describe "indexed_models methods" do
|
|
5
|
+
it "should contain all the names of models that have indexes" do
|
|
6
|
+
ThinkingSphinx.indexed_models.should include("Person")
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should define indexes by default" do
|
|
11
|
+
ThinkingSphinx.define_indexes?.should be_true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should disable index definition" do
|
|
15
|
+
ThinkingSphinx.define_indexes = false
|
|
16
|
+
ThinkingSphinx.define_indexes?.should be_false
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should enable index definition" do
|
|
20
|
+
ThinkingSphinx.define_indexes = false
|
|
21
|
+
ThinkingSphinx.define_indexes?.should be_false
|
|
22
|
+
ThinkingSphinx.define_indexes = true
|
|
23
|
+
ThinkingSphinx.define_indexes?.should be_true
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should index deltas by default" do
|
|
27
|
+
ThinkingSphinx.deltas_enabled = nil
|
|
28
|
+
ThinkingSphinx.deltas_enabled?.should be_true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should disable delta indexing" do
|
|
32
|
+
ThinkingSphinx.deltas_enabled = false
|
|
33
|
+
ThinkingSphinx.deltas_enabled?.should be_false
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should enable delta indexing" do
|
|
37
|
+
ThinkingSphinx.deltas_enabled = false
|
|
38
|
+
ThinkingSphinx.deltas_enabled?.should be_false
|
|
39
|
+
ThinkingSphinx.deltas_enabled = true
|
|
40
|
+
ThinkingSphinx.deltas_enabled?.should be_true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should update indexes by default" do
|
|
44
|
+
ThinkingSphinx.updates_enabled = nil
|
|
45
|
+
ThinkingSphinx.updates_enabled?.should be_true
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should disable index updating" do
|
|
49
|
+
ThinkingSphinx.updates_enabled = false
|
|
50
|
+
ThinkingSphinx.updates_enabled?.should be_false
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should enable index updating" do
|
|
54
|
+
ThinkingSphinx.updates_enabled = false
|
|
55
|
+
ThinkingSphinx.updates_enabled?.should be_false
|
|
56
|
+
ThinkingSphinx.updates_enabled = true
|
|
57
|
+
ThinkingSphinx.updates_enabled?.should be_true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "use_group_by_shortcut? method" do
|
|
61
|
+
after :each do
|
|
62
|
+
::ActiveRecord::Base.connection.unstub_method(:select_all)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should return true if no ONLY_FULL_GROUP_BY" do
|
|
66
|
+
::ActiveRecord::Base.connection.stub_method(
|
|
67
|
+
:select_all => {:a => "OTHER SETTINGS"}
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
ThinkingSphinx.use_group_by_shortcut?.should be_true
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should return true if NULL value" do
|
|
74
|
+
::ActiveRecord::Base.connection.stub_method(
|
|
75
|
+
:select_all => {:a => nil}
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
ThinkingSphinx.use_group_by_shortcut?.should be_true
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should return false if ONLY_FULL_GROUP_BY is set" do
|
|
82
|
+
::ActiveRecord::Base.connection.stub_method(
|
|
83
|
+
:select_all => {:a => "OTHER SETTINGS,ONLY_FULL_GROUP_BY,blah"}
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
ThinkingSphinx.use_group_by_shortcut?.should be_false
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should return false if ONLY_FULL_GROUP_BY is set in any of the values" do
|
|
90
|
+
::ActiveRecord::Base.connection.stub_method(
|
|
91
|
+
:select_all => {
|
|
92
|
+
:a => "OTHER SETTINGS",
|
|
93
|
+
:b => "ONLY_FULL_GROUP_BY"
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
ThinkingSphinx.use_group_by_shortcut?.should be_false
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
describe "if not using MySQL" do
|
|
101
|
+
before :each do
|
|
102
|
+
unless ::ActiveRecord::ConnectionAdapters.const_defined?(:PostgreSQLAdapter)
|
|
103
|
+
pending "No PostgreSQL"
|
|
104
|
+
return
|
|
105
|
+
end
|
|
106
|
+
@connection = ::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.stub_instance(
|
|
107
|
+
:select_all => true
|
|
108
|
+
)
|
|
109
|
+
::ActiveRecord::Base.stub_method(
|
|
110
|
+
:connection => @connection
|
|
111
|
+
)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
after :each do
|
|
115
|
+
::ActiveRecord::Base.unstub_method(:connection)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it "should return false" do
|
|
119
|
+
ThinkingSphinx.use_group_by_shortcut?.should be_false
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should not call select_all" do
|
|
123
|
+
ThinkingSphinx.use_group_by_shortcut?
|
|
124
|
+
|
|
125
|
+
@connection.should_not have_received(:select_all)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'thinking_sphinx_tasks')
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
namespace :thinking_sphinx do
|
|
4
|
+
task :app_env do
|
|
5
|
+
Rake::Task[:environment].invoke if defined?(RAILS_ROOT)
|
|
6
|
+
Rake::Task[:merb_env].invoke if defined?(Merb)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
desc "Stop if running, then start a Sphinx searchd daemon using Thinking Sphinx's settings"
|
|
10
|
+
task :running_start => :app_env do
|
|
11
|
+
Rake::Task["thinking_sphinx:stop"].invoke if sphinx_running?
|
|
12
|
+
Rake::Task["thinking_sphinx:start"].invoke
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc "Start a Sphinx searchd daemon using Thinking Sphinx's settings"
|
|
16
|
+
task :start => :app_env do
|
|
17
|
+
config = ThinkingSphinx::Configuration.instance
|
|
18
|
+
|
|
19
|
+
FileUtils.mkdir_p config.searchd_file_path
|
|
20
|
+
raise RuntimeError, "searchd is already running." if sphinx_running?
|
|
21
|
+
|
|
22
|
+
Dir["#{config.searchd_file_path}/*.spl"].each { |file| File.delete(file) }
|
|
23
|
+
|
|
24
|
+
cmd = "#{config.bin_path}searchd --config #{config.config_file}"
|
|
25
|
+
puts cmd
|
|
26
|
+
system cmd
|
|
27
|
+
|
|
28
|
+
sleep(2)
|
|
29
|
+
|
|
30
|
+
if sphinx_running?
|
|
31
|
+
puts "Started successfully (pid #{sphinx_pid})."
|
|
32
|
+
else
|
|
33
|
+
puts "Failed to start searchd daemon. Check #{config.searchd_log_file}."
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
desc "Stop Sphinx using Thinking Sphinx's settings"
|
|
38
|
+
task :stop => :app_env do
|
|
39
|
+
raise RuntimeError, "searchd is not running." unless sphinx_running?
|
|
40
|
+
pid = sphinx_pid
|
|
41
|
+
system "kill #{pid}"
|
|
42
|
+
puts "Stopped search daemon (pid #{pid})."
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
desc "Restart Sphinx"
|
|
46
|
+
task :restart => [:app_env, :stop, :start]
|
|
47
|
+
|
|
48
|
+
desc "Generate the Sphinx configuration file using Thinking Sphinx's settings"
|
|
49
|
+
task :configure => :app_env do
|
|
50
|
+
config = ThinkingSphinx::Configuration.instance
|
|
51
|
+
puts "Generating Configuration to #{config.config_file}"
|
|
52
|
+
config.build
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
desc "Index data for Sphinx using Thinking Sphinx's settings"
|
|
56
|
+
task :index => :app_env do
|
|
57
|
+
config = ThinkingSphinx::Configuration.instance
|
|
58
|
+
unless ENV["INDEX_ONLY"] == "true"
|
|
59
|
+
puts "Generating Configuration to #{config.config_file}"
|
|
60
|
+
config.build
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
FileUtils.mkdir_p config.searchd_file_path
|
|
64
|
+
cmd = "#{config.bin_path}indexer --config #{config.config_file} --all"
|
|
65
|
+
cmd << " --rotate" if sphinx_running?
|
|
66
|
+
puts cmd
|
|
67
|
+
system cmd
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
namespace :ts do
|
|
72
|
+
desc "Stop if running, then start a Sphinx searchd daemon using Thinking Sphinx's settings"
|
|
73
|
+
task :run => "thinking_sphinx:running_start"
|
|
74
|
+
desc "Start a Sphinx searchd daemon using Thinking Sphinx's settings"
|
|
75
|
+
task :start => "thinking_sphinx:start"
|
|
76
|
+
desc "Stop Sphinx using Thinking Sphinx's settings"
|
|
77
|
+
task :stop => "thinking_sphinx:stop"
|
|
78
|
+
desc "Index data for Sphinx using Thinking Sphinx's settings"
|
|
79
|
+
task :in => "thinking_sphinx:index"
|
|
80
|
+
desc "Index data for Sphinx using Thinking Sphinx's settings"
|
|
81
|
+
task :index => "thinking_sphinx:index"
|
|
82
|
+
desc "Restart Sphinx"
|
|
83
|
+
task :restart => "thinking_sphinx:restart"
|
|
84
|
+
desc "Generate the Sphinx configuration file using Thinking Sphinx's settings"
|
|
85
|
+
task :config => "thinking_sphinx:configure"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def sphinx_pid
|
|
89
|
+
config = ThinkingSphinx::Configuration.instance
|
|
90
|
+
|
|
91
|
+
if File.exists?(config.pid_file)
|
|
92
|
+
`cat #{config.pid_file}`[/\d+/]
|
|
93
|
+
else
|
|
94
|
+
nil
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def sphinx_running?
|
|
99
|
+
sphinx_pid && `ps -p #{sphinx_pid} | wc -l`.to_i > 1
|
|
100
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: jaikoo-thinking-sphinx
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.9.10
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Pat Allan
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2008-10-18 00:00:00 -07:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
description: A concise and easy-to-use Ruby library that connects ActiveRecord to the Sphinx search daemon, managing configuration, indexing and searching.
|
|
17
|
+
email: pat@freelancing-gods.com
|
|
18
|
+
executables: []
|
|
19
|
+
|
|
20
|
+
extensions: []
|
|
21
|
+
|
|
22
|
+
extra_rdoc_files: []
|
|
23
|
+
|
|
24
|
+
files:
|
|
25
|
+
- lib/thinking_sphinx/active_record/delta.rb
|
|
26
|
+
- lib/thinking_sphinx/active_record/has_many_association.rb
|
|
27
|
+
- lib/thinking_sphinx/active_record/search.rb
|
|
28
|
+
- lib/thinking_sphinx/active_record.rb
|
|
29
|
+
- lib/thinking_sphinx/adapters/abstract_adapter.rb
|
|
30
|
+
- lib/thinking_sphinx/adapters/mysql_adapter.rb
|
|
31
|
+
- lib/thinking_sphinx/adapters/postgresql_adapter.rb
|
|
32
|
+
- lib/thinking_sphinx/association.rb
|
|
33
|
+
- lib/thinking_sphinx/attribute.rb
|
|
34
|
+
- lib/thinking_sphinx/collection.rb
|
|
35
|
+
- lib/thinking_sphinx/configuration.rb
|
|
36
|
+
- lib/thinking_sphinx/field.rb
|
|
37
|
+
- lib/thinking_sphinx/index/builder.rb
|
|
38
|
+
- lib/thinking_sphinx/index/faux_column.rb
|
|
39
|
+
- lib/thinking_sphinx/index.rb
|
|
40
|
+
- lib/thinking_sphinx/rails_additions.rb
|
|
41
|
+
- lib/thinking_sphinx/search.rb
|
|
42
|
+
- lib/thinking_sphinx.rb
|
|
43
|
+
- LICENCE
|
|
44
|
+
- README
|
|
45
|
+
- tasks/thinking_sphinx_tasks.rb
|
|
46
|
+
- tasks/thinking_sphinx_tasks.rake
|
|
47
|
+
- spec/unit/thinking_sphinx/active_record/delta_spec.rb
|
|
48
|
+
- spec/unit/thinking_sphinx/active_record/has_many_association_spec.rb
|
|
49
|
+
- spec/unit/thinking_sphinx/active_record/search_spec.rb
|
|
50
|
+
- spec/unit/thinking_sphinx/active_record_spec.rb
|
|
51
|
+
- spec/unit/thinking_sphinx/association_spec.rb
|
|
52
|
+
- spec/unit/thinking_sphinx/attribute_spec.rb
|
|
53
|
+
- spec/unit/thinking_sphinx/collection_spec.rb
|
|
54
|
+
- spec/unit/thinking_sphinx/configuration_spec.rb
|
|
55
|
+
- spec/unit/thinking_sphinx/field_spec.rb
|
|
56
|
+
- spec/unit/thinking_sphinx/index/builder_spec.rb
|
|
57
|
+
- spec/unit/thinking_sphinx/index/faux_column_spec.rb
|
|
58
|
+
- spec/unit/thinking_sphinx/index_spec.rb
|
|
59
|
+
- spec/unit/thinking_sphinx/search_spec.rb
|
|
60
|
+
- spec/unit/thinking_sphinx_spec.rb
|
|
61
|
+
has_rdoc: true
|
|
62
|
+
homepage: http://ts.freelancing-gods.com
|
|
63
|
+
post_install_message:
|
|
64
|
+
rdoc_options:
|
|
65
|
+
- --title
|
|
66
|
+
- Thinking Sphinx -- Rails/Merb Sphinx Plugin
|
|
67
|
+
- --line-numbers
|
|
68
|
+
require_paths:
|
|
69
|
+
- lib
|
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: "0"
|
|
75
|
+
version:
|
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
|
+
requirements:
|
|
78
|
+
- - ">="
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: "0"
|
|
81
|
+
version:
|
|
82
|
+
requirements: []
|
|
83
|
+
|
|
84
|
+
rubyforge_project: thinking-sphinx
|
|
85
|
+
rubygems_version: 1.2.0
|
|
86
|
+
signing_key:
|
|
87
|
+
specification_version: 2
|
|
88
|
+
summary: A concise and easy-to-use Ruby library that connects ActiveRecord to the Sphinx search daemon, managing configuration, indexing and searching.
|
|
89
|
+
test_files:
|
|
90
|
+
- spec/unit/thinking_sphinx/active_record/delta_spec.rb
|
|
91
|
+
- spec/unit/thinking_sphinx/active_record/has_many_association_spec.rb
|
|
92
|
+
- spec/unit/thinking_sphinx/active_record/search_spec.rb
|
|
93
|
+
- spec/unit/thinking_sphinx/active_record_spec.rb
|
|
94
|
+
- spec/unit/thinking_sphinx/association_spec.rb
|
|
95
|
+
- spec/unit/thinking_sphinx/attribute_spec.rb
|
|
96
|
+
- spec/unit/thinking_sphinx/collection_spec.rb
|
|
97
|
+
- spec/unit/thinking_sphinx/configuration_spec.rb
|
|
98
|
+
- spec/unit/thinking_sphinx/field_spec.rb
|
|
99
|
+
- spec/unit/thinking_sphinx/index/builder_spec.rb
|
|
100
|
+
- spec/unit/thinking_sphinx/index/faux_column_spec.rb
|
|
101
|
+
- spec/unit/thinking_sphinx/index_spec.rb
|
|
102
|
+
- spec/unit/thinking_sphinx/search_spec.rb
|
|
103
|
+
- spec/unit/thinking_sphinx_spec.rb
|