freelancing-god-thinking-sphinx 1.2.7 → 1.2.8
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 +7 -0
- data/VERSION.yml +1 -1
- data/lib/thinking_sphinx/active_record.rb +1 -1
- data/lib/thinking_sphinx/attribute.rb +3 -1
- data/lib/thinking_sphinx/deploy/capistrano.rb +2 -1
- data/lib/thinking_sphinx/facet.rb +3 -1
- data/lib/thinking_sphinx/index/builder.rb +0 -1
- data/lib/thinking_sphinx/property.rb +2 -0
- data/spec/lib/thinking_sphinx/active_record/delta_spec.rb +1 -1
- data/spec/lib/thinking_sphinx/index/builder_spec.rb +100 -0
- data/spec/lib/thinking_sphinx/search_spec.rb +7 -7
- metadata +2 -2
data/README.textile
CHANGED
|
@@ -30,6 +30,10 @@ Alternatively, install the ginger gem directly from the freelancing-god github r
|
|
|
30
30
|
|
|
31
31
|
sudo gem sources -a http://gems.github.com
|
|
32
32
|
sudo gem install freelancing-god-ginger
|
|
33
|
+
|
|
34
|
+
Then install the cucumber, yard, jeweler and rspec gems. Make sure you have a git install version 1.6.0.0 or higher, otherwise the jeweler gem won't install.
|
|
35
|
+
|
|
36
|
+
sudo gem install cucumber yard jeweler rspec
|
|
33
37
|
|
|
34
38
|
Then set up your database:
|
|
35
39
|
|
|
@@ -148,3 +152,6 @@ Since I first released this library, there's been quite a few people who have su
|
|
|
148
152
|
* Jeffrey Chupp
|
|
149
153
|
* Rob Anderton
|
|
150
154
|
* Zach Inglis
|
|
155
|
+
* Ward Bekker
|
|
156
|
+
* Brian Terlson
|
|
157
|
+
* Christian Aust
|
data/VERSION.yml
CHANGED
|
@@ -281,7 +281,7 @@ module ThinkingSphinx
|
|
|
281
281
|
# @return [Integer] Unique record id for the purposes of Sphinx.
|
|
282
282
|
#
|
|
283
283
|
def primary_key_for_sphinx
|
|
284
|
-
|
|
284
|
+
read_attribute(self.class.primary_key_for_sphinx)
|
|
285
285
|
end
|
|
286
286
|
|
|
287
287
|
def sphinx_document_id
|
|
@@ -75,7 +75,9 @@ module ThinkingSphinx
|
|
|
75
75
|
@crc = options[:crc]
|
|
76
76
|
|
|
77
77
|
@type ||= :multi unless @query_source.nil?
|
|
78
|
-
|
|
78
|
+
if @type == :string && @crc
|
|
79
|
+
@type = is_many? ? :multi : :integer
|
|
80
|
+
end
|
|
79
81
|
|
|
80
82
|
source.attributes << self
|
|
81
83
|
end
|
|
@@ -91,8 +91,9 @@ DESC
|
|
|
91
91
|
|
|
92
92
|
def rake(*tasks)
|
|
93
93
|
rails_env = fetch(:rails_env, "production")
|
|
94
|
+
rake = fetch(:rake, "rake")
|
|
94
95
|
tasks.each do |t|
|
|
95
|
-
run "cd #{current_path}
|
|
96
|
+
run "cd #{current_path}; #{rake} RAILS_ENV=#{rails_env} #{t}"
|
|
96
97
|
end
|
|
97
98
|
end
|
|
98
99
|
end
|
|
@@ -95,7 +95,9 @@ module ThinkingSphinx
|
|
|
95
95
|
return nil unless object = object.send(method)
|
|
96
96
|
}
|
|
97
97
|
if object.is_a?(Array)
|
|
98
|
-
object.collect { |item| item.send(column.__name) }
|
|
98
|
+
object.collect { |item| item.send(column.__name) }.detect { |item|
|
|
99
|
+
item.to_crc32 == attribute_value
|
|
100
|
+
}
|
|
99
101
|
else
|
|
100
102
|
object.send(column.__name)
|
|
101
103
|
end
|
|
@@ -198,7 +198,6 @@ module ThinkingSphinx
|
|
|
198
198
|
# set_property :delta => true
|
|
199
199
|
# set_property :field_weights => {"name" => 100}
|
|
200
200
|
# set_property :order => "name ASC"
|
|
201
|
-
# set_property :include => :picture
|
|
202
201
|
# set_property :select => 'name'
|
|
203
202
|
#
|
|
204
203
|
# Also, the following two properties are particularly relevant for
|
|
@@ -14,6 +14,8 @@ module ThinkingSphinx
|
|
|
14
14
|
@faceted = options[:facet]
|
|
15
15
|
@admin = options[:admin]
|
|
16
16
|
|
|
17
|
+
@alias = @alias.to_sym unless @alias.blank?
|
|
18
|
+
|
|
17
19
|
@columns.each { |col|
|
|
18
20
|
@associations[col] = association_stack(col.__stack.clone).each { |assoc|
|
|
19
21
|
assoc.join_to(source.base)
|
|
@@ -53,6 +53,35 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
+
describe 'aliased field' do
|
|
57
|
+
before :each do
|
|
58
|
+
@index = ThinkingSphinx::Index::Builder.generate(Person) do
|
|
59
|
+
indexes first_name, :as => 'name'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
@source = @index.sources.first
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should store the alias as a symbol for consistency" do
|
|
66
|
+
@source.fields.last.unique_name.should == :name
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe 'aliased attribute' do
|
|
71
|
+
before :each do
|
|
72
|
+
@index = ThinkingSphinx::Index::Builder.generate(Person) do
|
|
73
|
+
indexes first_name
|
|
74
|
+
has :id, :as => 'real_id'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
@source = @index.sources.first
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should store the alias as a symbol for consistency" do
|
|
81
|
+
@source.attributes.last.unique_name.should == :real_id
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
56
85
|
describe "sortable field" do
|
|
57
86
|
before :each do
|
|
58
87
|
@index = ThinkingSphinx::Index::Builder.generate(Person) do
|
|
@@ -223,6 +252,77 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
223
252
|
end
|
|
224
253
|
end
|
|
225
254
|
|
|
255
|
+
describe 'faceted manual MVA' do
|
|
256
|
+
before :each do
|
|
257
|
+
@index = ThinkingSphinx::Index::Builder.generate(Person) do
|
|
258
|
+
indexes first_name
|
|
259
|
+
has 'SQL STATEMENT', :type => :multi, :as => :sql, :facet => true
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
@source = @index.sources.first
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
after :each do
|
|
266
|
+
Person.sphinx_facets.delete_at(-1)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
it "should have two attributes alongside the four internal ones" do
|
|
270
|
+
@source.attributes.length.should == 6
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
it "should set the facet attribute name to have the _facet suffix" do
|
|
274
|
+
@source.attributes.last.unique_name.should == :sql_facet
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
it "should keep the original attribute's name set as requested" do
|
|
278
|
+
@source.attributes[-2].unique_name.should == :sql
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
it "should set the attribute type to multi" do
|
|
282
|
+
@source.attributes.last.type.should == :multi
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
it "should set the attribute column to be the same as the field" do
|
|
286
|
+
@source.attributes.last.columns.length.should == 1
|
|
287
|
+
@source.attributes.last.columns.first.__name.should == 'SQL STATEMENT'
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
describe 'faceted MVA field' do
|
|
292
|
+
before :each do
|
|
293
|
+
@index = ThinkingSphinx::Index::Builder.generate(Person) do
|
|
294
|
+
indexes tags(:name), :as => :tags, :facet => true
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
@source = @index.sources.first
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
after :each do
|
|
301
|
+
Person.sphinx_facets.delete_at(-1)
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
it "should have one field" do
|
|
305
|
+
@source.fields.length.should == 1
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
it "should have one attribute alongside the four internal ones" do
|
|
309
|
+
@source.attributes.length.should == 5
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
it "should set the attribute name to have the _facet suffix" do
|
|
313
|
+
@source.attributes.last.unique_name.should == :tags_facet
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
it "should set the attribute type to multi" do
|
|
317
|
+
@source.attributes.last.type.should == :multi
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
it "should set the attribute column to be the same as the field" do
|
|
321
|
+
@source.attributes.last.columns.length.should == 1
|
|
322
|
+
@source.attributes.last.columns.first.__name.should == :name
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
|
|
226
326
|
describe "no fields" do
|
|
227
327
|
it "should raise an exception" do
|
|
228
328
|
lambda {
|
|
@@ -158,10 +158,10 @@ describe ThinkingSphinx::Search do
|
|
|
158
158
|
@alpha_a, @alpha_b = Alpha.new, Alpha.new
|
|
159
159
|
@beta_a, @beta_b = Beta.new, Beta.new
|
|
160
160
|
|
|
161
|
-
@alpha_a.stub! :id => 1, :
|
|
162
|
-
@alpha_b.stub! :id => 2, :
|
|
163
|
-
@beta_a.stub! :id => 1, :
|
|
164
|
-
@beta_b.stub! :id => 2, :
|
|
161
|
+
@alpha_a.stub! :id => 1, :read_attribute => 1
|
|
162
|
+
@alpha_b.stub! :id => 2, :read_attribute => 2
|
|
163
|
+
@beta_a.stub! :id => 1, :read_attribute => 1
|
|
164
|
+
@beta_b.stub! :id => 2, :read_attribute => 2
|
|
165
165
|
|
|
166
166
|
@client.stub! :query => {
|
|
167
167
|
:matches => minimal_result_hashes(@alpha_a, @beta_b, @alpha_b, @beta_a)
|
|
@@ -805,7 +805,7 @@ describe ThinkingSphinx::Search do
|
|
|
805
805
|
describe '.each_with_groupby_and_count' do
|
|
806
806
|
before :each do
|
|
807
807
|
@alpha = Alpha.new
|
|
808
|
-
@alpha.stub!(:id => 1, :
|
|
808
|
+
@alpha.stub!(:id => 1, :read_attribute => 1)
|
|
809
809
|
|
|
810
810
|
@client.stub! :query => {
|
|
811
811
|
:matches => [{
|
|
@@ -833,7 +833,7 @@ describe ThinkingSphinx::Search do
|
|
|
833
833
|
describe '.each_with_weighting' do
|
|
834
834
|
before :each do
|
|
835
835
|
@alpha = Alpha.new
|
|
836
|
-
@alpha.stub!(:id => 1, :
|
|
836
|
+
@alpha.stub!(:id => 1, :read_attribute => 1)
|
|
837
837
|
|
|
838
838
|
@client.stub! :query => {
|
|
839
839
|
:matches => [{
|
|
@@ -858,7 +858,7 @@ describe ThinkingSphinx::Search do
|
|
|
858
858
|
describe '.each_with_*' do
|
|
859
859
|
before :each do
|
|
860
860
|
@alpha = Alpha.new
|
|
861
|
-
@alpha.stub!(:id => 1, :
|
|
861
|
+
@alpha.stub!(:id => 1, :read_attribute => 1)
|
|
862
862
|
|
|
863
863
|
@client.stub! :query => {
|
|
864
864
|
:matches => [{
|
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.
|
|
4
|
+
version: 1.2.8
|
|
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-08-
|
|
12
|
+
date: 2009-08-23 00:00:00 -07:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|