thinking-sphinx 2.0.13 → 2.0.14
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/HISTORY +14 -0
- data/README.textile +2 -0
- data/lib/thinking_sphinx.rb +1 -0
- data/lib/thinking_sphinx/active_record.rb +2 -3
- data/lib/thinking_sphinx/active_record/delta.rb +11 -9
- data/lib/thinking_sphinx/auto_version.rb +1 -1
- data/lib/thinking_sphinx/configuration.rb +1 -1
- data/lib/thinking_sphinx/context.rb +7 -2
- data/lib/thinking_sphinx/facet.rb +8 -1
- data/lib/thinking_sphinx/index/builder.rb +20 -17
- data/lib/thinking_sphinx/search.rb +2 -2
- data/lib/thinking_sphinx/version.rb +1 -1
- data/spec/thinking_sphinx/active_record/delta_spec.rb +0 -6
- data/spec/thinking_sphinx/active_record_spec.rb +0 -19
- data/spec/thinking_sphinx/context_spec.rb +4 -3
- data/spec/thinking_sphinx/search_spec.rb +3 -3
- metadata +31 -30
data/HISTORY
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
2.0.14 - January 2nd 2012
|
|
2
|
+
* Fix model loading for Rails 3.2.9 when subdirectories exist (Kenn Ejima).
|
|
3
|
+
* Use BasicObject instead of BlankSlate when running on 1.9 (Steve Purcell).
|
|
4
|
+
* 1.4.14 changes.
|
|
5
|
+
|
|
1
6
|
2.0.13 - August 10th 2012
|
|
2
7
|
* 1.4.13 changes.
|
|
3
8
|
|
|
@@ -64,6 +69,15 @@
|
|
|
64
69
|
* Rails 3 support.
|
|
65
70
|
* 1.4.0 changes.
|
|
66
71
|
|
|
72
|
+
1.4.14 - January 2nd 2013
|
|
73
|
+
* Allow sql_query_pre values to come through from config/sphinx.yml (George Ogata).
|
|
74
|
+
* ThinkingSphinx::Search#tap doesn't delegate through to the underlying array.
|
|
75
|
+
* Use fire_delta? instance method in the model (if it exists) to decide whether indexing should happen.
|
|
76
|
+
* Use full query in excerpts so double-stemming of terms is avoided (Jason Rust).
|
|
77
|
+
* Fix thinking_sphinx:version rake task.
|
|
78
|
+
* Directly compare non-string non-nil facet values for facet filters.
|
|
79
|
+
* Don't bother checking with Sphinx whether documents exist when trying to update them. We're catching failures already (and Sphinx usually doesn't care anyway).
|
|
80
|
+
|
|
67
81
|
1.4.13 - August 10th 2012
|
|
68
82
|
* Sphinx 2.0.5 support.
|
|
69
83
|
* Hard retries for Sphinx exceptions (Andrew Hunter).
|
data/README.textile
CHANGED
data/lib/thinking_sphinx.rb
CHANGED
|
@@ -23,6 +23,7 @@ require 'thinking_sphinx/source'
|
|
|
23
23
|
require 'thinking_sphinx/search'
|
|
24
24
|
require 'thinking_sphinx/search_methods'
|
|
25
25
|
require 'thinking_sphinx/deltas'
|
|
26
|
+
require 'thinking_sphinx/version'
|
|
26
27
|
|
|
27
28
|
require 'thinking_sphinx/adapters/abstract_adapter'
|
|
28
29
|
require 'thinking_sphinx/adapters/mysql_adapter'
|
|
@@ -268,14 +268,13 @@ module ThinkingSphinx
|
|
|
268
268
|
end
|
|
269
269
|
|
|
270
270
|
def delete_in_index(index, document_id)
|
|
271
|
-
return unless ThinkingSphinx.sphinx_running?
|
|
272
|
-
search_for_id(document_id, index)
|
|
271
|
+
return unless ThinkingSphinx.sphinx_running?
|
|
273
272
|
|
|
274
273
|
ThinkingSphinx::Configuration.instance.client.update(
|
|
275
274
|
index, ['sphinx_deleted'], {document_id => [1]}
|
|
276
275
|
)
|
|
277
276
|
rescue Riddle::ConnectionError, Riddle::ResponseError,
|
|
278
|
-
ThinkingSphinx::SphinxError, Errno::ETIMEDOUT
|
|
277
|
+
ThinkingSphinx::SphinxError, Errno::ETIMEDOUT, Timeout::Error
|
|
279
278
|
# Not the end of the world if Sphinx isn't running.
|
|
280
279
|
end
|
|
281
280
|
|
|
@@ -3,7 +3,7 @@ module ThinkingSphinx
|
|
|
3
3
|
# This module contains all the delta-related code for models. There isn't
|
|
4
4
|
# really anything you need to call manually in here - except perhaps
|
|
5
5
|
# index_delta, but not sure what reason why.
|
|
6
|
-
#
|
|
6
|
+
#
|
|
7
7
|
module Delta
|
|
8
8
|
# Code for after_commit callback is written by Eli Miller:
|
|
9
9
|
# http://elimiller.blogspot.com/2007/06/proper-cache-expiry-with-aftercommit.html
|
|
@@ -18,38 +18,40 @@ module ThinkingSphinx
|
|
|
18
18
|
def index_delta(instance = nil)
|
|
19
19
|
delta_objects.each { |obj| obj.index(self, instance) }
|
|
20
20
|
end
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
def delta_objects
|
|
23
23
|
self.sphinx_indexes.collect(&:delta_object).compact
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
def toggled_delta?
|
|
28
28
|
self.class.delta_objects.any? { |obj| obj.toggled(self) }
|
|
29
29
|
end
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
private
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
# Set the delta value for the model to be true.
|
|
34
34
|
def toggle_delta
|
|
35
35
|
self.class.delta_objects.each { |obj|
|
|
36
36
|
obj.toggle(self)
|
|
37
37
|
} if should_toggle_delta?
|
|
38
38
|
end
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
# Build the delta index for the related model. This won't be called
|
|
41
41
|
# if running in the test environment.
|
|
42
|
-
#
|
|
42
|
+
#
|
|
43
43
|
def index_delta
|
|
44
44
|
self.class.index_delta(self) if self.class.delta_objects.any? { |obj|
|
|
45
45
|
obj.toggled(self)
|
|
46
46
|
}
|
|
47
47
|
end
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
def should_toggle_delta?
|
|
50
|
+
return fire_delta? if respond_to?(:fire_delta?)
|
|
51
|
+
|
|
50
52
|
self.new_record? || indexed_data_changed?
|
|
51
53
|
end
|
|
52
|
-
|
|
54
|
+
|
|
53
55
|
def indexed_data_changed?
|
|
54
56
|
sphinx_indexes.any? { |index|
|
|
55
57
|
index.fields.any? { |field| field.changed?(self) } ||
|
|
@@ -14,7 +14,7 @@ module ThinkingSphinx
|
|
|
14
14
|
else
|
|
15
15
|
documentation_link = %Q{
|
|
16
16
|
For more information, read the documentation:
|
|
17
|
-
http://
|
|
17
|
+
http://pat.github.com/ts/en/advanced_config.html
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
if version.nil? || version.empty?
|
|
@@ -53,7 +53,7 @@ module ThinkingSphinx
|
|
|
53
53
|
|
|
54
54
|
SourceOptions = Riddle::Configuration::SQLSource.settings.map { |setting|
|
|
55
55
|
setting.to_s
|
|
56
|
-
} - %w( type
|
|
56
|
+
} - %w( type sql_query sql_joined_field sql_file_field
|
|
57
57
|
sql_query_range sql_attr_uint sql_attr_bool sql_attr_bigint sql_query_info
|
|
58
58
|
sql_attr_timestamp sql_attr_str2ordinal sql_attr_float sql_attr_multi
|
|
59
59
|
sql_attr_string sql_attr_str2wordcount sql_column_buffers sql_field_string
|
|
@@ -62,9 +62,14 @@ class ThinkingSphinx::Context
|
|
|
62
62
|
|
|
63
63
|
begin
|
|
64
64
|
camelized_model.constantize
|
|
65
|
-
rescue LoadError
|
|
65
|
+
rescue LoadError, NameError
|
|
66
66
|
# Make sure that STI subclasses in subfolders are loaded.
|
|
67
|
-
|
|
67
|
+
if camelized_model.gsub!(/.+::/, '').nil?
|
|
68
|
+
STDERR.puts "ThinkingSphinx: error loading #{file}"
|
|
69
|
+
next
|
|
70
|
+
else
|
|
71
|
+
retry
|
|
72
|
+
end
|
|
68
73
|
rescue Exception => err
|
|
69
74
|
STDERR.puts "Warning: Error loading #{file}:"
|
|
70
75
|
STDERR.puts err.message
|
|
@@ -104,7 +104,14 @@ module ThinkingSphinx
|
|
|
104
104
|
method = value_source || column.__name
|
|
105
105
|
object = objects.one? ? objects.first : objects.detect { |item|
|
|
106
106
|
result = item.send(method)
|
|
107
|
-
|
|
107
|
+
case result
|
|
108
|
+
when String
|
|
109
|
+
result.to_crc32 == attribute_value
|
|
110
|
+
when NilClass
|
|
111
|
+
false
|
|
112
|
+
else
|
|
113
|
+
result == attribute_value
|
|
114
|
+
end
|
|
108
115
|
}
|
|
109
116
|
|
|
110
117
|
object.try(method)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require 'blankslate'
|
|
1
|
+
require 'blankslate' unless defined?(::BasicObject)
|
|
2
2
|
|
|
3
3
|
module ThinkingSphinx
|
|
4
4
|
class Index
|
|
@@ -14,14 +14,14 @@ module ThinkingSphinx
|
|
|
14
14
|
# set_property allows you to set some settings on a per-index basis. Check
|
|
15
15
|
# out each method's documentation for better ideas of usage.
|
|
16
16
|
#
|
|
17
|
-
class Builder < BlankSlate
|
|
17
|
+
class Builder < (defined?(::BasicObject) ? ::BasicObject : BlankSlate)
|
|
18
18
|
def self.generate(model, name = nil, &block)
|
|
19
|
-
index = ThinkingSphinx::Index.new(model)
|
|
19
|
+
index = ::ThinkingSphinx::Index.new(model)
|
|
20
20
|
index.name = name unless name.nil?
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
new(index, &block) if block_given?
|
|
23
23
|
|
|
24
|
-
index.delta_object = ThinkingSphinx::Deltas.parse index
|
|
24
|
+
index.delta_object = ::ThinkingSphinx::Deltas.parse index
|
|
25
25
|
index
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -38,7 +38,7 @@ module ThinkingSphinx
|
|
|
38
38
|
|
|
39
39
|
def define_source(&block)
|
|
40
40
|
if @explicit_source
|
|
41
|
-
@source = ThinkingSphinx::Source.new(@index)
|
|
41
|
+
@source = ::ThinkingSphinx::Source.new(@index)
|
|
42
42
|
@index.sources << @source
|
|
43
43
|
else
|
|
44
44
|
@explicit_source = true
|
|
@@ -101,7 +101,8 @@ module ThinkingSphinx
|
|
|
101
101
|
def indexes(*args)
|
|
102
102
|
options = args.extract_options!
|
|
103
103
|
args.each do |columns|
|
|
104
|
-
field = Field.new(source,
|
|
104
|
+
field = ::ThinkingSphinx::Field.new(source,
|
|
105
|
+
::ThinkingSphinx::Index::FauxColumn.coerce(columns), options)
|
|
105
106
|
|
|
106
107
|
add_sort_attribute field, options if field.sortable
|
|
107
108
|
add_facet_attribute field, options if field.faceted
|
|
@@ -147,7 +148,8 @@ module ThinkingSphinx
|
|
|
147
148
|
def has(*args)
|
|
148
149
|
options = args.extract_options!
|
|
149
150
|
args.each do |columns|
|
|
150
|
-
attribute = Attribute.new(source,
|
|
151
|
+
attribute = ::ThinkingSphinx::Attribute.new(source,
|
|
152
|
+
::ThinkingSphinx::Index::FauxColumn.coerce(columns), options)
|
|
151
153
|
|
|
152
154
|
add_facet_attribute attribute, options if attribute.faceted
|
|
153
155
|
end
|
|
@@ -158,7 +160,8 @@ module ThinkingSphinx
|
|
|
158
160
|
options[:facet] = true
|
|
159
161
|
|
|
160
162
|
args.each do |columns|
|
|
161
|
-
attribute = Attribute.new(source,
|
|
163
|
+
attribute = ::ThinkingSphinx::Attribute.new(source,
|
|
164
|
+
::ThinkingSphinx::Index::FauxColumn.coerce(columns), options)
|
|
162
165
|
|
|
163
166
|
add_facet_attribute attribute, options
|
|
164
167
|
end
|
|
@@ -166,7 +169,7 @@ module ThinkingSphinx
|
|
|
166
169
|
|
|
167
170
|
def join(*args)
|
|
168
171
|
args.each do |association|
|
|
169
|
-
Join.new(source, association)
|
|
172
|
+
::ThinkingSphinx::Join.new(source, association)
|
|
170
173
|
end
|
|
171
174
|
end
|
|
172
175
|
|
|
@@ -238,7 +241,7 @@ module ThinkingSphinx
|
|
|
238
241
|
# definitions.
|
|
239
242
|
#
|
|
240
243
|
def method_missing(method, *args)
|
|
241
|
-
FauxColumn.new(method, *args)
|
|
244
|
+
::ThinkingSphinx::Index::FauxColumn.new(method, *args)
|
|
242
245
|
end
|
|
243
246
|
|
|
244
247
|
# A method to allow adding fields from associations which have names
|
|
@@ -248,7 +251,7 @@ module ThinkingSphinx
|
|
|
248
251
|
# Example: indexes assoc(:properties).column
|
|
249
252
|
#
|
|
250
253
|
def assoc(assoc, *args)
|
|
251
|
-
FauxColumn.new(assoc, *args)
|
|
254
|
+
::ThinkingSphinx::Index::FauxColumn.new(assoc, *args)
|
|
252
255
|
end
|
|
253
256
|
|
|
254
257
|
# Use this method to generate SQL for your attributes, conditions, etc.
|
|
@@ -265,14 +268,14 @@ module ThinkingSphinx
|
|
|
265
268
|
|
|
266
269
|
def source
|
|
267
270
|
@source ||= begin
|
|
268
|
-
source = ThinkingSphinx::Source.new(@index)
|
|
271
|
+
source = ::ThinkingSphinx::Source.new(@index)
|
|
269
272
|
@index.sources << source
|
|
270
273
|
source
|
|
271
274
|
end
|
|
272
275
|
end
|
|
273
276
|
|
|
274
277
|
def set_single_property(key, value)
|
|
275
|
-
source_options = ThinkingSphinx::Configuration::SourceOptions
|
|
278
|
+
source_options = ::ThinkingSphinx::Configuration::SourceOptions
|
|
276
279
|
if source_options.include?(key.to_s)
|
|
277
280
|
source.options.merge! key => value
|
|
278
281
|
else
|
|
@@ -290,12 +293,12 @@ module ThinkingSphinx
|
|
|
290
293
|
end
|
|
291
294
|
|
|
292
295
|
def add_internal_attribute(property, options, suffix, crc = false)
|
|
293
|
-
return unless ThinkingSphinx::Facet.translate?(property)
|
|
296
|
+
return unless ::ThinkingSphinx::Facet.translate?(property)
|
|
294
297
|
|
|
295
|
-
Attribute.new(source,
|
|
298
|
+
::ThinkingSphinx::Attribute.new(source,
|
|
296
299
|
property.columns.collect { |col| col.clone },
|
|
297
300
|
options.merge(
|
|
298
|
-
:type => property.is_a?(Field) ? :string : options[:type],
|
|
301
|
+
:type => property.is_a?(::ThinkingSphinx::Field) ? :string : options[:type],
|
|
299
302
|
:as => property.unique_name.to_s.concat(suffix).to_sym,
|
|
300
303
|
:crc => crc
|
|
301
304
|
).except(:facet)
|
|
@@ -12,7 +12,7 @@ module ThinkingSphinx
|
|
|
12
12
|
instance_of? instance_values instance_variable_defined?
|
|
13
13
|
instance_variable_get instance_variable_set instance_variables is_a?
|
|
14
14
|
kind_of? member? method methods nil? object_id respond_to?
|
|
15
|
-
respond_to_missing? send should type )
|
|
15
|
+
respond_to_missing? send should tap type )
|
|
16
16
|
SafeMethods = %w( partition private_methods protected_methods
|
|
17
17
|
public_methods send class )
|
|
18
18
|
|
|
@@ -362,7 +362,7 @@ module ThinkingSphinx
|
|
|
362
362
|
client.excerpts(
|
|
363
363
|
{
|
|
364
364
|
:docs => [string.to_s],
|
|
365
|
-
:words =>
|
|
365
|
+
:words => query,
|
|
366
366
|
:index => index.split(',').first.strip
|
|
367
367
|
}.merge(options[:excerpt_options] || {})
|
|
368
368
|
).first
|
|
@@ -112,12 +112,6 @@ describe "ThinkingSphinx::ActiveRecord::Delta" do
|
|
|
112
112
|
@person.send(:index_delta)
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
it "shouldn't update the deleted attribute if not in the index" do
|
|
116
|
-
@client.should_not_receive(:update)
|
|
117
|
-
|
|
118
|
-
@person.send(:index_delta)
|
|
119
|
-
end
|
|
120
|
-
|
|
121
115
|
it "should update the deleted attribute if in the core index" do
|
|
122
116
|
Person.stub!(:search_for_id => true)
|
|
123
117
|
@client.should_receive(:update)
|
|
@@ -273,7 +273,6 @@ describe ThinkingSphinx::ActiveRecord do
|
|
|
273
273
|
|
|
274
274
|
@configuration.stub!(:client => @client)
|
|
275
275
|
Person.sphinx_indexes.each { |index| index.stub!(:delta? => false) }
|
|
276
|
-
Person.stub!(:search_for_id => true)
|
|
277
276
|
end
|
|
278
277
|
|
|
279
278
|
it "should update the core index's deleted flag if in core index" do
|
|
@@ -284,19 +283,9 @@ describe ThinkingSphinx::ActiveRecord do
|
|
|
284
283
|
@person.toggle_deleted
|
|
285
284
|
end
|
|
286
285
|
|
|
287
|
-
it "shouldn't update the core index's deleted flag if the record isn't in it" do
|
|
288
|
-
Person.stub!(:search_for_id => false)
|
|
289
|
-
@client.should_not_receive(:update).with(
|
|
290
|
-
"person_core", ["sphinx_deleted"], {@person.sphinx_document_id => [1]}
|
|
291
|
-
)
|
|
292
|
-
|
|
293
|
-
@person.toggle_deleted
|
|
294
|
-
end
|
|
295
|
-
|
|
296
286
|
it "shouldn't attempt to update the deleted flag if sphinx isn't running" do
|
|
297
287
|
ThinkingSphinx.stub!(:sphinx_running? => false)
|
|
298
288
|
@client.should_not_receive(:update)
|
|
299
|
-
Person.should_not_receive(:search_for_id)
|
|
300
289
|
|
|
301
290
|
@person.toggle_deleted
|
|
302
291
|
end
|
|
@@ -493,14 +482,6 @@ describe ThinkingSphinx::ActiveRecord do
|
|
|
493
482
|
@client = stub('client')
|
|
494
483
|
ThinkingSphinx.stub!(:sphinx_running? => true)
|
|
495
484
|
ThinkingSphinx::Configuration.instance.stub!(:client => @client)
|
|
496
|
-
Alpha.stub!(:search_for_id => true)
|
|
497
|
-
end
|
|
498
|
-
|
|
499
|
-
it "should not update if the document isn't in the given index" do
|
|
500
|
-
Alpha.stub!(:search_for_id => false)
|
|
501
|
-
@client.should_not_receive(:update)
|
|
502
|
-
|
|
503
|
-
Alpha.delete_in_index('alpha_core', 42)
|
|
504
485
|
end
|
|
505
486
|
|
|
506
487
|
it "should direct the update to the supplied index" do
|
|
@@ -34,16 +34,17 @@ describe ThinkingSphinx::Context do
|
|
|
34
34
|
it "should report name errors but not raise them" do
|
|
35
35
|
class_name.stub(:constantize).and_raise(NameError)
|
|
36
36
|
STDERR.stub!(:puts => '')
|
|
37
|
-
STDERR.should_receive(:puts).with('
|
|
37
|
+
STDERR.should_receive(:puts).with('ThinkingSphinx: error loading a.rb')
|
|
38
38
|
|
|
39
39
|
lambda {
|
|
40
40
|
ts_context.prepare
|
|
41
41
|
}.should_not raise_error
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
it "should
|
|
45
|
-
model_name_lower.should_receive(:gsub!).twice.and_return(true, nil)
|
|
44
|
+
it "should report load errors but not raise them" do
|
|
46
45
|
class_name.stub(:constantize).and_raise(LoadError)
|
|
46
|
+
STDERR.stub!(:puts => '')
|
|
47
|
+
STDERR.should_receive(:puts).with('ThinkingSphinx: error loading a.rb')
|
|
47
48
|
|
|
48
49
|
lambda {
|
|
49
50
|
ts_context.prepare
|
|
@@ -1309,7 +1309,7 @@ describe ThinkingSphinx::Search do
|
|
|
1309
1309
|
:matches => [],
|
|
1310
1310
|
:words => {'one' => {}, 'two' => {}}
|
|
1311
1311
|
})
|
|
1312
|
-
@search = ThinkingSphinx::Search.new(:classes => [Alpha])
|
|
1312
|
+
@search = ThinkingSphinx::Search.new('reading comprehension', :classes => [Alpha])
|
|
1313
1313
|
end
|
|
1314
1314
|
|
|
1315
1315
|
it "should return the Sphinx excerpt value" do
|
|
@@ -1341,9 +1341,9 @@ describe ThinkingSphinx::Search do
|
|
|
1341
1341
|
@search.excerpt_for('string', Beta)
|
|
1342
1342
|
end
|
|
1343
1343
|
|
|
1344
|
-
it "should
|
|
1344
|
+
it "should use the query string" do
|
|
1345
1345
|
@client.should_receive(:excerpts) do |options|
|
|
1346
|
-
options[:words].should ==
|
|
1346
|
+
options[:words].should == 'reading comprehension'
|
|
1347
1347
|
end
|
|
1348
1348
|
|
|
1349
1349
|
@search.excerpt_for('string', Beta)
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: thinking-sphinx
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 19
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 2
|
|
8
8
|
- 0
|
|
9
|
-
-
|
|
10
|
-
version: 2.0.
|
|
9
|
+
- 14
|
|
10
|
+
version: 2.0.14
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Pat Allan
|
|
@@ -15,10 +15,10 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date:
|
|
18
|
+
date: 2013-01-02 00:00:00 +11:00
|
|
19
|
+
default_executable:
|
|
19
20
|
dependencies:
|
|
20
21
|
- !ruby/object:Gem::Dependency
|
|
21
|
-
type: :runtime
|
|
22
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
23
23
|
none: false
|
|
24
24
|
requirements:
|
|
@@ -31,10 +31,10 @@ dependencies:
|
|
|
31
31
|
- 3
|
|
32
32
|
version: 3.0.3
|
|
33
33
|
version_requirements: *id001
|
|
34
|
-
prerelease: false
|
|
35
34
|
name: activerecord
|
|
36
|
-
|
|
35
|
+
prerelease: false
|
|
37
36
|
type: :runtime
|
|
37
|
+
- !ruby/object:Gem::Dependency
|
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
@@ -47,10 +47,10 @@ dependencies:
|
|
|
47
47
|
- 3
|
|
48
48
|
version: 1.5.3
|
|
49
49
|
version_requirements: *id002
|
|
50
|
-
prerelease: false
|
|
51
50
|
name: riddle
|
|
52
|
-
|
|
51
|
+
prerelease: false
|
|
53
52
|
type: :runtime
|
|
53
|
+
- !ruby/object:Gem::Dependency
|
|
54
54
|
requirement: &id003 !ruby/object:Gem::Requirement
|
|
55
55
|
none: false
|
|
56
56
|
requirements:
|
|
@@ -63,10 +63,10 @@ dependencies:
|
|
|
63
63
|
- 2
|
|
64
64
|
version: 2.1.2
|
|
65
65
|
version_requirements: *id003
|
|
66
|
-
prerelease: false
|
|
67
66
|
name: builder
|
|
67
|
+
prerelease: false
|
|
68
|
+
type: :runtime
|
|
68
69
|
- !ruby/object:Gem::Dependency
|
|
69
|
-
type: :development
|
|
70
70
|
requirement: &id004 !ruby/object:Gem::Requirement
|
|
71
71
|
none: false
|
|
72
72
|
requirements:
|
|
@@ -79,10 +79,10 @@ dependencies:
|
|
|
79
79
|
- 3
|
|
80
80
|
version: 3.0.3
|
|
81
81
|
version_requirements: *id004
|
|
82
|
-
prerelease: false
|
|
83
82
|
name: actionpack
|
|
84
|
-
|
|
83
|
+
prerelease: false
|
|
85
84
|
type: :development
|
|
85
|
+
- !ruby/object:Gem::Dependency
|
|
86
86
|
requirement: &id005 !ruby/object:Gem::Requirement
|
|
87
87
|
none: false
|
|
88
88
|
requirements:
|
|
@@ -95,10 +95,10 @@ dependencies:
|
|
|
95
95
|
- 0
|
|
96
96
|
version: 0.4.0
|
|
97
97
|
version_requirements: *id005
|
|
98
|
-
prerelease: false
|
|
99
98
|
name: appraisal
|
|
100
|
-
|
|
99
|
+
prerelease: false
|
|
101
100
|
type: :development
|
|
101
|
+
- !ruby/object:Gem::Dependency
|
|
102
102
|
requirement: &id006 !ruby/object:Gem::Requirement
|
|
103
103
|
none: false
|
|
104
104
|
requirements:
|
|
@@ -111,10 +111,10 @@ dependencies:
|
|
|
111
111
|
- 2
|
|
112
112
|
version: 1.0.2
|
|
113
113
|
version_requirements: *id006
|
|
114
|
-
prerelease: false
|
|
115
114
|
name: cucumber
|
|
116
|
-
|
|
115
|
+
prerelease: false
|
|
117
116
|
type: :development
|
|
117
|
+
- !ruby/object:Gem::Dependency
|
|
118
118
|
requirement: &id007 !ruby/object:Gem::Requirement
|
|
119
119
|
none: false
|
|
120
120
|
requirements:
|
|
@@ -127,10 +127,10 @@ dependencies:
|
|
|
127
127
|
- 1
|
|
128
128
|
version: 0.3.1
|
|
129
129
|
version_requirements: *id007
|
|
130
|
-
prerelease: false
|
|
131
130
|
name: faker
|
|
132
|
-
|
|
131
|
+
prerelease: false
|
|
133
132
|
type: :development
|
|
133
|
+
- !ruby/object:Gem::Dependency
|
|
134
134
|
requirement: &id008 !ruby/object:Gem::Requirement
|
|
135
135
|
none: false
|
|
136
136
|
requirements:
|
|
@@ -143,10 +143,10 @@ dependencies:
|
|
|
143
143
|
- 2
|
|
144
144
|
version: 0.9.2
|
|
145
145
|
version_requirements: *id008
|
|
146
|
-
prerelease: false
|
|
147
146
|
name: rake
|
|
148
|
-
|
|
147
|
+
prerelease: false
|
|
149
148
|
type: :development
|
|
149
|
+
- !ruby/object:Gem::Dependency
|
|
150
150
|
requirement: &id009 !ruby/object:Gem::Requirement
|
|
151
151
|
none: false
|
|
152
152
|
requirements:
|
|
@@ -159,10 +159,10 @@ dependencies:
|
|
|
159
159
|
- 0
|
|
160
160
|
version: 2.6.0
|
|
161
161
|
version_requirements: *id009
|
|
162
|
-
prerelease: false
|
|
163
162
|
name: rspec
|
|
164
|
-
|
|
163
|
+
prerelease: false
|
|
165
164
|
type: :development
|
|
165
|
+
- !ruby/object:Gem::Dependency
|
|
166
166
|
requirement: &id010 !ruby/object:Gem::Requirement
|
|
167
167
|
none: false
|
|
168
168
|
requirements:
|
|
@@ -174,10 +174,10 @@ dependencies:
|
|
|
174
174
|
- 0
|
|
175
175
|
version: "3.0"
|
|
176
176
|
version_requirements: *id010
|
|
177
|
-
prerelease: false
|
|
178
177
|
name: will_paginate
|
|
179
|
-
|
|
178
|
+
prerelease: false
|
|
180
179
|
type: :development
|
|
180
|
+
- !ruby/object:Gem::Dependency
|
|
181
181
|
requirement: &id011 !ruby/object:Gem::Requirement
|
|
182
182
|
none: false
|
|
183
183
|
requirements:
|
|
@@ -190,8 +190,9 @@ dependencies:
|
|
|
190
190
|
- 2
|
|
191
191
|
version: 0.7.2
|
|
192
192
|
version_requirements: *id011
|
|
193
|
-
prerelease: false
|
|
194
193
|
name: yard
|
|
194
|
+
prerelease: false
|
|
195
|
+
type: :development
|
|
195
196
|
description: A concise and easy-to-use Ruby library that connects ActiveRecord to the Sphinx search daemon, managing configuration, indexing and searching.
|
|
196
197
|
email:
|
|
197
198
|
- pat@freelancing-gods.com
|
|
@@ -376,12 +377,13 @@ files:
|
|
|
376
377
|
- spec/thinking_sphinx/source_spec.rb
|
|
377
378
|
- spec/thinking_sphinx/test_spec.rb
|
|
378
379
|
- spec/thinking_sphinx_spec.rb
|
|
379
|
-
|
|
380
|
+
has_rdoc: true
|
|
381
|
+
homepage: http://pat.github.com/ts/en/
|
|
380
382
|
licenses: []
|
|
381
383
|
|
|
382
384
|
post_install_message: |+
|
|
383
385
|
If you're upgrading, you should read this:
|
|
384
|
-
http://
|
|
386
|
+
http://pat.github.com/ts/en/upgrading.html
|
|
385
387
|
|
|
386
388
|
rdoc_options: []
|
|
387
389
|
|
|
@@ -408,7 +410,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
408
410
|
requirements: []
|
|
409
411
|
|
|
410
412
|
rubyforge_project: thinking-sphinx
|
|
411
|
-
rubygems_version: 1.
|
|
413
|
+
rubygems_version: 1.6.2
|
|
412
414
|
signing_key:
|
|
413
415
|
specification_version: 3
|
|
414
416
|
summary: ActiveRecord/Rails Sphinx library
|
|
@@ -536,4 +538,3 @@ test_files:
|
|
|
536
538
|
- spec/thinking_sphinx/source_spec.rb
|
|
537
539
|
- spec/thinking_sphinx/test_spec.rb
|
|
538
540
|
- spec/thinking_sphinx_spec.rb
|
|
539
|
-
has_rdoc:
|