freelancing-god-thinking-sphinx 1.2.2 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
data/lib/thinking_sphinx.rb
CHANGED
@@ -227,6 +227,18 @@ module ThinkingSphinx
|
|
227
227
|
client
|
228
228
|
end
|
229
229
|
|
230
|
+
def models_by_crc
|
231
|
+
@models_by_crc ||= begin
|
232
|
+
ThinkingSphinx.indexed_models.inject({}) do |hash, model|
|
233
|
+
hash[model.constantize.to_crc32] = model
|
234
|
+
Object.subclasses_of(model.constantize).each { |subclass|
|
235
|
+
hash[subclass.to_crc32] = subclass.name
|
236
|
+
}
|
237
|
+
hash
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
230
242
|
private
|
231
243
|
|
232
244
|
# Parse the config/sphinx.yml file - if it exists - then use the attribute
|
@@ -493,10 +493,10 @@ module ThinkingSphinx
|
|
493
493
|
return {} unless options[:geo] || (options[:lat] && options[:lng])
|
494
494
|
|
495
495
|
{
|
496
|
-
:latitude
|
497
|
-
:longitude
|
498
|
-
:
|
499
|
-
:
|
496
|
+
:latitude => options[:geo] ? options[:geo].first : options[:lat],
|
497
|
+
:longitude => options[:geo] ? options[:geo].last : options[:lng],
|
498
|
+
:latitude_attribute => latitude_attr,
|
499
|
+
:longitude_attribute => longitude_attr
|
500
500
|
}
|
501
501
|
end
|
502
502
|
|
@@ -602,16 +602,7 @@ module ThinkingSphinx
|
|
602
602
|
end
|
603
603
|
|
604
604
|
def class_from_crc(crc)
|
605
|
-
|
606
|
-
ThinkingSphinx.indexed_models.inject({}) do |hash, model|
|
607
|
-
hash[model.constantize.to_crc32] = model
|
608
|
-
Object.subclasses_of(model.constantize).each { |subclass|
|
609
|
-
hash[subclass.to_crc32] = subclass.name
|
610
|
-
}
|
611
|
-
hash
|
612
|
-
end
|
613
|
-
end
|
614
|
-
@models_by_crc[crc].constantize
|
605
|
+
config.models_by_crc[crc].constantize
|
615
606
|
end
|
616
607
|
|
617
608
|
def each_with_attribute(attribute, &block)
|
@@ -244,4 +244,19 @@ describe ThinkingSphinx::Configuration do
|
|
244
244
|
@config.client.max_matches.should == 100
|
245
245
|
end
|
246
246
|
end
|
247
|
+
|
248
|
+
describe '#models_by_crc' do
|
249
|
+
before :each do
|
250
|
+
@config = ThinkingSphinx::Configuration.instance
|
251
|
+
end
|
252
|
+
|
253
|
+
it "should return a hash" do
|
254
|
+
@config.models_by_crc.should be_a(Hash)
|
255
|
+
end
|
256
|
+
|
257
|
+
it "should pair class names to their crc codes" do
|
258
|
+
@config.models_by_crc[Person.to_crc32].should == 'Person'
|
259
|
+
@config.models_by_crc[Alpha.to_crc32].should == 'Alpha'
|
260
|
+
end
|
261
|
+
end
|
247
262
|
end
|
@@ -563,8 +563,8 @@ describe ThinkingSphinx::Search do
|
|
563
563
|
:classes => [Alpha]
|
564
564
|
).first
|
565
565
|
|
566
|
-
@client.anchor[:
|
567
|
-
@client.anchor[:
|
566
|
+
@client.anchor[:latitude_attribute].should == :lat
|
567
|
+
@client.anchor[:longitude_attribute].should == :lng
|
568
568
|
end
|
569
569
|
|
570
570
|
it "should detect lat and lon attributes on the given model" do
|
@@ -573,8 +573,8 @@ describe ThinkingSphinx::Search do
|
|
573
573
|
:classes => [Beta]
|
574
574
|
).first
|
575
575
|
|
576
|
-
@client.anchor[:
|
577
|
-
@client.anchor[:
|
576
|
+
@client.anchor[:latitude_attribute].should == :lat
|
577
|
+
@client.anchor[:longitude_attribute].should == :lon
|
578
578
|
end
|
579
579
|
|
580
580
|
it "should detect latitude and longitude attributes on the given model" do
|
@@ -583,8 +583,8 @@ describe ThinkingSphinx::Search do
|
|
583
583
|
:classes => [Person]
|
584
584
|
).first
|
585
585
|
|
586
|
-
@client.anchor[:
|
587
|
-
@client.anchor[:
|
586
|
+
@client.anchor[:latitude_attribute].should == :latitude
|
587
|
+
@client.anchor[:longitude_attribute].should == :longitude
|
588
588
|
end
|
589
589
|
|
590
590
|
it "should accept manually defined latitude and longitude attributes" do
|
@@ -595,8 +595,8 @@ describe ThinkingSphinx::Search do
|
|
595
595
|
:longitude_attr => :leftright
|
596
596
|
).first
|
597
597
|
|
598
|
-
@client.anchor[:
|
599
|
-
@client.anchor[:
|
598
|
+
@client.anchor[:latitude_attribute].should == :updown
|
599
|
+
@client.anchor[:longitude_attribute].should == :leftright
|
600
600
|
end
|
601
601
|
|
602
602
|
it "should accept manually defined latitude and longitude attributes in the given model" do
|
@@ -605,8 +605,8 @@ describe ThinkingSphinx::Search do
|
|
605
605
|
:classes => [Friendship]
|
606
606
|
).first
|
607
607
|
|
608
|
-
@client.anchor[:
|
609
|
-
@client.anchor[:
|
608
|
+
@client.anchor[:latitude_attribute].should == :person_id
|
609
|
+
@client.anchor[:longitude_attribute].should == :person_id
|
610
610
|
end
|
611
611
|
|
612
612
|
it "should accept geo array for geo-position values" do
|