thinking-sphinx 1.3.16 → 1.3.17
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/{support → thinking_sphinx}/database.example.yml +0 -0
- data/features/thinking_sphinx/database.yml +4 -0
- data/features/{support → thinking_sphinx}/db/fixtures/alphas.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/authors.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/betas.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/boxes.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/categories.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/cats.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/comments.rb +1 -1
- data/features/{support → thinking_sphinx}/db/fixtures/developers.rb +2 -0
- data/features/{support → thinking_sphinx}/db/fixtures/dogs.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/extensible_betas.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/foxes.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/gammas.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/music.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/people.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/posts.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/robots.rb +0 -0
- data/features/{support → thinking_sphinx}/db/fixtures/tags.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_alphas.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_animals.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_authors.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_authors_posts.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_betas.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_boxes.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_categories.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_comments.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_developers.rb +0 -2
- data/features/{support → thinking_sphinx}/db/migrations/create_extensible_betas.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_gammas.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_genres.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_music.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_people.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_posts.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_robots.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_taggings.rb +0 -0
- data/features/{support → thinking_sphinx}/db/migrations/create_tags.rb +0 -0
- data/features/{support → thinking_sphinx}/models/alpha.rb +0 -0
- data/features/{support → thinking_sphinx}/models/animal.rb +0 -0
- data/features/{support → thinking_sphinx}/models/author.rb +0 -0
- data/features/{support → thinking_sphinx}/models/beta.rb +0 -0
- data/features/{support → thinking_sphinx}/models/box.rb +0 -0
- data/features/{support → thinking_sphinx}/models/cat.rb +0 -0
- data/features/{support → thinking_sphinx}/models/category.rb +0 -0
- data/features/{support → thinking_sphinx}/models/comment.rb +0 -0
- data/features/{support → thinking_sphinx}/models/developer.rb +2 -2
- data/features/{support → thinking_sphinx}/models/dog.rb +0 -0
- data/features/{support → thinking_sphinx}/models/extensible_beta.rb +1 -1
- data/features/{support → thinking_sphinx}/models/fox.rb +0 -0
- data/features/{support → thinking_sphinx}/models/gamma.rb +0 -0
- data/features/{support → thinking_sphinx}/models/genre.rb +0 -0
- data/features/{support → thinking_sphinx}/models/medium.rb +0 -0
- data/features/{support → thinking_sphinx}/models/music.rb +0 -0
- data/features/{support → thinking_sphinx}/models/person.rb +0 -0
- data/features/{support → thinking_sphinx}/models/post.rb +0 -0
- data/features/{support → thinking_sphinx}/models/robot.rb +0 -0
- data/features/{support → thinking_sphinx}/models/tag.rb +0 -0
- data/features/{support → thinking_sphinx}/models/tagging.rb +0 -0
- data/lib/cucumber/thinking_sphinx/internal_world.rb +4 -4
- data/lib/thinking_sphinx.rb +11 -1
- data/lib/thinking_sphinx/active_record.rb +12 -5
- data/lib/thinking_sphinx/context.rb +7 -4
- data/lib/thinking_sphinx/deltas/default_delta.rb +1 -1
- data/lib/thinking_sphinx/index/builder.rb +6 -6
- data/lib/thinking_sphinx/index/faux_column.rb +4 -0
- data/lib/thinking_sphinx/search.rb +3 -1
- data/lib/thinking_sphinx/source/internal_properties.rb +0 -1
- data/spec/thinking_sphinx/active_record/delta_spec.rb +1 -1
- data/spec/thinking_sphinx/active_record_spec.rb +6 -10
- data/spec/thinking_sphinx/index/builder_spec.rb +30 -30
- data/spec/thinking_sphinx/index/faux_column_spec.rb +7 -1
- data/spec/thinking_sphinx_spec.rb +27 -0
- data/tasks/distribution.rb +7 -0
- data/tasks/testing.rb +4 -0
- metadata +174 -75
- data/features/support/database.yml +0 -5
data/README.textile
CHANGED
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.3.
|
|
1
|
+
1.3.17
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -10,10 +10,10 @@ module Cucumber
|
|
|
10
10
|
|
|
11
11
|
def initialize
|
|
12
12
|
@temporary_directory = "#{Dir.pwd}/tmp"
|
|
13
|
-
@migrations_directory = "features/
|
|
14
|
-
@models_directory = "features/
|
|
15
|
-
@fixtures_directory = "features/
|
|
16
|
-
@database_file = "features/
|
|
13
|
+
@migrations_directory = "features/thinking_sphinx/db/migrations"
|
|
14
|
+
@models_directory = "features/thinking_sphinx/models"
|
|
15
|
+
@fixtures_directory = "features/thinking_sphinx/db/fixtures"
|
|
16
|
+
@database_file = "features/thinking_sphinx/database.yml"
|
|
17
17
|
|
|
18
18
|
@adapter = ENV['DATABASE'] || 'mysql'
|
|
19
19
|
@database = 'thinking_sphinx'
|
data/lib/thinking_sphinx.rb
CHANGED
|
@@ -70,7 +70,7 @@ module ThinkingSphinx
|
|
|
70
70
|
if @@context.nil?
|
|
71
71
|
@@sphinx_mutex.synchronize do
|
|
72
72
|
if @@context.nil?
|
|
73
|
-
|
|
73
|
+
set_context
|
|
74
74
|
@@context.prepare
|
|
75
75
|
end
|
|
76
76
|
end
|
|
@@ -78,12 +78,22 @@ module ThinkingSphinx
|
|
|
78
78
|
|
|
79
79
|
@@context
|
|
80
80
|
end
|
|
81
|
+
|
|
82
|
+
def self.set_context(*classes)
|
|
83
|
+
@@context = ThinkingSphinx::Context.new(*classes)
|
|
84
|
+
end
|
|
81
85
|
|
|
82
86
|
def self.reset_context!
|
|
83
87
|
@@sphinx_mutex.synchronize do
|
|
84
88
|
@@context = nil
|
|
85
89
|
end
|
|
86
90
|
end
|
|
91
|
+
|
|
92
|
+
def self.indexed_models=(classes = [])
|
|
93
|
+
@@sphinx_mutex.synchronize do
|
|
94
|
+
set_context *classes
|
|
95
|
+
end
|
|
96
|
+
end
|
|
87
97
|
|
|
88
98
|
def self.unique_id_expression(offset = nil)
|
|
89
99
|
"* #{context.indexed_models.size} + #{offset || 0}"
|
|
@@ -154,9 +154,7 @@ module ThinkingSphinx
|
|
|
154
154
|
end
|
|
155
155
|
|
|
156
156
|
self.sphinx_index_blocks << lambda {
|
|
157
|
-
|
|
158
|
-
add_sphinx_callbacks_and_extend(index.delta?)
|
|
159
|
-
add_sphinx_index index
|
|
157
|
+
add_sphinx_index name, &block
|
|
160
158
|
}
|
|
161
159
|
|
|
162
160
|
include ThinkingSphinx::ActiveRecord::Scopes
|
|
@@ -188,9 +186,18 @@ module ThinkingSphinx
|
|
|
188
186
|
end
|
|
189
187
|
end
|
|
190
188
|
|
|
191
|
-
def add_sphinx_index(
|
|
189
|
+
def add_sphinx_index(name, &block)
|
|
190
|
+
index = ThinkingSphinx::Index::Builder.generate self, name, &block
|
|
191
|
+
|
|
192
|
+
unless sphinx_indexes.any? { |i| i.name == index.name }
|
|
193
|
+
add_sphinx_callbacks_and_extend(index.delta?)
|
|
194
|
+
insert_sphinx_index index
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def insert_sphinx_index(index)
|
|
192
199
|
self.sphinx_indexes << index
|
|
193
|
-
subclasses.each { |klass| klass.
|
|
200
|
+
subclasses.each { |klass| klass.insert_sphinx_index(index) }
|
|
194
201
|
end
|
|
195
202
|
|
|
196
203
|
def has_sphinx_indexes?
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
class ThinkingSphinx::Context
|
|
2
2
|
attr_reader :indexed_models
|
|
3
3
|
|
|
4
|
-
def initialize
|
|
4
|
+
def initialize(*models)
|
|
5
5
|
@indexed_models = []
|
|
6
|
+
models.each do |model|
|
|
7
|
+
add_indexed_model model
|
|
8
|
+
end
|
|
6
9
|
end
|
|
7
10
|
|
|
8
11
|
def prepare
|
|
@@ -47,12 +50,12 @@ class ThinkingSphinx::Context
|
|
|
47
50
|
ThinkingSphinx::Configuration.instance.model_directories.each do |base|
|
|
48
51
|
Dir["#{base}**/*.rb"].each do |file|
|
|
49
52
|
model_name = file.gsub(/^#{base}([\w_\/\\]+)\.rb/, '\1')
|
|
50
|
-
|
|
53
|
+
|
|
51
54
|
next if model_name.nil?
|
|
52
55
|
next if ::ActiveRecord::Base.send(:subclasses).detect { |model|
|
|
53
|
-
model.name == model_name
|
|
56
|
+
model.name == model_name.camelize
|
|
54
57
|
}
|
|
55
|
-
|
|
58
|
+
|
|
56
59
|
begin
|
|
57
60
|
model_name.camelize.constantize
|
|
58
61
|
rescue LoadError
|
|
@@ -44,7 +44,7 @@ module ThinkingSphinx
|
|
|
44
44
|
config = ThinkingSphinx::Configuration.instance
|
|
45
45
|
rotate = ThinkingSphinx.sphinx_running? ? "--rotate" : ""
|
|
46
46
|
|
|
47
|
-
output = `#{config.bin_path}#{config.indexer_binary_name} --config #{config.config_file} #{rotate} #{model.delta_index_names.join(' ')}`
|
|
47
|
+
output = `#{config.bin_path}#{config.indexer_binary_name} --config '#{config.config_file}' #{rotate} #{model.delta_index_names.join(' ')}`
|
|
48
48
|
puts(output) unless ThinkingSphinx.suppress_delta_output?
|
|
49
49
|
end
|
|
50
50
|
|
|
@@ -119,13 +119,13 @@ module ThinkingSphinx
|
|
|
119
119
|
# database.
|
|
120
120
|
#
|
|
121
121
|
# Attributes are limited to the following types: integers, floats,
|
|
122
|
-
# datetimes (converted to timestamps), booleans and
|
|
123
|
-
# forget that Sphinx converts string attributes to
|
|
124
|
-
# useful for sorting, but that's about it.
|
|
122
|
+
# datetimes (converted to timestamps), booleans, strings and MVAs
|
|
123
|
+
# (:multi). Don't forget that Sphinx converts string attributes to
|
|
124
|
+
# integers, which are useful for sorting, but that's about it.
|
|
125
125
|
#
|
|
126
|
-
#
|
|
127
|
-
#
|
|
128
|
-
#
|
|
126
|
+
# Collection of integers are known as multi-value attributes (MVAs).
|
|
127
|
+
# Generally these would be through a has_many relationship, like in this
|
|
128
|
+
# example:
|
|
129
129
|
#
|
|
130
130
|
# has posts(:id), :as => :post_ids
|
|
131
131
|
#
|
|
@@ -50,6 +50,10 @@ module ThinkingSphinx
|
|
|
50
50
|
@name.is_a?(String) && @stack.empty?
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
+
def to_ary
|
|
54
|
+
[self]
|
|
55
|
+
end
|
|
56
|
+
|
|
53
57
|
# This handles any 'invalid' method calls and sets them as the name,
|
|
54
58
|
# and pushing the previous name into the stack. The object returns
|
|
55
59
|
# itself.
|
|
@@ -210,7 +210,9 @@ module ThinkingSphinx
|
|
|
210
210
|
return options[:index] if options[:index]
|
|
211
211
|
return '*' if classes.empty?
|
|
212
212
|
|
|
213
|
-
classes.collect { |klass|
|
|
213
|
+
classes.collect { |klass|
|
|
214
|
+
klass.sphinx_index_names
|
|
215
|
+
}.flatten.uniq.join(',')
|
|
214
216
|
end
|
|
215
217
|
|
|
216
218
|
def each_with_groupby_and_count(&block)
|
|
@@ -5,7 +5,6 @@ module ThinkingSphinx
|
|
|
5
5
|
add_internal_attribute :sphinx_internal_id, nil,
|
|
6
6
|
@model.primary_key_for_sphinx.to_sym
|
|
7
7
|
add_internal_attribute :class_crc, :integer, crc_column, true
|
|
8
|
-
add_internal_attribute :subclass_crcs, :multi, subclasses_to_s
|
|
9
8
|
add_internal_attribute :sphinx_deleted, :integer, "0"
|
|
10
9
|
|
|
11
10
|
add_internal_facet :class_crc
|
|
@@ -106,7 +106,7 @@ describe "ThinkingSphinx::ActiveRecord::Delta" do
|
|
|
106
106
|
|
|
107
107
|
it "should call indexer for the delta index" do
|
|
108
108
|
Person.sphinx_indexes.first.delta_object.should_receive(:`).with(
|
|
109
|
-
"#{ThinkingSphinx::Configuration.instance.bin_path}indexer --config #{ThinkingSphinx::Configuration.instance.config_file} --rotate person_delta"
|
|
109
|
+
"#{ThinkingSphinx::Configuration.instance.bin_path}indexer --config '#{ThinkingSphinx::Configuration.instance.config_file}' --rotate person_delta"
|
|
110
110
|
)
|
|
111
111
|
|
|
112
112
|
@person.send(:index_delta)
|
|
@@ -149,7 +149,7 @@ describe ThinkingSphinx::ActiveRecord do
|
|
|
149
149
|
Beta.should_receive(:before_save).with(:toggle_delta).once
|
|
150
150
|
|
|
151
151
|
Beta.define_index { indexes :name }
|
|
152
|
-
Beta.define_index {
|
|
152
|
+
Beta.define_index('foo') {
|
|
153
153
|
indexes :name
|
|
154
154
|
set_property :delta => true
|
|
155
155
|
}
|
|
@@ -193,7 +193,7 @@ describe ThinkingSphinx::ActiveRecord do
|
|
|
193
193
|
Beta.should_receive(:after_commit).with(:index_delta).once
|
|
194
194
|
|
|
195
195
|
Beta.define_index { indexes :name }
|
|
196
|
-
Beta.define_index {
|
|
196
|
+
Beta.define_index('foo') {
|
|
197
197
|
indexes :name
|
|
198
198
|
set_property :delta => true
|
|
199
199
|
}
|
|
@@ -541,11 +541,9 @@ describe ThinkingSphinx::ActiveRecord do
|
|
|
541
541
|
|
|
542
542
|
describe '.core_index_names' do
|
|
543
543
|
it "should return each index's core name" do
|
|
544
|
-
Alpha.define_index { indexes :name }
|
|
545
|
-
Alpha.define_index { indexes :name }
|
|
544
|
+
Alpha.define_index('foo') { indexes :name }
|
|
545
|
+
Alpha.define_index('bar') { indexes :name }
|
|
546
546
|
Alpha.define_indexes
|
|
547
|
-
Alpha.sphinx_indexes.first.name = 'foo'
|
|
548
|
-
Alpha.sphinx_indexes.last.name = 'bar'
|
|
549
547
|
|
|
550
548
|
Alpha.core_index_names.should == ['foo_core', 'bar_core']
|
|
551
549
|
end
|
|
@@ -553,12 +551,10 @@ describe ThinkingSphinx::ActiveRecord do
|
|
|
553
551
|
|
|
554
552
|
describe '.delta_index_names' do
|
|
555
553
|
it "should return index delta names, for indexes with deltas enabled" do
|
|
556
|
-
Alpha.define_index { indexes :name }
|
|
557
|
-
Alpha.define_index { indexes :name }
|
|
554
|
+
Alpha.define_index('foo') { indexes :name }
|
|
555
|
+
Alpha.define_index('bar') { indexes :name }
|
|
558
556
|
Alpha.define_indexes
|
|
559
|
-
Alpha.sphinx_indexes.first.name = 'foo'
|
|
560
557
|
Alpha.sphinx_indexes.first.delta_object = stub('delta')
|
|
561
|
-
Alpha.sphinx_indexes.last.name = 'bar'
|
|
562
558
|
|
|
563
559
|
Alpha.delta_index_names.should == ['foo_delta']
|
|
564
560
|
end
|
|
@@ -31,10 +31,10 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
31
31
|
@source.fields[1].unique_name.should == :last_name
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
it "should have two attributes alongside the
|
|
35
|
-
@source.attributes.length.should ==
|
|
36
|
-
@source.attributes[
|
|
37
|
-
@source.attributes[
|
|
34
|
+
it "should have two attributes alongside the three internal ones" do
|
|
35
|
+
@source.attributes.length.should == 5
|
|
36
|
+
@source.attributes[3].unique_name.should == :birthday
|
|
37
|
+
@source.attributes[4].unique_name.should == :internal_id
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
it "should have one condition" do
|
|
@@ -95,8 +95,8 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
95
95
|
@source.fields.length.should == 1
|
|
96
96
|
end
|
|
97
97
|
|
|
98
|
-
it "should have one attribute alongside the
|
|
99
|
-
@source.attributes.length.should ==
|
|
98
|
+
it "should have one attribute alongside the three internal ones" do
|
|
99
|
+
@source.attributes.length.should == 4
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
it "should set the attribute name to have the _sort suffix" do
|
|
@@ -126,8 +126,8 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
126
126
|
@source.fields.length.should == 1
|
|
127
127
|
end
|
|
128
128
|
|
|
129
|
-
it "should have one attribute alongside the
|
|
130
|
-
@source.attributes.length.should ==
|
|
129
|
+
it "should have one attribute alongside the three internal ones" do
|
|
130
|
+
@source.attributes.length.should == 4
|
|
131
131
|
end
|
|
132
132
|
|
|
133
133
|
it "should set the attribute name to have the _facet suffix" do
|
|
@@ -158,8 +158,8 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
158
158
|
Alpha.sphinx_facets.delete_at(-1)
|
|
159
159
|
end
|
|
160
160
|
|
|
161
|
-
it "should have just one attribute alongside the
|
|
162
|
-
@source.attributes.length.should ==
|
|
161
|
+
it "should have just one attribute alongside the three internal ones" do
|
|
162
|
+
@source.attributes.length.should == 4
|
|
163
163
|
end
|
|
164
164
|
end
|
|
165
165
|
|
|
@@ -177,8 +177,8 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
177
177
|
Person.sphinx_facets.delete_at(-1)
|
|
178
178
|
end
|
|
179
179
|
|
|
180
|
-
it "should have just one attribute alongside the
|
|
181
|
-
@source.attributes.length.should ==
|
|
180
|
+
it "should have just one attribute alongside the three internal ones" do
|
|
181
|
+
@source.attributes.length.should == 4
|
|
182
182
|
end
|
|
183
183
|
end
|
|
184
184
|
|
|
@@ -196,8 +196,8 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
196
196
|
Beta.sphinx_facets.delete_at(-1)
|
|
197
197
|
end
|
|
198
198
|
|
|
199
|
-
it "should have just one attribute alongside the
|
|
200
|
-
@source.attributes.length.should ==
|
|
199
|
+
it "should have just one attribute alongside the three internal ones" do
|
|
200
|
+
@source.attributes.length.should == 4
|
|
201
201
|
end
|
|
202
202
|
end
|
|
203
203
|
|
|
@@ -215,8 +215,8 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
215
215
|
Alpha.sphinx_facets.delete_at(-1)
|
|
216
216
|
end
|
|
217
217
|
|
|
218
|
-
it "should have just one attribute alongside the
|
|
219
|
-
@source.attributes.length.should ==
|
|
218
|
+
it "should have just one attribute alongside the three internal ones" do
|
|
219
|
+
@source.attributes.length.should == 4
|
|
220
220
|
end
|
|
221
221
|
end
|
|
222
222
|
|
|
@@ -234,8 +234,8 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
234
234
|
Person.sphinx_facets.delete_at(-1)
|
|
235
235
|
end
|
|
236
236
|
|
|
237
|
-
it "should have two attributes alongside the
|
|
238
|
-
@source.attributes.length.should ==
|
|
237
|
+
it "should have two attributes alongside the three internal ones" do
|
|
238
|
+
@source.attributes.length.should == 5
|
|
239
239
|
end
|
|
240
240
|
|
|
241
241
|
it "should set the facet attribute name to have the _facet suffix" do
|
|
@@ -266,8 +266,8 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
266
266
|
Person.sphinx_facets.delete_at(-1)
|
|
267
267
|
end
|
|
268
268
|
|
|
269
|
-
it "should have two attributes alongside the
|
|
270
|
-
@source.attributes.length.should ==
|
|
269
|
+
it "should have two attributes alongside the three internal ones" do
|
|
270
|
+
@source.attributes.length.should == 5
|
|
271
271
|
end
|
|
272
272
|
|
|
273
273
|
it "should set the facet attribute name to have the _facet suffix" do
|
|
@@ -305,8 +305,8 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
305
305
|
@source.fields.length.should == 1
|
|
306
306
|
end
|
|
307
307
|
|
|
308
|
-
it "should have one attribute alongside the
|
|
309
|
-
@source.attributes.length.should ==
|
|
308
|
+
it "should have one attribute alongside the three internal ones" do
|
|
309
|
+
@source.attributes.length.should == 4
|
|
310
310
|
end
|
|
311
311
|
|
|
312
312
|
it "should set the attribute name to have the _facet suffix" do
|
|
@@ -365,10 +365,10 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
365
365
|
@source.fields[1].unique_name.should == :last_name
|
|
366
366
|
end
|
|
367
367
|
|
|
368
|
-
it "should have two attributes alongside the
|
|
369
|
-
@source.attributes.length.should ==
|
|
370
|
-
@source.attributes[
|
|
371
|
-
@source.attributes[
|
|
368
|
+
it "should have two attributes alongside the three internal ones" do
|
|
369
|
+
@source.attributes.length.should == 5
|
|
370
|
+
@source.attributes[3].unique_name.should == :birthday
|
|
371
|
+
@source.attributes[4].unique_name.should == :internal_id
|
|
372
372
|
end
|
|
373
373
|
end
|
|
374
374
|
|
|
@@ -401,13 +401,13 @@ describe ThinkingSphinx::Index::Builder do
|
|
|
401
401
|
end
|
|
402
402
|
end
|
|
403
403
|
|
|
404
|
-
it "should have two attributes alongside the
|
|
405
|
-
@index.attributes.length.should ==
|
|
404
|
+
it "should have two attributes alongside the six internal ones" do
|
|
405
|
+
@index.attributes.length.should == 8
|
|
406
406
|
end
|
|
407
407
|
|
|
408
|
-
it "should have one attribute in each source alongside the
|
|
408
|
+
it "should have one attribute in each source alongside the three internal ones" do
|
|
409
409
|
@index.sources.each do |source|
|
|
410
|
-
source.attributes.length.should ==
|
|
410
|
+
source.attributes.length.should == 4
|
|
411
411
|
end
|
|
412
412
|
end
|
|
413
413
|
end
|
|
@@ -16,6 +16,22 @@ describe ThinkingSphinx do
|
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
+
describe '.set_context' do
|
|
20
|
+
before :each do
|
|
21
|
+
ThinkingSphinx.reset_context!
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should set the context instance" do
|
|
25
|
+
ThinkingSphinx.set_context
|
|
26
|
+
ThinkingSphinx.context.should be_a(ThinkingSphinx::Context)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should pass through any given arguments to the initialiser" do
|
|
30
|
+
ThinkingSphinx::Context.should_receive(:new).with(Alpha, Beta)
|
|
31
|
+
ThinkingSphinx.set_context Alpha, Beta
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
19
35
|
describe '.reset_context!' do
|
|
20
36
|
it "should remove the existing Context instance" do
|
|
21
37
|
existing = ThinkingSphinx.context
|
|
@@ -27,6 +43,17 @@ describe ThinkingSphinx do
|
|
|
27
43
|
end
|
|
28
44
|
end
|
|
29
45
|
|
|
46
|
+
describe '.indexed_models=' do
|
|
47
|
+
before :each do
|
|
48
|
+
ThinkingSphinx.reset_context!
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should set the indexed models for the context" do
|
|
52
|
+
ThinkingSphinx.indexed_models = [Alpha, Beta]
|
|
53
|
+
ThinkingSphinx.context.indexed_models.should == ['Alpha', 'Beta']
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
30
57
|
describe '.define_indexes?' do
|
|
31
58
|
it "should define indexes by default" do
|
|
32
59
|
ThinkingSphinx.define_indexes?.should be_true
|
data/tasks/distribution.rb
CHANGED
|
@@ -31,6 +31,13 @@ Jeweler::Tasks.new do |gem|
|
|
|
31
31
|
gem.add_dependency 'riddle', '>= 1.0.10'
|
|
32
32
|
gem.add_dependency 'after_commit', '>= 1.0.6'
|
|
33
33
|
|
|
34
|
+
gem.add_development_dependency "yard", ">= 0"
|
|
35
|
+
gem.add_development_dependency "rspec", ">= 1.2.9"
|
|
36
|
+
gem.add_development_dependency "cucumber", ">= 0"
|
|
37
|
+
gem.add_development_dependency "will_paginate", "2.3.11"
|
|
38
|
+
gem.add_development_dependency "ginger", "1.2.0"
|
|
39
|
+
gem.add_development_dependency "faker", "0.3.1"
|
|
40
|
+
|
|
34
41
|
gem.post_install_message = <<-MESSAGE
|
|
35
42
|
If you're upgrading, you should read this:
|
|
36
43
|
http://freelancing-god.github.com/ts/en/upgrading.html
|
data/tasks/testing.rb
CHANGED
|
@@ -7,6 +7,7 @@ Spec::Rake::SpecTask.new do |t|
|
|
|
7
7
|
t.spec_files = FileList['spec/**/*_spec.rb']
|
|
8
8
|
t.spec_opts << "-c"
|
|
9
9
|
end
|
|
10
|
+
task :spec => :check_dependencies
|
|
10
11
|
|
|
11
12
|
desc "Run all feature-set configurations"
|
|
12
13
|
task :features do |t|
|
|
@@ -26,6 +27,9 @@ namespace :features do
|
|
|
26
27
|
|
|
27
28
|
add_task :mysql, "Run feature-set against MySQL"
|
|
28
29
|
add_task :postgresql, "Run feature-set against PostgreSQL"
|
|
30
|
+
|
|
31
|
+
task :mysql => :check_dependencies
|
|
32
|
+
task :postgresql => :check_dependencies
|
|
29
33
|
end
|
|
30
34
|
|
|
31
35
|
desc "Generate RCov reports"
|
metadata
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: thinking-sphinx
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
4
|
+
prerelease: false
|
|
5
|
+
segments:
|
|
6
|
+
- 1
|
|
7
|
+
- 3
|
|
8
|
+
- 17
|
|
9
|
+
version: 1.3.17
|
|
5
10
|
platform: ruby
|
|
6
11
|
authors:
|
|
7
12
|
- Pat Allan
|
|
@@ -9,39 +14,131 @@ autorequire:
|
|
|
9
14
|
bindir: bin
|
|
10
15
|
cert_chain: []
|
|
11
16
|
|
|
12
|
-
date: 2010-
|
|
17
|
+
date: 2010-06-05 00:00:00 +10:00
|
|
13
18
|
default_executable:
|
|
14
19
|
dependencies:
|
|
15
20
|
- !ruby/object:Gem::Dependency
|
|
16
21
|
name: activerecord
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
prerelease: false
|
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
20
24
|
requirements:
|
|
21
25
|
- - ">="
|
|
22
26
|
- !ruby/object:Gem::Version
|
|
27
|
+
segments:
|
|
28
|
+
- 1
|
|
29
|
+
- 15
|
|
30
|
+
- 6
|
|
23
31
|
version: 1.15.6
|
|
24
|
-
|
|
32
|
+
type: :runtime
|
|
33
|
+
version_requirements: *id001
|
|
25
34
|
- !ruby/object:Gem::Dependency
|
|
26
35
|
name: riddle
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
prerelease: false
|
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
30
38
|
requirements:
|
|
31
39
|
- - ">="
|
|
32
40
|
- !ruby/object:Gem::Version
|
|
41
|
+
segments:
|
|
42
|
+
- 1
|
|
43
|
+
- 0
|
|
44
|
+
- 10
|
|
33
45
|
version: 1.0.10
|
|
34
|
-
|
|
46
|
+
type: :runtime
|
|
47
|
+
version_requirements: *id002
|
|
35
48
|
- !ruby/object:Gem::Dependency
|
|
36
49
|
name: after_commit
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
prerelease: false
|
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
40
52
|
requirements:
|
|
41
53
|
- - ">="
|
|
42
54
|
- !ruby/object:Gem::Version
|
|
55
|
+
segments:
|
|
56
|
+
- 1
|
|
57
|
+
- 0
|
|
58
|
+
- 6
|
|
43
59
|
version: 1.0.6
|
|
44
|
-
|
|
60
|
+
type: :runtime
|
|
61
|
+
version_requirements: *id003
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: yard
|
|
64
|
+
prerelease: false
|
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - ">="
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
segments:
|
|
70
|
+
- 0
|
|
71
|
+
version: "0"
|
|
72
|
+
type: :development
|
|
73
|
+
version_requirements: *id004
|
|
74
|
+
- !ruby/object:Gem::Dependency
|
|
75
|
+
name: rspec
|
|
76
|
+
prerelease: false
|
|
77
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
segments:
|
|
82
|
+
- 1
|
|
83
|
+
- 2
|
|
84
|
+
- 9
|
|
85
|
+
version: 1.2.9
|
|
86
|
+
type: :development
|
|
87
|
+
version_requirements: *id005
|
|
88
|
+
- !ruby/object:Gem::Dependency
|
|
89
|
+
name: cucumber
|
|
90
|
+
prerelease: false
|
|
91
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
segments:
|
|
96
|
+
- 0
|
|
97
|
+
version: "0"
|
|
98
|
+
type: :development
|
|
99
|
+
version_requirements: *id006
|
|
100
|
+
- !ruby/object:Gem::Dependency
|
|
101
|
+
name: will_paginate
|
|
102
|
+
prerelease: false
|
|
103
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
104
|
+
requirements:
|
|
105
|
+
- - "="
|
|
106
|
+
- !ruby/object:Gem::Version
|
|
107
|
+
segments:
|
|
108
|
+
- 2
|
|
109
|
+
- 3
|
|
110
|
+
- 11
|
|
111
|
+
version: 2.3.11
|
|
112
|
+
type: :development
|
|
113
|
+
version_requirements: *id007
|
|
114
|
+
- !ruby/object:Gem::Dependency
|
|
115
|
+
name: ginger
|
|
116
|
+
prerelease: false
|
|
117
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
|
118
|
+
requirements:
|
|
119
|
+
- - "="
|
|
120
|
+
- !ruby/object:Gem::Version
|
|
121
|
+
segments:
|
|
122
|
+
- 1
|
|
123
|
+
- 2
|
|
124
|
+
- 0
|
|
125
|
+
version: 1.2.0
|
|
126
|
+
type: :development
|
|
127
|
+
version_requirements: *id008
|
|
128
|
+
- !ruby/object:Gem::Dependency
|
|
129
|
+
name: faker
|
|
130
|
+
prerelease: false
|
|
131
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
|
132
|
+
requirements:
|
|
133
|
+
- - "="
|
|
134
|
+
- !ruby/object:Gem::Version
|
|
135
|
+
segments:
|
|
136
|
+
- 0
|
|
137
|
+
- 3
|
|
138
|
+
- 1
|
|
139
|
+
version: 0.3.1
|
|
140
|
+
type: :development
|
|
141
|
+
version_requirements: *id009
|
|
45
142
|
description: A concise and easy-to-use Ruby library that connects ActiveRecord to the Sphinx search daemon, managing configuration, indexing and searching.
|
|
46
143
|
email: pat@freelancing-gods.com
|
|
47
144
|
executables: []
|
|
@@ -113,18 +210,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
113
210
|
requirements:
|
|
114
211
|
- - ">="
|
|
115
212
|
- !ruby/object:Gem::Version
|
|
213
|
+
segments:
|
|
214
|
+
- 0
|
|
116
215
|
version: "0"
|
|
117
|
-
version:
|
|
118
216
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
217
|
requirements:
|
|
120
218
|
- - ">="
|
|
121
219
|
- !ruby/object:Gem::Version
|
|
220
|
+
segments:
|
|
221
|
+
- 0
|
|
122
222
|
version: "0"
|
|
123
|
-
version:
|
|
124
223
|
requirements: []
|
|
125
224
|
|
|
126
225
|
rubyforge_project:
|
|
127
|
-
rubygems_version: 1.3.
|
|
226
|
+
rubygems_version: 1.3.6
|
|
128
227
|
signing_key:
|
|
129
228
|
specification_version: 3
|
|
130
229
|
summary: ActiveRecord/Rails Sphinx library
|
|
@@ -158,66 +257,66 @@ test_files:
|
|
|
158
257
|
- features/step_definitions/search_steps.rb
|
|
159
258
|
- features/step_definitions/sphinx_steps.rb
|
|
160
259
|
- features/sti_searching.feature
|
|
161
|
-
- features/support/database.example.yml
|
|
162
|
-
- features/support/database.yml
|
|
163
|
-
- features/support/db/fixtures/alphas.rb
|
|
164
|
-
- features/support/db/fixtures/authors.rb
|
|
165
|
-
- features/support/db/fixtures/betas.rb
|
|
166
|
-
- features/support/db/fixtures/boxes.rb
|
|
167
|
-
- features/support/db/fixtures/categories.rb
|
|
168
|
-
- features/support/db/fixtures/cats.rb
|
|
169
|
-
- features/support/db/fixtures/comments.rb
|
|
170
|
-
- features/support/db/fixtures/developers.rb
|
|
171
|
-
- features/support/db/fixtures/dogs.rb
|
|
172
|
-
- features/support/db/fixtures/extensible_betas.rb
|
|
173
|
-
- features/support/db/fixtures/foxes.rb
|
|
174
|
-
- features/support/db/fixtures/gammas.rb
|
|
175
|
-
- features/support/db/fixtures/music.rb
|
|
176
|
-
- features/support/db/fixtures/people.rb
|
|
177
|
-
- features/support/db/fixtures/posts.rb
|
|
178
|
-
- features/support/db/fixtures/robots.rb
|
|
179
|
-
- features/support/db/fixtures/tags.rb
|
|
180
|
-
- features/support/db/migrations/create_alphas.rb
|
|
181
|
-
- features/support/db/migrations/create_animals.rb
|
|
182
|
-
- features/support/db/migrations/create_authors.rb
|
|
183
|
-
- features/support/db/migrations/create_authors_posts.rb
|
|
184
|
-
- features/support/db/migrations/create_betas.rb
|
|
185
|
-
- features/support/db/migrations/create_boxes.rb
|
|
186
|
-
- features/support/db/migrations/create_categories.rb
|
|
187
|
-
- features/support/db/migrations/create_comments.rb
|
|
188
|
-
- features/support/db/migrations/create_developers.rb
|
|
189
|
-
- features/support/db/migrations/create_extensible_betas.rb
|
|
190
|
-
- features/support/db/migrations/create_gammas.rb
|
|
191
|
-
- features/support/db/migrations/create_genres.rb
|
|
192
|
-
- features/support/db/migrations/create_music.rb
|
|
193
|
-
- features/support/db/migrations/create_people.rb
|
|
194
|
-
- features/support/db/migrations/create_posts.rb
|
|
195
|
-
- features/support/db/migrations/create_robots.rb
|
|
196
|
-
- features/support/db/migrations/create_taggings.rb
|
|
197
|
-
- features/support/db/migrations/create_tags.rb
|
|
198
260
|
- features/support/env.rb
|
|
199
261
|
- features/support/lib/generic_delta_handler.rb
|
|
200
|
-
- features/
|
|
201
|
-
- features/
|
|
202
|
-
- features/
|
|
203
|
-
- features/
|
|
204
|
-
- features/
|
|
205
|
-
- features/
|
|
206
|
-
- features/
|
|
207
|
-
- features/
|
|
208
|
-
- features/
|
|
209
|
-
- features/
|
|
210
|
-
- features/
|
|
211
|
-
- features/
|
|
212
|
-
- features/
|
|
213
|
-
- features/
|
|
214
|
-
- features/
|
|
215
|
-
- features/
|
|
216
|
-
- features/
|
|
217
|
-
- features/
|
|
218
|
-
- features/
|
|
219
|
-
- features/
|
|
220
|
-
- features/
|
|
262
|
+
- features/thinking_sphinx/database.example.yml
|
|
263
|
+
- features/thinking_sphinx/database.yml
|
|
264
|
+
- features/thinking_sphinx/db/fixtures/alphas.rb
|
|
265
|
+
- features/thinking_sphinx/db/fixtures/authors.rb
|
|
266
|
+
- features/thinking_sphinx/db/fixtures/betas.rb
|
|
267
|
+
- features/thinking_sphinx/db/fixtures/boxes.rb
|
|
268
|
+
- features/thinking_sphinx/db/fixtures/categories.rb
|
|
269
|
+
- features/thinking_sphinx/db/fixtures/cats.rb
|
|
270
|
+
- features/thinking_sphinx/db/fixtures/comments.rb
|
|
271
|
+
- features/thinking_sphinx/db/fixtures/developers.rb
|
|
272
|
+
- features/thinking_sphinx/db/fixtures/dogs.rb
|
|
273
|
+
- features/thinking_sphinx/db/fixtures/extensible_betas.rb
|
|
274
|
+
- features/thinking_sphinx/db/fixtures/foxes.rb
|
|
275
|
+
- features/thinking_sphinx/db/fixtures/gammas.rb
|
|
276
|
+
- features/thinking_sphinx/db/fixtures/music.rb
|
|
277
|
+
- features/thinking_sphinx/db/fixtures/people.rb
|
|
278
|
+
- features/thinking_sphinx/db/fixtures/posts.rb
|
|
279
|
+
- features/thinking_sphinx/db/fixtures/robots.rb
|
|
280
|
+
- features/thinking_sphinx/db/fixtures/tags.rb
|
|
281
|
+
- features/thinking_sphinx/db/migrations/create_alphas.rb
|
|
282
|
+
- features/thinking_sphinx/db/migrations/create_animals.rb
|
|
283
|
+
- features/thinking_sphinx/db/migrations/create_authors.rb
|
|
284
|
+
- features/thinking_sphinx/db/migrations/create_authors_posts.rb
|
|
285
|
+
- features/thinking_sphinx/db/migrations/create_betas.rb
|
|
286
|
+
- features/thinking_sphinx/db/migrations/create_boxes.rb
|
|
287
|
+
- features/thinking_sphinx/db/migrations/create_categories.rb
|
|
288
|
+
- features/thinking_sphinx/db/migrations/create_comments.rb
|
|
289
|
+
- features/thinking_sphinx/db/migrations/create_developers.rb
|
|
290
|
+
- features/thinking_sphinx/db/migrations/create_extensible_betas.rb
|
|
291
|
+
- features/thinking_sphinx/db/migrations/create_gammas.rb
|
|
292
|
+
- features/thinking_sphinx/db/migrations/create_genres.rb
|
|
293
|
+
- features/thinking_sphinx/db/migrations/create_music.rb
|
|
294
|
+
- features/thinking_sphinx/db/migrations/create_people.rb
|
|
295
|
+
- features/thinking_sphinx/db/migrations/create_posts.rb
|
|
296
|
+
- features/thinking_sphinx/db/migrations/create_robots.rb
|
|
297
|
+
- features/thinking_sphinx/db/migrations/create_taggings.rb
|
|
298
|
+
- features/thinking_sphinx/db/migrations/create_tags.rb
|
|
299
|
+
- features/thinking_sphinx/models/alpha.rb
|
|
300
|
+
- features/thinking_sphinx/models/animal.rb
|
|
301
|
+
- features/thinking_sphinx/models/author.rb
|
|
302
|
+
- features/thinking_sphinx/models/beta.rb
|
|
303
|
+
- features/thinking_sphinx/models/box.rb
|
|
304
|
+
- features/thinking_sphinx/models/cat.rb
|
|
305
|
+
- features/thinking_sphinx/models/category.rb
|
|
306
|
+
- features/thinking_sphinx/models/comment.rb
|
|
307
|
+
- features/thinking_sphinx/models/developer.rb
|
|
308
|
+
- features/thinking_sphinx/models/dog.rb
|
|
309
|
+
- features/thinking_sphinx/models/extensible_beta.rb
|
|
310
|
+
- features/thinking_sphinx/models/fox.rb
|
|
311
|
+
- features/thinking_sphinx/models/gamma.rb
|
|
312
|
+
- features/thinking_sphinx/models/genre.rb
|
|
313
|
+
- features/thinking_sphinx/models/medium.rb
|
|
314
|
+
- features/thinking_sphinx/models/music.rb
|
|
315
|
+
- features/thinking_sphinx/models/person.rb
|
|
316
|
+
- features/thinking_sphinx/models/post.rb
|
|
317
|
+
- features/thinking_sphinx/models/robot.rb
|
|
318
|
+
- features/thinking_sphinx/models/tag.rb
|
|
319
|
+
- features/thinking_sphinx/models/tagging.rb
|
|
221
320
|
- spec/thinking_sphinx/active_record/delta_spec.rb
|
|
222
321
|
- spec/thinking_sphinx/active_record/has_many_association_spec.rb
|
|
223
322
|
- spec/thinking_sphinx/active_record/scopes_spec.rb
|