thinking-sphinx 2.0.0 → 2.0.1
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/README.textile +4 -0
- data/VERSION +1 -1
- data/features/step_definitions/search_steps.rb +4 -4
- data/lib/cucumber/thinking_sphinx/internal_world.rb +2 -2
- data/lib/thinking-sphinx.rb +1 -0
- data/lib/thinking_sphinx/action_controller.rb +31 -0
- data/lib/thinking_sphinx/active_record.rb +1 -0
- data/lib/thinking_sphinx/active_record/log_subscriber.rb +61 -0
- data/lib/thinking_sphinx/association.rb +4 -4
- data/lib/thinking_sphinx/attribute.rb +1 -1
- data/lib/thinking_sphinx/railtie.rb +7 -0
- data/lib/thinking_sphinx/search.rb +60 -31
- data/spec/thinking_sphinx/search_spec.rb +62 -12
- data/tasks/testing.rb +0 -4
- metadata +54 -36
data/README.textile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.1
|
@@ -11,24 +11,24 @@ When /^I search for the document id of (\w+) (\w+) in the (\w+) index$/ do |mode
|
|
11
11
|
end
|
12
12
|
|
13
13
|
Then "it should exist" do
|
14
|
-
ThinkingSphinx
|
14
|
+
ThinkingSphinx.search_for_id(@id, @index).should == true
|
15
15
|
end
|
16
16
|
|
17
17
|
Then "it should not exist" do
|
18
|
-
ThinkingSphinx
|
18
|
+
ThinkingSphinx.search_for_id(@id, @index).should == false
|
19
19
|
end
|
20
20
|
|
21
21
|
Then "it should exist if using Rails 2.1 or newer" do
|
22
22
|
require 'active_record/version'
|
23
23
|
unless ActiveRecord::VERSION::STRING.to_f < 2.1
|
24
|
-
ThinkingSphinx
|
24
|
+
ThinkingSphinx.search_for_id(@id, @index).should == true
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
Then "it should not exist if using Rails 2.1 or newer" do
|
29
29
|
require 'active_record/version'
|
30
30
|
unless ActiveRecord::VERSION::STRING.to_f < 2.1
|
31
|
-
ThinkingSphinx
|
31
|
+
ThinkingSphinx.search_for_id(@id, @index).should == false
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -68,7 +68,7 @@ module Cucumber
|
|
68
68
|
Kernel.at_exit do
|
69
69
|
::ThinkingSphinx::Configuration.instance.controller.stop
|
70
70
|
sleep(0.5) # Ensure Sphinx has shut down completely
|
71
|
-
ActiveRecord::
|
71
|
+
::ThinkingSphinx::ActiveRecord::LogSubscriber.logger.close
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -89,7 +89,7 @@ module Cucumber
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def configure_active_record
|
92
|
-
ActiveRecord::
|
92
|
+
::ThinkingSphinx::ActiveRecord::LogSubscriber.logger = Logger.new(
|
93
93
|
open("#{temporary_directory}/active_record.log", "a")
|
94
94
|
)
|
95
95
|
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'thinking_sphinx'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module ThinkingSphinx
|
2
|
+
module ActionController
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
protected
|
6
|
+
|
7
|
+
attr_internal :query_runtime
|
8
|
+
|
9
|
+
def cleanup_view_runtime
|
10
|
+
log_subscriber = ThinkingSphinx::ActiveRecord::LogSubscriber
|
11
|
+
query_runtime_pre_render = log_subscriber.reset_runtime
|
12
|
+
runtime = super
|
13
|
+
query_runtime_post_render = log_subscriber.reset_runtime
|
14
|
+
self.query_runtime = query_runtime_pre_render + query_runtime_post_render
|
15
|
+
runtime - query_runtime_post_render
|
16
|
+
end
|
17
|
+
|
18
|
+
def append_info_to_payload(payload)
|
19
|
+
super
|
20
|
+
payload[:query_runtime] = query_runtime
|
21
|
+
end
|
22
|
+
|
23
|
+
module ClassMethods
|
24
|
+
def log_process_action(payload)
|
25
|
+
messages, query_runtime = super, payload[:query_runtime]
|
26
|
+
messages << ("Sphinx: %.1fms" % query_runtime.to_f) if query_runtime
|
27
|
+
messages
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'thinking_sphinx/active_record/attribute_updates'
|
2
2
|
require 'thinking_sphinx/active_record/delta'
|
3
3
|
require 'thinking_sphinx/active_record/has_many_association'
|
4
|
+
require 'thinking_sphinx/active_record/log_subscriber'
|
4
5
|
require 'thinking_sphinx/active_record/scopes'
|
5
6
|
|
6
7
|
module ThinkingSphinx
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'active_support/log_subscriber'
|
2
|
+
|
3
|
+
module ThinkingSphinx
|
4
|
+
module ActiveRecord
|
5
|
+
class LogSubscriber < ActiveSupport::LogSubscriber
|
6
|
+
def self.runtime=(value)
|
7
|
+
Thread.current['thinking_sphinx_query_runtime'] = value
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.runtime
|
11
|
+
Thread.current['thinking_sphinx_query_runtime'] ||= 0
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.reset_runtime
|
15
|
+
rt, self.runtime = runtime, 0
|
16
|
+
rt
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
super
|
21
|
+
@odd_or_even = false
|
22
|
+
end
|
23
|
+
|
24
|
+
def query(event)
|
25
|
+
self.class.runtime += event.duration
|
26
|
+
return unless logger.debug?
|
27
|
+
|
28
|
+
identifier = color('Sphinx Query (%.1fms)' % event.duration, GREEN, true)
|
29
|
+
query = event.payload[:query]
|
30
|
+
query = color query, nil, true if odd?
|
31
|
+
|
32
|
+
debug " #{identifier} #{query}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def message(event)
|
36
|
+
return unless logger.debug?
|
37
|
+
|
38
|
+
identifier = color 'Sphinx', GREEN, true
|
39
|
+
message = event.payload[:message]
|
40
|
+
message = color message, nil, true if odd?
|
41
|
+
|
42
|
+
debug " #{identifier} #{message}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def odd?
|
46
|
+
@odd_or_even = !@odd_or_even
|
47
|
+
end
|
48
|
+
|
49
|
+
def logger
|
50
|
+
return @logger if defined? @logger
|
51
|
+
self.logger = ::ActiveRecord::Base.logger
|
52
|
+
end
|
53
|
+
|
54
|
+
def logger=(logger)
|
55
|
+
@logger = logger
|
56
|
+
end
|
57
|
+
|
58
|
+
attach_to :thinking_sphinx
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -64,12 +64,12 @@ module ThinkingSphinx
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def arel_join
|
67
|
-
|
68
|
-
|
67
|
+
@join.join_type = Arel::OuterJoin
|
68
|
+
@join.options[:conditions].gsub!(/::ts_join_alias::/,
|
69
69
|
"#{@reflection.klass.connection.quote_table_name(@join.parent.aliased_table_name)}"
|
70
|
-
) if
|
70
|
+
) if @join.options[:conditions].is_a?(String)
|
71
71
|
|
72
|
-
|
72
|
+
@join
|
73
73
|
end
|
74
74
|
|
75
75
|
# Returns true if the association - or a parent - is a has_many or
|
@@ -224,7 +224,7 @@ module ThinkingSphinx
|
|
224
224
|
end_assoc = end_association_for_mva
|
225
225
|
raise "Could not determine SQL for MVA" if base_assoc.nil?
|
226
226
|
|
227
|
-
relation = Table(base_assoc.table)
|
227
|
+
relation = Arel::Table.new(base_assoc.table)
|
228
228
|
|
229
229
|
association_joins.each do |join|
|
230
230
|
relation = relation.join(join.relation, Arel::OuterJoin).
|
@@ -10,6 +10,13 @@ module ThinkingSphinx
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
initializer "thinking_sphinx.action_controller" do
|
14
|
+
ActiveSupport.on_load :action_controller do
|
15
|
+
require 'thinking_sphinx/action_controller'
|
16
|
+
include ThinkingSphinx::ActionController
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
13
20
|
initializer "thinking_sphinx.set_app_root" do |app|
|
14
21
|
ThinkingSphinx::Configuration.instance.reset # Rails has setup app now
|
15
22
|
end
|
@@ -29,34 +29,38 @@ module ThinkingSphinx
|
|
29
29
|
|
30
30
|
# Deprecated. Use ThinkingSphinx.search
|
31
31
|
def self.search(*args)
|
32
|
-
|
32
|
+
warn 'ThinkingSphinx::Search.search is deprecated. Please use ThinkingSphinx.search instead.'
|
33
33
|
ThinkingSphinx.search *args
|
34
34
|
end
|
35
35
|
|
36
36
|
# Deprecated. Use ThinkingSphinx.search_for_ids
|
37
37
|
def self.search_for_ids(*args)
|
38
|
-
|
38
|
+
warn 'ThinkingSphinx::Search.search_for_ids is deprecated. Please use ThinkingSphinx.search_for_ids instead.'
|
39
39
|
ThinkingSphinx.search_for_ids *args
|
40
40
|
end
|
41
41
|
|
42
42
|
# Deprecated. Use ThinkingSphinx.search_for_ids
|
43
43
|
def self.search_for_id(*args)
|
44
|
-
|
44
|
+
warn 'ThinkingSphinx::Search.search_for_id is deprecated. Please use ThinkingSphinx.search_for_id instead.'
|
45
45
|
ThinkingSphinx.search_for_id *args
|
46
46
|
end
|
47
47
|
|
48
48
|
# Deprecated. Use ThinkingSphinx.count
|
49
49
|
def self.count(*args)
|
50
|
-
|
50
|
+
warn 'ThinkingSphinx::Search.count is deprecated. Please use ThinkingSphinx.count instead.'
|
51
51
|
ThinkingSphinx.count *args
|
52
52
|
end
|
53
53
|
|
54
54
|
# Deprecated. Use ThinkingSphinx.facets
|
55
55
|
def self.facets(*args)
|
56
|
-
|
56
|
+
warn 'ThinkingSphinx::Search.facets is deprecated. Please use ThinkingSphinx.facets instead.'
|
57
57
|
ThinkingSphinx.facets *args
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
|
+
def self.warn(message)
|
61
|
+
::ActiveSupport::Deprecation.warn message
|
62
|
+
end
|
63
|
+
|
60
64
|
def self.bundle_searches(enum = nil)
|
61
65
|
bundle = ThinkingSphinx::BundledSearch.new
|
62
66
|
|
@@ -102,6 +106,11 @@ module ThinkingSphinx
|
|
102
106
|
self
|
103
107
|
end
|
104
108
|
|
109
|
+
def as_json(*args)
|
110
|
+
populate
|
111
|
+
@array.as_json(*args)
|
112
|
+
end
|
113
|
+
|
105
114
|
# Indication of whether the request has been made to Sphinx for the search
|
106
115
|
# query.
|
107
116
|
#
|
@@ -344,12 +353,11 @@ module ThinkingSphinx
|
|
344
353
|
|
345
354
|
retry_on_stale_index do
|
346
355
|
begin
|
347
|
-
log
|
348
|
-
runtime = Benchmark.realtime {
|
356
|
+
log query do
|
349
357
|
@results = client.query query, indexes, comment
|
350
|
-
|
351
|
-
|
352
|
-
|
358
|
+
end
|
359
|
+
total = @results[:total_found].to_i
|
360
|
+
log "Found #{total} result#{'s' unless total == 1}"
|
353
361
|
rescue Errno::ECONNREFUSED => err
|
354
362
|
raise ThinkingSphinx::ConnectionError,
|
355
363
|
'Connection to Sphinx Daemon (searchd) failed.'
|
@@ -406,30 +414,27 @@ module ThinkingSphinx
|
|
406
414
|
match[:attributes]['class_crc'] == object.class.to_crc32
|
407
415
|
}
|
408
416
|
end
|
409
|
-
|
410
|
-
def self.log(message,
|
411
|
-
return if ::ActiveRecord::
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
info << " \e[#{identifier_color}m#{identifier}\e[0m "
|
417
|
-
info << "\e[#{message_color}m#{message}\e[0m"
|
417
|
+
|
418
|
+
def self.log(message, &block)
|
419
|
+
return if ThinkingSphinx::ActiveRecord::LogSubscriber.logger.nil?
|
420
|
+
|
421
|
+
if block_given?
|
422
|
+
::ActiveSupport::Notifications.
|
423
|
+
instrument('query.thinking_sphinx', :query => message, &block)
|
418
424
|
else
|
419
|
-
|
425
|
+
::ActiveSupport::Notifications.
|
426
|
+
instrument('message.thinking_sphinx', :message => message)
|
420
427
|
end
|
421
|
-
|
422
|
-
::ActiveRecord::Base.logger.send method, info
|
423
428
|
end
|
424
|
-
|
425
|
-
def log(
|
426
|
-
self.class.log(
|
429
|
+
|
430
|
+
def log(query, &block)
|
431
|
+
self.class.log(query, &block)
|
427
432
|
end
|
428
|
-
|
433
|
+
|
429
434
|
def prepare(client)
|
430
435
|
index_options = one_class ?
|
431
436
|
one_class.sphinx_indexes.first.local_options : {}
|
432
|
-
|
437
|
+
|
433
438
|
[
|
434
439
|
:max_matches, :group_by, :group_function, :group_clause,
|
435
440
|
:group_distinct, :id_range, :cut_off, :retry_count, :retry_delay,
|
@@ -475,8 +480,8 @@ module ThinkingSphinx
|
|
475
480
|
stale_ids |= err.ids
|
476
481
|
# ID exclusion
|
477
482
|
options[:without_ids] = Array(options[:without_ids]) | err.ids
|
478
|
-
|
479
|
-
log '
|
483
|
+
|
484
|
+
log 'Stale Ids (%s %s left): %s' % [
|
480
485
|
retries, (retries == 1 ? 'try' : 'tries'), stale_ids.join(', ')
|
481
486
|
]
|
482
487
|
retry
|
@@ -728,13 +733,37 @@ module ThinkingSphinx
|
|
728
733
|
when NilClass
|
729
734
|
nil
|
730
735
|
when Array
|
731
|
-
includes
|
736
|
+
include_from_array includes, klass
|
732
737
|
when Symbol
|
733
738
|
klass.reflections[includes].nil? ? nil : includes
|
739
|
+
when Hash
|
740
|
+
include_from_hash includes, klass
|
734
741
|
else
|
735
742
|
includes
|
736
743
|
end
|
737
744
|
end
|
745
|
+
|
746
|
+
def include_from_array(array, klass)
|
747
|
+
scoped_array = []
|
748
|
+
array.each do |value|
|
749
|
+
case value
|
750
|
+
when Hash
|
751
|
+
scoped_hash = include_from_hash(value, klass)
|
752
|
+
scoped_array << scoped_hash unless scoped_hash.nil?
|
753
|
+
else
|
754
|
+
scoped_array << value unless klass.reflections[value].nil?
|
755
|
+
end
|
756
|
+
end
|
757
|
+
scoped_array.empty? ? nil : scoped_array
|
758
|
+
end
|
759
|
+
|
760
|
+
def include_from_hash(hash, klass)
|
761
|
+
scoped_hash = {}
|
762
|
+
hash.keys.each do |key|
|
763
|
+
scoped_hash[key] = hash[key] unless klass.reflections[key].nil?
|
764
|
+
end
|
765
|
+
scoped_hash.empty? ? nil : scoped_hash
|
766
|
+
end
|
738
767
|
|
739
768
|
def instances_from_class(klass, matches)
|
740
769
|
index_options = klass.sphinx_index_options
|
@@ -115,8 +115,10 @@ describe ThinkingSphinx::Search do
|
|
115
115
|
it "return the output of ThinkingSphinx.search" do
|
116
116
|
@results = [] # to confirm same object
|
117
117
|
ThinkingSphinx.stub!(:search => @results)
|
118
|
-
|
119
|
-
|
118
|
+
|
119
|
+
ActiveSupport::Deprecation.silence do
|
120
|
+
ThinkingSphinx::Search.search.object_id.should == @results.object_id
|
121
|
+
end
|
120
122
|
end
|
121
123
|
end
|
122
124
|
|
@@ -124,9 +126,11 @@ describe ThinkingSphinx::Search do
|
|
124
126
|
it "return the output of ThinkingSphinx.search_for_ids" do
|
125
127
|
@results = [] # to confirm same object
|
126
128
|
ThinkingSphinx.stub!(:search_for_ids => @results)
|
127
|
-
|
128
|
-
|
129
|
-
|
129
|
+
|
130
|
+
ActiveSupport::Deprecation.silence do
|
131
|
+
ThinkingSphinx::Search.search_for_ids.object_id.
|
132
|
+
should == @results.object_id
|
133
|
+
end
|
130
134
|
end
|
131
135
|
end
|
132
136
|
|
@@ -134,9 +138,11 @@ describe ThinkingSphinx::Search do
|
|
134
138
|
it "return the output of ThinkingSphinx.search_for_ids" do
|
135
139
|
@results = [] # to confirm same object
|
136
140
|
ThinkingSphinx.stub!(:search_for_id => @results)
|
137
|
-
|
138
|
-
|
139
|
-
|
141
|
+
|
142
|
+
ActiveSupport::Deprecation.silence do
|
143
|
+
ThinkingSphinx::Search.search_for_id.object_id.
|
144
|
+
should == @results.object_id
|
145
|
+
end
|
140
146
|
end
|
141
147
|
end
|
142
148
|
|
@@ -144,8 +150,10 @@ describe ThinkingSphinx::Search do
|
|
144
150
|
it "return the output of ThinkingSphinx.search" do
|
145
151
|
@results = [] # to confirm same object
|
146
152
|
ThinkingSphinx.stub!(:count => @results)
|
147
|
-
|
148
|
-
|
153
|
+
|
154
|
+
ActiveSupport::Deprecation.silence do
|
155
|
+
ThinkingSphinx::Search.count.object_id.should == @results.object_id
|
156
|
+
end
|
149
157
|
end
|
150
158
|
end
|
151
159
|
|
@@ -153,8 +161,10 @@ describe ThinkingSphinx::Search do
|
|
153
161
|
it "return the output of ThinkingSphinx.facets" do
|
154
162
|
@results = [] # to confirm same object
|
155
163
|
ThinkingSphinx.stub!(:facets => @results)
|
156
|
-
|
157
|
-
|
164
|
+
|
165
|
+
ActiveSupport::Deprecation.silence do
|
166
|
+
ThinkingSphinx::Search.facets.object_id.should == @results.object_id
|
167
|
+
end
|
158
168
|
end
|
159
169
|
end
|
160
170
|
|
@@ -245,6 +255,46 @@ describe ThinkingSphinx::Search do
|
|
245
255
|
|
246
256
|
ThinkingSphinx::Search.new(:include => :betas).first
|
247
257
|
end
|
258
|
+
|
259
|
+
it "should respect complex includes" do
|
260
|
+
Alpha.should_receive(:find) do |type, options|
|
261
|
+
options[:include].should == [:thetas, {:betas => :gammas}]
|
262
|
+
[@alpha_a, @alpha_b]
|
263
|
+
end
|
264
|
+
|
265
|
+
Beta.should_receive(:find) do |type, options|
|
266
|
+
options[:include].should be_nil
|
267
|
+
[@beta_a, @beta_b]
|
268
|
+
end
|
269
|
+
|
270
|
+
ThinkingSphinx::Search.new(:include => [:thetas, {:betas => :gammas}]).first
|
271
|
+
end
|
272
|
+
|
273
|
+
it "should respect hash includes" do
|
274
|
+
Alpha.should_receive(:find) do |type, options|
|
275
|
+
options[:include].should == {:betas => :gammas}
|
276
|
+
[@alpha_a, @alpha_b]
|
277
|
+
end
|
278
|
+
|
279
|
+
Beta.should_receive(:find) do |type, options|
|
280
|
+
options[:include].should be_nil
|
281
|
+
[@beta_a, @beta_b]
|
282
|
+
end
|
283
|
+
|
284
|
+
ThinkingSphinx::Search.new(:include => {:betas => :gammas}).first
|
285
|
+
end
|
286
|
+
|
287
|
+
it "should respect includes for single class searches" do
|
288
|
+
Alpha.should_receive(:find) do |type, options|
|
289
|
+
options[:include].should == {:betas => :gammas}
|
290
|
+
[@alpha_a, @alpha_b]
|
291
|
+
end
|
292
|
+
|
293
|
+
ThinkingSphinx::Search.new(
|
294
|
+
:include => {:betas => :gammas},
|
295
|
+
:classes => [Alpha]
|
296
|
+
).first
|
297
|
+
end
|
248
298
|
|
249
299
|
describe 'query' do
|
250
300
|
it "should concatenate arguments with spaces" do
|
data/tasks/testing.rb
CHANGED
@@ -6,7 +6,6 @@ desc "Run the specs under spec"
|
|
6
6
|
RSpec::Core::RakeTask.new do |t|
|
7
7
|
t.pattern = 'spec/**/*_spec.rb'
|
8
8
|
end
|
9
|
-
task :spec => :check_dependencies
|
10
9
|
|
11
10
|
desc "Run all feature-set configurations"
|
12
11
|
task :features do |t|
|
@@ -26,9 +25,6 @@ namespace :features do
|
|
26
25
|
|
27
26
|
add_task :mysql, "Run feature-set against MySQL"
|
28
27
|
add_task :postgresql, "Run feature-set against PostgreSQL"
|
29
|
-
|
30
|
-
task :mysql => :check_dependencies
|
31
|
-
task :postgresql => :check_dependencies
|
32
28
|
end
|
33
29
|
|
34
30
|
namespace :rcov do
|
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: 13
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 2.0.
|
9
|
+
- 1
|
10
|
+
version: 2.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Pat Allan
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-20 00:00:00 +11:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -27,12 +27,12 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
hash:
|
30
|
+
hash: 1
|
31
31
|
segments:
|
32
32
|
- 3
|
33
33
|
- 0
|
34
|
-
-
|
35
|
-
version: 3.0.
|
34
|
+
- 3
|
35
|
+
version: 3.0.3
|
36
36
|
requirement: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
type: :runtime
|
@@ -43,12 +43,12 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
hash:
|
46
|
+
hash: 29
|
47
47
|
segments:
|
48
48
|
- 1
|
49
49
|
- 2
|
50
|
-
-
|
51
|
-
version: 1.2.
|
50
|
+
- 1
|
51
|
+
version: 1.2.1
|
52
52
|
requirement: *id002
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
type: :development
|
@@ -85,25 +85,40 @@ dependencies:
|
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
type: :development
|
87
87
|
prerelease: false
|
88
|
-
name:
|
88
|
+
name: actionpack
|
89
89
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
hash: 1
|
95
|
+
segments:
|
96
|
+
- 3
|
97
|
+
- 0
|
98
|
+
- 3
|
99
|
+
version: 3.0.3
|
100
|
+
requirement: *id005
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
name: jeweler
|
105
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
90
106
|
none: false
|
91
107
|
requirements:
|
92
108
|
- - "="
|
93
109
|
- !ruby/object:Gem::Version
|
94
|
-
hash:
|
110
|
+
hash: 1
|
95
111
|
segments:
|
96
112
|
- 1
|
97
113
|
- 5
|
98
|
-
-
|
99
|
-
|
100
|
-
|
101
|
-
requirement: *id005
|
114
|
+
- 1
|
115
|
+
version: 1.5.1
|
116
|
+
requirement: *id006
|
102
117
|
- !ruby/object:Gem::Dependency
|
103
118
|
type: :development
|
104
119
|
prerelease: false
|
105
120
|
name: yard
|
106
|
-
version_requirements: &
|
121
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
107
122
|
none: false
|
108
123
|
requirements:
|
109
124
|
- - "="
|
@@ -114,12 +129,12 @@ dependencies:
|
|
114
129
|
- 6
|
115
130
|
- 1
|
116
131
|
version: 0.6.1
|
117
|
-
requirement: *
|
132
|
+
requirement: *id007
|
118
133
|
- !ruby/object:Gem::Dependency
|
119
134
|
type: :development
|
120
135
|
prerelease: false
|
121
136
|
name: rspec
|
122
|
-
version_requirements: &
|
137
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
123
138
|
none: false
|
124
139
|
requirements:
|
125
140
|
- - "="
|
@@ -130,12 +145,12 @@ dependencies:
|
|
130
145
|
- 0
|
131
146
|
- 1
|
132
147
|
version: 2.0.1
|
133
|
-
requirement: *
|
148
|
+
requirement: *id008
|
134
149
|
- !ruby/object:Gem::Dependency
|
135
150
|
type: :development
|
136
151
|
prerelease: false
|
137
152
|
name: rspec-core
|
138
|
-
version_requirements: &
|
153
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
139
154
|
none: false
|
140
155
|
requirements:
|
141
156
|
- - "="
|
@@ -146,12 +161,12 @@ dependencies:
|
|
146
161
|
- 0
|
147
162
|
- 1
|
148
163
|
version: 2.0.1
|
149
|
-
requirement: *
|
164
|
+
requirement: *id009
|
150
165
|
- !ruby/object:Gem::Dependency
|
151
166
|
type: :development
|
152
167
|
prerelease: false
|
153
168
|
name: rspec-expectations
|
154
|
-
version_requirements: &
|
169
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
155
170
|
none: false
|
156
171
|
requirements:
|
157
172
|
- - "="
|
@@ -162,12 +177,12 @@ dependencies:
|
|
162
177
|
- 0
|
163
178
|
- 1
|
164
179
|
version: 2.0.1
|
165
|
-
requirement: *
|
180
|
+
requirement: *id010
|
166
181
|
- !ruby/object:Gem::Dependency
|
167
182
|
type: :development
|
168
183
|
prerelease: false
|
169
184
|
name: rspec-mocks
|
170
|
-
version_requirements: &
|
185
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
171
186
|
none: false
|
172
187
|
requirements:
|
173
188
|
- - "="
|
@@ -178,12 +193,12 @@ dependencies:
|
|
178
193
|
- 0
|
179
194
|
- 1
|
180
195
|
version: 2.0.1
|
181
|
-
requirement: *
|
196
|
+
requirement: *id011
|
182
197
|
- !ruby/object:Gem::Dependency
|
183
198
|
type: :development
|
184
199
|
prerelease: false
|
185
200
|
name: rcov
|
186
|
-
version_requirements: &
|
201
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
187
202
|
none: false
|
188
203
|
requirements:
|
189
204
|
- - "="
|
@@ -194,12 +209,12 @@ dependencies:
|
|
194
209
|
- 9
|
195
210
|
- 8
|
196
211
|
version: 0.9.8
|
197
|
-
requirement: *
|
212
|
+
requirement: *id012
|
198
213
|
- !ruby/object:Gem::Dependency
|
199
214
|
type: :development
|
200
215
|
prerelease: false
|
201
216
|
name: cucumber
|
202
|
-
version_requirements: &
|
217
|
+
version_requirements: &id013 !ruby/object:Gem::Requirement
|
203
218
|
none: false
|
204
219
|
requirements:
|
205
220
|
- - "="
|
@@ -210,12 +225,12 @@ dependencies:
|
|
210
225
|
- 9
|
211
226
|
- 4
|
212
227
|
version: 0.9.4
|
213
|
-
requirement: *
|
228
|
+
requirement: *id013
|
214
229
|
- !ruby/object:Gem::Dependency
|
215
230
|
type: :development
|
216
231
|
prerelease: false
|
217
232
|
name: will_paginate
|
218
|
-
version_requirements: &
|
233
|
+
version_requirements: &id014 !ruby/object:Gem::Requirement
|
219
234
|
none: false
|
220
235
|
requirements:
|
221
236
|
- - "="
|
@@ -226,12 +241,12 @@ dependencies:
|
|
226
241
|
- 0
|
227
242
|
- pre
|
228
243
|
version: 3.0.pre
|
229
|
-
requirement: *
|
244
|
+
requirement: *id014
|
230
245
|
- !ruby/object:Gem::Dependency
|
231
246
|
type: :development
|
232
247
|
prerelease: false
|
233
248
|
name: ginger
|
234
|
-
version_requirements: &
|
249
|
+
version_requirements: &id015 !ruby/object:Gem::Requirement
|
235
250
|
none: false
|
236
251
|
requirements:
|
237
252
|
- - "="
|
@@ -242,12 +257,12 @@ dependencies:
|
|
242
257
|
- 2
|
243
258
|
- 0
|
244
259
|
version: 1.2.0
|
245
|
-
requirement: *
|
260
|
+
requirement: *id015
|
246
261
|
- !ruby/object:Gem::Dependency
|
247
262
|
type: :development
|
248
263
|
prerelease: false
|
249
264
|
name: faker
|
250
|
-
version_requirements: &
|
265
|
+
version_requirements: &id016 !ruby/object:Gem::Requirement
|
251
266
|
none: false
|
252
267
|
requirements:
|
253
268
|
- - "="
|
@@ -258,7 +273,7 @@ dependencies:
|
|
258
273
|
- 3
|
259
274
|
- 1
|
260
275
|
version: 0.3.1
|
261
|
-
requirement: *
|
276
|
+
requirement: *id016
|
262
277
|
description: A concise and easy-to-use Ruby library that connects ActiveRecord to the Sphinx search daemon, managing configuration, indexing and searching.
|
263
278
|
email: pat@freelancing-gods.com
|
264
279
|
executables: []
|
@@ -274,11 +289,14 @@ files:
|
|
274
289
|
- lib/cucumber/thinking_sphinx/external_world.rb
|
275
290
|
- lib/cucumber/thinking_sphinx/internal_world.rb
|
276
291
|
- lib/cucumber/thinking_sphinx/sql_logger.rb
|
292
|
+
- lib/thinking-sphinx.rb
|
277
293
|
- lib/thinking_sphinx.rb
|
294
|
+
- lib/thinking_sphinx/action_controller.rb
|
278
295
|
- lib/thinking_sphinx/active_record.rb
|
279
296
|
- lib/thinking_sphinx/active_record/attribute_updates.rb
|
280
297
|
- lib/thinking_sphinx/active_record/delta.rb
|
281
298
|
- lib/thinking_sphinx/active_record/has_many_association.rb
|
299
|
+
- lib/thinking_sphinx/active_record/log_subscriber.rb
|
282
300
|
- lib/thinking_sphinx/active_record/scopes.rb
|
283
301
|
- lib/thinking_sphinx/adapters/abstract_adapter.rb
|
284
302
|
- lib/thinking_sphinx/adapters/mysql_adapter.rb
|