thinking-sphinx 1.3.15 → 1.3.16
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/thinking_sphinx.rb +15 -6
- data/lib/thinking_sphinx/active_record/has_many_association.rb +33 -11
- data/lib/thinking_sphinx/adapters/abstract_adapter.rb +4 -0
- data/lib/thinking_sphinx/attribute.rb +39 -21
- data/lib/thinking_sphinx/auto_version.rb +1 -1
- data/lib/thinking_sphinx/configuration.rb +3 -0
- data/lib/thinking_sphinx/field.rb +2 -4
- data/lib/thinking_sphinx/property.rb +8 -2
- data/lib/thinking_sphinx/search.rb +4 -2
- data/lib/thinking_sphinx/source/internal_properties.rb +2 -1
- data/spec/thinking_sphinx/active_record/has_many_association_spec.rb +17 -1
- data/spec/thinking_sphinx/attribute_spec.rb +22 -44
- data/spec/thinking_sphinx/auto_version_spec.rb +5 -5
- data/spec/thinking_sphinx/configuration_spec.rb +28 -0
- data/spec/thinking_sphinx/field_spec.rb +0 -41
- data/spec/thinking_sphinx/search_spec.rb +6 -1
- data/tasks/distribution.rb +2 -2
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.3.
|
1
|
+
1.3.16
|
data/lib/thinking_sphinx.rb
CHANGED
@@ -63,17 +63,26 @@ module ThinkingSphinx
|
|
63
63
|
# The collection of indexed models. Keep in mind that Rails lazily loads
|
64
64
|
# its classes, so this may not actually be populated with _all_ the models
|
65
65
|
# that have Sphinx indexes.
|
66
|
+
@@sphinx_mutex = Mutex.new
|
67
|
+
@@context = nil
|
68
|
+
|
66
69
|
def self.context
|
67
|
-
if
|
68
|
-
|
69
|
-
|
70
|
+
if @@context.nil?
|
71
|
+
@@sphinx_mutex.synchronize do
|
72
|
+
if @@context.nil?
|
73
|
+
@@context = ThinkingSphinx::Context.new
|
74
|
+
@@context.prepare
|
75
|
+
end
|
76
|
+
end
|
70
77
|
end
|
71
78
|
|
72
|
-
|
79
|
+
@@context
|
73
80
|
end
|
74
|
-
|
81
|
+
|
75
82
|
def self.reset_context!
|
76
|
-
|
83
|
+
@@sphinx_mutex.synchronize do
|
84
|
+
@@context = nil
|
85
|
+
end
|
77
86
|
end
|
78
87
|
|
79
88
|
def self.unique_id_expression(offset = nil)
|
@@ -2,28 +2,50 @@ module ThinkingSphinx
|
|
2
2
|
module ActiveRecord
|
3
3
|
module HasManyAssociation
|
4
4
|
def search(*args)
|
5
|
+
options = args.extract_options!
|
6
|
+
options[:with] ||= {}
|
7
|
+
options[:with].merge! default_filter
|
8
|
+
|
9
|
+
args << options
|
10
|
+
@reflection.klass.search(*args)
|
11
|
+
end
|
12
|
+
|
13
|
+
def method_missing(method, *args, &block)
|
14
|
+
if responds_to_scope(method)
|
15
|
+
@reflection.klass.
|
16
|
+
search(:with => default_filter).
|
17
|
+
send(method, *args, &block)
|
18
|
+
else
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def attribute_for_foreign_key
|
5
26
|
foreign_key = @reflection.primary_key_name
|
6
27
|
stack = [@reflection.options[:through]].compact
|
7
28
|
|
8
|
-
attribute = nil
|
9
29
|
@reflection.klass.define_indexes
|
10
30
|
(@reflection.klass.sphinx_indexes || []).each do |index|
|
11
31
|
attribute = index.attributes.detect { |attrib|
|
12
32
|
attrib.columns.length == 1 &&
|
13
33
|
attrib.columns.first.__name == foreign_key.to_sym
|
14
34
|
}
|
15
|
-
|
35
|
+
return attribute unless attribute.nil?
|
16
36
|
end
|
17
37
|
|
18
|
-
raise "Missing Attribute for Foreign Key #{foreign_key}"
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
38
|
+
raise "Missing Attribute for Foreign Key #{foreign_key}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def default_filter
|
42
|
+
{attribute_for_foreign_key.unique_name => @owner.id}
|
43
|
+
end
|
44
|
+
|
45
|
+
def responds_to_scope(scope)
|
46
|
+
@reflection.klass.respond_to?(:sphinx_scopes) &&
|
47
|
+
@reflection.klass.sphinx_scopes.include?(scope)
|
26
48
|
end
|
27
49
|
end
|
28
50
|
end
|
29
|
-
end
|
51
|
+
end
|
@@ -93,19 +93,18 @@ module ThinkingSphinx
|
|
93
93
|
|
94
94
|
separator = all_ints? || all_datetimes? || @crc ? ',' : ' '
|
95
95
|
|
96
|
-
clause =
|
97
|
-
part = column_with_prefix(column)
|
96
|
+
clause = columns_with_prefixes.collect { |column|
|
98
97
|
case type
|
99
98
|
when :string
|
100
|
-
adapter.convert_nulls(
|
99
|
+
adapter.convert_nulls(column)
|
101
100
|
when :datetime
|
102
|
-
adapter.cast_to_datetime(
|
101
|
+
adapter.cast_to_datetime(column)
|
103
102
|
when :multi
|
104
|
-
|
105
|
-
|
106
|
-
|
103
|
+
column = adapter.cast_to_datetime(column) if is_many_datetimes?
|
104
|
+
column = adapter.convert_nulls(column, '0') if is_many_ints?
|
105
|
+
column
|
107
106
|
else
|
108
|
-
|
107
|
+
column
|
109
108
|
end
|
110
109
|
}.join(', ')
|
111
110
|
|
@@ -123,7 +122,8 @@ module ThinkingSphinx
|
|
123
122
|
:string => :sql_attr_str2ordinal,
|
124
123
|
:float => :sql_attr_float,
|
125
124
|
:boolean => :sql_attr_bool,
|
126
|
-
:integer => :sql_attr_uint
|
125
|
+
:integer => :sql_attr_uint,
|
126
|
+
:bigint => :sql_attr_bigint
|
127
127
|
}[type]
|
128
128
|
end
|
129
129
|
|
@@ -301,19 +301,11 @@ WHERE #{@source.index.delta_object.clause(model, true)})
|
|
301
301
|
is_many? && all_strings?
|
302
302
|
end
|
303
303
|
|
304
|
-
def type_from_database
|
305
|
-
klass = @associations.values.flatten.first ?
|
306
|
-
@associations.values.flatten.first.reflection.klass : @model
|
307
|
-
|
308
|
-
column = klass.columns.detect { |col|
|
309
|
-
@columns.collect { |c| c.__name.to_s }.include? col.name
|
310
|
-
}
|
311
|
-
column.nil? ? nil : column.type
|
312
|
-
end
|
313
|
-
|
314
304
|
def translated_type_from_database
|
315
305
|
case type_from_db = type_from_database
|
316
|
-
when :
|
306
|
+
when :integer
|
307
|
+
integer_type_from_db
|
308
|
+
when :datetime, :string, :float, :boolean
|
317
309
|
type_from_db
|
318
310
|
when :decimal
|
319
311
|
:float
|
@@ -331,6 +323,32 @@ block:
|
|
331
323
|
end
|
332
324
|
end
|
333
325
|
|
326
|
+
def type_from_database
|
327
|
+
column = column_from_db
|
328
|
+
column.nil? ? nil : column.type
|
329
|
+
end
|
330
|
+
|
331
|
+
def integer_type_from_db
|
332
|
+
column = column_from_db
|
333
|
+
return nil if column.nil?
|
334
|
+
|
335
|
+
case column.sql_type
|
336
|
+
when adapter.bigint_pattern
|
337
|
+
:bigint
|
338
|
+
else
|
339
|
+
:integer
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
def column_from_db
|
344
|
+
klass = @associations.values.flatten.first ?
|
345
|
+
@associations.values.flatten.first.reflection.klass : @model
|
346
|
+
|
347
|
+
klass.columns.detect { |col|
|
348
|
+
@columns.collect { |c| c.__name.to_s }.include? col.name
|
349
|
+
}
|
350
|
+
end
|
351
|
+
|
334
352
|
def all_of_type?(*column_types)
|
335
353
|
@columns.all? { |col|
|
336
354
|
klasses = @associations[col].empty? ? [@model] :
|
@@ -359,4 +377,4 @@ block:
|
|
359
377
|
end
|
360
378
|
end
|
361
379
|
end
|
362
|
-
end
|
380
|
+
end
|
@@ -68,6 +68,7 @@ module ThinkingSphinx
|
|
68
68
|
:app_root, :model_directories, :delayed_job_priority
|
69
69
|
|
70
70
|
attr_accessor :source_options, :index_options
|
71
|
+
attr_accessor :version
|
71
72
|
|
72
73
|
attr_reader :environment, :configuration, :controller
|
73
74
|
|
@@ -114,7 +115,9 @@ module ThinkingSphinx
|
|
114
115
|
:charset_type => "utf-8"
|
115
116
|
}
|
116
117
|
|
118
|
+
self.version = nil
|
117
119
|
parse_config
|
120
|
+
self.version ||= @controller.sphinx_version
|
118
121
|
|
119
122
|
self
|
120
123
|
end
|
@@ -69,14 +69,12 @@ module ThinkingSphinx
|
|
69
69
|
# multiple data values (has_many or has_and_belongs_to_many associations).
|
70
70
|
#
|
71
71
|
def to_select_sql
|
72
|
-
clause =
|
73
|
-
column_with_prefix(column)
|
74
|
-
}.join(', ')
|
72
|
+
clause = columns_with_prefixes.join(', ')
|
75
73
|
|
76
74
|
clause = adapter.concatenate(clause) if concat_ws?
|
77
75
|
clause = adapter.group_concatenate(clause) if is_many?
|
78
76
|
|
79
|
-
"#{
|
77
|
+
"#{clause} AS #{quote_column(unique_name)}"
|
80
78
|
end
|
81
79
|
end
|
82
80
|
end
|
@@ -136,10 +136,16 @@ module ThinkingSphinx
|
|
136
136
|
assoc.has_column?(column.__name) ?
|
137
137
|
"#{quote_with_table(assoc.join.aliased_table_name, column.__name)}" :
|
138
138
|
nil
|
139
|
-
}.compact
|
139
|
+
}.compact
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
143
|
+
def columns_with_prefixes
|
144
|
+
@columns.collect { |column|
|
145
|
+
column_with_prefix column
|
146
|
+
}.flatten
|
147
|
+
end
|
148
|
+
|
143
149
|
# Gets a stack of associations for a specific path.
|
144
150
|
#
|
145
151
|
def association_stack(path, parent = nil)
|
@@ -159,4 +165,4 @@ module ThinkingSphinx
|
|
159
165
|
assocs
|
160
166
|
end
|
161
167
|
end
|
162
|
-
end
|
168
|
+
end
|
@@ -73,6 +73,8 @@ module ThinkingSphinx
|
|
73
73
|
@array = []
|
74
74
|
@options = args.extract_options!
|
75
75
|
@args = args
|
76
|
+
|
77
|
+
populate if @options[:populate]
|
76
78
|
end
|
77
79
|
|
78
80
|
def to_a
|
@@ -129,8 +131,8 @@ module ThinkingSphinx
|
|
129
131
|
# @param [Symbol] method The method name
|
130
132
|
# @return [Boolean] true if either Search or Array responds to the method.
|
131
133
|
#
|
132
|
-
def respond_to?(method)
|
133
|
-
super || @array.respond_to?(method)
|
134
|
+
def respond_to?(method, include_private = false)
|
135
|
+
super || @array.respond_to?(method, include_private)
|
134
136
|
end
|
135
137
|
|
136
138
|
# The current page number of the result set. Defaults to 1 if no page was
|
@@ -2,7 +2,8 @@ module ThinkingSphinx
|
|
2
2
|
class Source
|
3
3
|
module InternalProperties
|
4
4
|
def add_internal_attributes_and_facets
|
5
|
-
add_internal_attribute :sphinx_internal_id,
|
5
|
+
add_internal_attribute :sphinx_internal_id, nil,
|
6
|
+
@model.primary_key_for_sphinx.to_sym
|
6
7
|
add_internal_attribute :class_crc, :integer, crc_column, true
|
7
8
|
add_internal_attribute :subclass_crcs, :multi, subclasses_to_s
|
8
9
|
add_internal_attribute :sphinx_deleted, :integer, "0"
|
@@ -52,4 +52,20 @@ describe 'ThinkingSphinx::ActiveRecord::HasManyAssociation' do
|
|
52
52
|
@person.friends.search "test"
|
53
53
|
end
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
|
+
describe 'filtering sphinx scopes' do
|
57
|
+
before :each do
|
58
|
+
Friendship.stub!(:search => Friendship)
|
59
|
+
|
60
|
+
@person = Person.find(:first)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should add a filter for the attribute in a sphinx scope call" do
|
64
|
+
Friendship.should_receive(:search).with do |options|
|
65
|
+
options[:with][:person_id].should == @person.id
|
66
|
+
end
|
67
|
+
|
68
|
+
@person.friendships.reverse
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -47,47 +47,6 @@ describe ThinkingSphinx::Attribute do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
describe '#column_with_prefix' do
|
51
|
-
before :each do
|
52
|
-
@attribute = ThinkingSphinx::Attribute.new @source, [
|
53
|
-
ThinkingSphinx::Index::FauxColumn.new(:col_name)
|
54
|
-
]
|
55
|
-
@attribute.columns.each { |col| @attribute.associations[col] = [] }
|
56
|
-
@attribute.model = Person
|
57
|
-
|
58
|
-
@first_join = Object.new
|
59
|
-
@first_join.stub!(:aliased_table_name => "tabular")
|
60
|
-
@second_join = Object.new
|
61
|
-
@second_join.stub!(:aliased_table_name => "data")
|
62
|
-
|
63
|
-
@first_assoc = ThinkingSphinx::Association.new nil, nil
|
64
|
-
@first_assoc.stub!(:join => @first_join, :has_column? => true)
|
65
|
-
@second_assoc = ThinkingSphinx::Association.new nil, nil
|
66
|
-
@second_assoc.stub!(:join => @second_join, :has_column? => true)
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should return the column name if the column is a string" do
|
70
|
-
@attribute.columns = [ThinkingSphinx::Index::FauxColumn.new("string")]
|
71
|
-
@attribute.send(:column_with_prefix, @attribute.columns.first).should == "string"
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should return the column with model's table prefix if there's no associations for the column" do
|
75
|
-
@attribute.send(:column_with_prefix, @attribute.columns.first).should == "`people`.`col_name`"
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should return the column with its join table prefix if an association exists" do
|
79
|
-
column = @attribute.columns.first
|
80
|
-
@attribute.associations[column] = [@first_assoc]
|
81
|
-
@attribute.send(:column_with_prefix, column).should == "`tabular`.`col_name`"
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should return multiple columns concatenated if more than one association exists" do
|
85
|
-
column = @attribute.columns.first
|
86
|
-
@attribute.associations[column] = [@first_assoc, @second_assoc]
|
87
|
-
@attribute.send(:column_with_prefix, column).should == "`tabular`.`col_name`, `data`.`col_name`"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
50
|
describe '#to_select_sql' do
|
92
51
|
it "should convert a mixture of dates and datetimes to timestamps" do
|
93
52
|
attribute = ThinkingSphinx::Attribute.new(@source,
|
@@ -99,6 +58,16 @@ describe ThinkingSphinx::Attribute do
|
|
99
58
|
|
100
59
|
attribute.to_select_sql.should == "CONCAT_WS(',', UNIX_TIMESTAMP(`friendships`.`created_at`), UNIX_TIMESTAMP(`friendships`.`created_on`)) AS `times`"
|
101
60
|
end
|
61
|
+
|
62
|
+
it "should handle columns which don't exist for polymorphic joins" do
|
63
|
+
attribute = ThinkingSphinx::Attribute.new(@source,
|
64
|
+
[ ThinkingSphinx::Index::FauxColumn.new(:team, :name),
|
65
|
+
ThinkingSphinx::Index::FauxColumn.new(:team, :league) ],
|
66
|
+
:as => :team
|
67
|
+
)
|
68
|
+
|
69
|
+
attribute.to_select_sql.should == "CONCAT_WS(' ', IFNULL(`cricket_teams`.`name`, ''), IFNULL(`football_teams`.`name`, ''), IFNULL(`football_teams`.`league`, '')) AS `team`"
|
70
|
+
end
|
102
71
|
end
|
103
72
|
|
104
73
|
describe '#is_many?' do
|
@@ -183,15 +152,15 @@ describe ThinkingSphinx::Attribute do
|
|
183
152
|
|
184
153
|
it "should return the column type from the database if not :multi or more than one association" do
|
185
154
|
@column.send(:instance_variable_set, :@name, "birthday")
|
186
|
-
@attribute.
|
155
|
+
@attribute.type.should == :datetime
|
187
156
|
|
188
157
|
@attribute.send(:instance_variable_set, :@type, nil)
|
189
158
|
@column.send(:instance_variable_set, :@name, "first_name")
|
190
|
-
@attribute.
|
159
|
+
@attribute.type.should == :string
|
191
160
|
|
192
161
|
@attribute.send(:instance_variable_set, :@type, nil)
|
193
162
|
@column.send(:instance_variable_set, :@name, "id")
|
194
|
-
@attribute.
|
163
|
+
@attribute.type.should == :integer
|
195
164
|
end
|
196
165
|
|
197
166
|
it "should return :multi if the columns return multiple datetimes" do
|
@@ -200,6 +169,15 @@ describe ThinkingSphinx::Attribute do
|
|
200
169
|
|
201
170
|
@attribute.type.should == :multi
|
202
171
|
end
|
172
|
+
|
173
|
+
it "should return :bigint for 64bit integers" do
|
174
|
+
Person.columns.detect { |col|
|
175
|
+
col.name == 'id'
|
176
|
+
}.stub!(:sql_type => 'BIGINT(20)')
|
177
|
+
@column.send(:instance_variable_set, :@name, 'id')
|
178
|
+
|
179
|
+
@attribute.type.should == :bigint
|
180
|
+
end
|
203
181
|
end
|
204
182
|
|
205
183
|
describe '#all_ints?' do
|
@@ -3,14 +3,14 @@ require 'spec/spec_helper'
|
|
3
3
|
describe ThinkingSphinx::AutoVersion do
|
4
4
|
describe '.detect' do
|
5
5
|
before :each do
|
6
|
-
@
|
6
|
+
@config = ThinkingSphinx::Configuration.instance
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should require 0.9.8 if that is the detected version" do
|
10
10
|
ThinkingSphinx::AutoVersion.should_receive(:require).
|
11
11
|
with('riddle/0.9.8')
|
12
12
|
|
13
|
-
@
|
13
|
+
@config.stub!(:version => '0.9.8')
|
14
14
|
ThinkingSphinx::AutoVersion.detect
|
15
15
|
end
|
16
16
|
|
@@ -18,21 +18,21 @@ describe ThinkingSphinx::AutoVersion do
|
|
18
18
|
ThinkingSphinx::AutoVersion.should_receive(:require).
|
19
19
|
with('riddle/0.9.9')
|
20
20
|
|
21
|
-
@
|
21
|
+
@config.stub!(:version => '0.9.9')
|
22
22
|
ThinkingSphinx::AutoVersion.detect
|
23
23
|
end
|
24
24
|
|
25
25
|
it "should output a warning if the detected version is something else" do
|
26
26
|
STDERR.should_receive(:puts)
|
27
27
|
|
28
|
-
@
|
28
|
+
@config.stub!(:version => '0.9.7')
|
29
29
|
ThinkingSphinx::AutoVersion.detect
|
30
30
|
end
|
31
31
|
|
32
32
|
it "should output a warning if the version cannot be determined" do
|
33
33
|
STDERR.should_receive(:puts)
|
34
34
|
|
35
|
-
@
|
35
|
+
@config.stub!(:version => nil)
|
36
36
|
ThinkingSphinx::AutoVersion.detect
|
37
37
|
end
|
38
38
|
end
|
@@ -37,6 +37,34 @@ describe ThinkingSphinx::Configuration do
|
|
37
37
|
ThinkingSphinx::Configuration.environment.should == "development"
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
describe '#version' do
|
42
|
+
before :each do
|
43
|
+
@config = ThinkingSphinx::Configuration.instance
|
44
|
+
@config.reset
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should use the given version from sphinx.yml if there is one" do
|
48
|
+
open("#{RAILS_ROOT}/config/sphinx.yml", "w") do |f|
|
49
|
+
f.write YAML.dump({'development' => {'version' => '0.9.7'}})
|
50
|
+
end
|
51
|
+
@config.reset
|
52
|
+
|
53
|
+
@config.version.should == '0.9.7'
|
54
|
+
|
55
|
+
FileUtils.rm "#{RAILS_ROOT}/config/sphinx.yml"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should detect the version from Riddle otherwise" do
|
59
|
+
controller = @config.controller
|
60
|
+
controller.stub!(:sphinx_version => '0.9.6')
|
61
|
+
|
62
|
+
Riddle::Controller.stub!(:new => controller)
|
63
|
+
@config.reset
|
64
|
+
|
65
|
+
@config.version.should == '0.9.6'
|
66
|
+
end
|
67
|
+
end
|
40
68
|
|
41
69
|
describe "parse_config method" do
|
42
70
|
before :each do
|
@@ -77,47 +77,6 @@ describe ThinkingSphinx::Field do
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
describe "column_with_prefix method" do
|
81
|
-
before :each do
|
82
|
-
@field = ThinkingSphinx::Field.new @source, [
|
83
|
-
ThinkingSphinx::Index::FauxColumn.new(:col_name)
|
84
|
-
]
|
85
|
-
@field.columns.each { |col| @field.associations[col] = [] }
|
86
|
-
@field.model = Person
|
87
|
-
|
88
|
-
@first_join = Object.new
|
89
|
-
@first_join.stub!(:aliased_table_name => "tabular")
|
90
|
-
@second_join = Object.new
|
91
|
-
@second_join.stub!(:aliased_table_name => "data")
|
92
|
-
|
93
|
-
@first_assoc = ThinkingSphinx::Association.new nil, nil
|
94
|
-
@first_assoc.stub!(:join => @first_join, :has_column? => true)
|
95
|
-
@second_assoc = ThinkingSphinx::Association.new nil, nil
|
96
|
-
@second_assoc.stub!(:join => @second_join, :has_column? => true)
|
97
|
-
end
|
98
|
-
|
99
|
-
it "should return the column name if the column is a string" do
|
100
|
-
@field.columns = [ThinkingSphinx::Index::FauxColumn.new("string")]
|
101
|
-
@field.send(:column_with_prefix, @field.columns.first).should == "string"
|
102
|
-
end
|
103
|
-
|
104
|
-
it "should return the column with model's table prefix if there's no associations for the column" do
|
105
|
-
@field.send(:column_with_prefix, @field.columns.first).should == "`people`.`col_name`"
|
106
|
-
end
|
107
|
-
|
108
|
-
it "should return the column with its join table prefix if an association exists" do
|
109
|
-
column = @field.columns.first
|
110
|
-
@field.associations[column] = [@first_assoc]
|
111
|
-
@field.send(:column_with_prefix, column).should == "`tabular`.`col_name`"
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should return multiple columns concatenated if more than one association exists" do
|
115
|
-
column = @field.columns.first
|
116
|
-
@field.associations[column] = [@first_assoc, @second_assoc]
|
117
|
-
@field.send(:column_with_prefix, column).should == "`tabular`.`col_name`, `data`.`col_name`"
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
80
|
describe "is_many? method" do
|
122
81
|
before :each do
|
123
82
|
@assoc_a = stub('assoc', :is_many? => true)
|
@@ -43,7 +43,12 @@ describe ThinkingSphinx::Search do
|
|
43
43
|
|
44
44
|
it "should be true once the client request has been made" do
|
45
45
|
@search.first
|
46
|
-
@search.
|
46
|
+
@search.should be_populated
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should be populated if :populate is set to true" do
|
50
|
+
search = ThinkingSphinx::Search.new(:populate => true)
|
51
|
+
search.should be_populated
|
47
52
|
end
|
48
53
|
end
|
49
54
|
|
data/tasks/distribution.rb
CHANGED
@@ -28,8 +28,8 @@ Jeweler::Tasks.new do |gem|
|
|
28
28
|
]
|
29
29
|
|
30
30
|
gem.add_dependency 'activerecord', '>= 1.15.6'
|
31
|
-
gem.add_dependency 'riddle', '>= 1.0.
|
32
|
-
gem.add_dependency 'after_commit', '>= 1.0.
|
31
|
+
gem.add_dependency 'riddle', '>= 1.0.10'
|
32
|
+
gem.add_dependency 'after_commit', '>= 1.0.6'
|
33
33
|
|
34
34
|
gem.post_install_message = <<-MESSAGE
|
35
35
|
If you're upgrading, you should read this:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thinking-sphinx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.16
|
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: 2010-
|
12
|
+
date: 2010-02-16 00:00:00 +11:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.0.
|
33
|
+
version: 1.0.10
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: after_commit
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.0.
|
43
|
+
version: 1.0.6
|
44
44
|
version:
|
45
45
|
description: A concise and easy-to-use Ruby library that connects ActiveRecord to the Sphinx search daemon, managing configuration, indexing and searching.
|
46
46
|
email: pat@freelancing-gods.com
|