freelancing-god-thinking-sphinx 1.2.9 → 1.2.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/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 1
3
3
  :minor: 2
4
- :patch: 9
4
+ :patch: 10
@@ -155,6 +155,14 @@ module ThinkingSphinx
155
155
  self.name.underscore.tr(':/\\', '_')
156
156
  end
157
157
 
158
+ def sphinx_index_names
159
+ klass = source_of_sphinx_index
160
+ names = ["#{klass.sphinx_name}_core"]
161
+ names << "#{klass.sphinx_name}_delta" if sphinx_delta?
162
+
163
+ names
164
+ end
165
+
158
166
  private
159
167
 
160
168
  def sphinx_delta?
@@ -177,6 +177,13 @@ module ThinkingSphinx
177
177
  (current_page - 1) * per_page
178
178
  end
179
179
 
180
+ def indexes
181
+ return options[:index] if options[:index]
182
+ return '*' if classes.empty?
183
+
184
+ classes.collect { |klass| klass.sphinx_index_names }.flatten.join(',')
185
+ end
186
+
180
187
  def each_with_groupby_and_count(&block)
181
188
  populate
182
189
  results[:matches].each_with_index do |match, index|
@@ -194,8 +201,8 @@ module ThinkingSphinx
194
201
  end
195
202
 
196
203
  def excerpt_for(string, model = nil)
197
- if model.nil? && classes.length == 1
198
- model ||= classes.first
204
+ if model.nil? && one_class
205
+ model ||= one_class
199
206
  end
200
207
 
201
208
  populate
@@ -224,7 +231,7 @@ module ThinkingSphinx
224
231
  retry_on_stale_index do
225
232
  begin
226
233
  log "Querying Sphinx: #{query}"
227
- @results = client.query query, index, comment
234
+ @results = client.query query, indexes, comment
228
235
  rescue Errno::ECONNREFUSED => err
229
236
  raise ThinkingSphinx::ConnectionError,
230
237
  'Connection to Sphinx Daemon (searchd) failed.'
@@ -266,8 +273,8 @@ module ThinkingSphinx
266
273
  def client
267
274
  client = config.client
268
275
 
269
- index_options = classes.length != 1 ?
270
- {} : classes.first.sphinx_indexes.first.local_options
276
+ index_options = one_class ?
277
+ one_class.sphinx_indexes.first.local_options : {}
271
278
 
272
279
  [
273
280
  :max_matches, :group_by, :group_function, :group_clause,
@@ -325,6 +332,10 @@ module ThinkingSphinx
325
332
  @classes ||= options[:classes] || []
326
333
  end
327
334
 
335
+ def one_class
336
+ @one_class ||= classes.length != 1 ? nil : classes.first
337
+ end
338
+
328
339
  def query
329
340
  @query ||= begin
330
341
  q = @args.join(' ') << conditions_as_query
@@ -363,10 +374,6 @@ module ThinkingSphinx
363
374
  end
364
375
  end
365
376
 
366
- def index
367
- options[:index] || '*'
368
- end
369
-
370
377
  def comment
371
378
  options[:comment] || ''
372
379
  end
@@ -408,9 +415,9 @@ module ThinkingSphinx
408
415
  end
409
416
 
410
417
  def field_names
411
- return [] if classes.length != 1
418
+ return [] unless one_class
412
419
 
413
- classes.first.sphinx_indexes.collect { |index|
420
+ one_class.sphinx_indexes.collect { |index|
414
421
  index.fields.collect { |field| field.unique_name }
415
422
  }.flatten
416
423
  end
@@ -548,15 +555,15 @@ MSG
548
555
  end
549
556
 
550
557
  def index_option(key)
551
- return nil if classes.length != 1
558
+ return nil unless one_class
552
559
 
553
- classes.first.sphinx_indexes.collect { |index|
560
+ one_class.sphinx_indexes.collect { |index|
554
561
  index.local_options[key]
555
562
  }.compact.first
556
563
  end
557
564
 
558
565
  def attribute(*keys)
559
- return nil if classes.length != 1
566
+ return nil unless one_class
560
567
 
561
568
  keys.detect { |key|
562
569
  attributes.include?(key)
@@ -564,9 +571,9 @@ MSG
564
571
  end
565
572
 
566
573
  def attributes
567
- return [] if classes.length != 1
574
+ return [] unless one_class
568
575
 
569
- attributes = classes.first.sphinx_indexes.collect { |index|
576
+ attributes = one_class.sphinx_indexes.collect { |index|
570
577
  index.attributes.collect { |attrib| attrib.unique_name }
571
578
  }.flatten
572
579
  end
@@ -618,7 +625,7 @@ MSG
618
625
  # the number of #find's in multi-model searches.
619
626
  #
620
627
  def instances_from_matches
621
- return single_class_results if classes.length == 1
628
+ return single_class_results if one_class
622
629
 
623
630
  groups = results[:matches].group_by { |match|
624
631
  match[:attributes]["class_crc"]
@@ -639,7 +646,7 @@ MSG
639
646
  end
640
647
 
641
648
  def single_class_results
642
- instances_from_class classes.first, results[:matches]
649
+ instances_from_class one_class, results[:matches]
643
650
  end
644
651
 
645
652
  def class_from_crc(crc)
@@ -655,12 +662,11 @@ MSG
655
662
  end
656
663
 
657
664
  def is_scope?(method)
658
- classes && classes.length == 1 &&
659
- classes.first.sphinx_scopes.include?(method)
665
+ one_class && one_class.sphinx_scopes.include?(method)
660
666
  end
661
667
 
662
668
  def add_scope(method, *args, &block)
663
- merge_search classes.first.send(method, *args, &block)
669
+ merge_search one_class.send(method, *args, &block)
664
670
  end
665
671
 
666
672
  def merge_search(search)
@@ -1,7 +1,7 @@
1
1
  require 'spec/spec_helper'
2
2
 
3
- describe "ThinkingSphinx::ActiveRecord" do
4
- describe "define_index method" do
3
+ describe ThinkingSphinx::ActiveRecord do
4
+ describe '.define_index' do
5
5
  before :each do
6
6
  module ::TestModule
7
7
  class TestModel < ActiveRecord::Base; end
@@ -154,7 +154,7 @@ describe "ThinkingSphinx::ActiveRecord" do
154
154
  end
155
155
  end
156
156
 
157
- describe "source_of_sphinx_index method" do
157
+ describe '.source_of_sphinx_index' do
158
158
  it "should return self if model defines an index" do
159
159
  Person.source_of_sphinx_index.should == Person
160
160
  end
@@ -164,13 +164,13 @@ describe "ThinkingSphinx::ActiveRecord" do
164
164
  end
165
165
  end
166
166
 
167
- describe "to_crc32 method" do
167
+ describe '.to_crc32' do
168
168
  it "should return an integer" do
169
169
  Person.to_crc32.should be_a_kind_of(Integer)
170
170
  end
171
171
  end
172
172
 
173
- describe "to_crc32s method" do
173
+ describe '.to_crc32s' do
174
174
  it "should return an array" do
175
175
  Person.to_crc32s.should be_a_kind_of(Array)
176
176
  end
@@ -351,4 +351,18 @@ describe "ThinkingSphinx::ActiveRecord" do
351
351
  @person.primary_key_for_sphinx.should == id
352
352
  end
353
353
  end
354
+
355
+ describe '.sphinx_index_names' do
356
+ it "should return the core index" do
357
+ Alpha.sphinx_index_names.should == ['alpha_core']
358
+ end
359
+
360
+ it "should return the delta index if enabled" do
361
+ Beta.sphinx_index_names.should == ['beta_core', 'beta_delta']
362
+ end
363
+
364
+ it "should return the superclass with an index definition" do
365
+ Parent.sphinx_index_names.should == ['person_core', 'person_delta']
366
+ end
367
+ end
354
368
  end
@@ -193,6 +193,14 @@ describe ThinkingSphinx::Search do
193
193
  search[3].id.should == 1
194
194
  end
195
195
 
196
+ it "should use the requested classes to generate the index argument" do
197
+ @client.should_receive(:query) do |query, index, comment|
198
+ index.should == 'alpha_core,beta_core,beta_delta'
199
+ end
200
+
201
+ ThinkingSphinx::Search.new(:classes => [Alpha, Beta]).first
202
+ end
203
+
196
204
  describe 'query' do
197
205
  it "should concatenate arguments with spaces" do
198
206
  @client.should_receive(:query) do |query, index, comment|
@@ -838,6 +846,27 @@ describe ThinkingSphinx::Search do
838
846
  end
839
847
  end
840
848
 
849
+ describe '#indexes' do
850
+ it "should default to '*'" do
851
+ ThinkingSphinx::Search.new.indexes.should == '*'
852
+ end
853
+
854
+ it "should use given class to determine index name" do
855
+ ThinkingSphinx::Search.new(:classes => [Alpha]).indexes.
856
+ should == 'alpha_core'
857
+ end
858
+
859
+ it "should add both core and delta indexes for given classes" do
860
+ ThinkingSphinx::Search.new(:classes => [Alpha, Beta]).indexes.
861
+ should == 'alpha_core,beta_core,beta_delta'
862
+ end
863
+
864
+ it "should respect the :index option" do
865
+ ThinkingSphinx::Search.new(:classes => [Alpha], :index => '*').indexes.
866
+ should == '*'
867
+ end
868
+ end
869
+
841
870
  describe '.each_with_groupby_and_count' do
842
871
  before :each do
843
872
  @alpha = Alpha.new
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: freelancing-god-thinking-sphinx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.9
4
+ version: 1.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pat Allan
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-05 00:00:00 -07:00
12
+ date: 2009-09-12 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency