mongoid-giza 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +13 -1
- data/lib/mongoid/giza.rb +10 -6
- data/lib/mongoid/giza/configuration.rb +4 -4
- data/lib/mongoid/giza/index.rb +1 -1
- data/lib/mongoid/giza/indexer.rb +4 -4
- data/lib/mongoid/giza/railtie.rb +1 -1
- data/lib/mongoid/giza/search.rb +4 -4
- data/lib/mongoid/giza/version.rb +1 -1
- data/spec/mongoid/giza/index_spec.rb +3 -3
- data/spec/mongoid/giza/indexer_spec.rb +4 -4
- data/spec/mongoid/giza/search_spec.rb +1 -1
- data/spec/mongoid/giza_spec.rb +38 -19
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 190b245876f472b085d4f2a25712e82e48e4a23e
|
4
|
+
data.tar.gz: 868320c19bf5078dc42faf5a961e03bcd11030b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc2e8850ef004ba24b8d0d5bd9ff3368b4b7ca2cf94c633cbbb47d3e36aa70b0150c1324c9538377b5e65477398ebc2726fd055c176fecdebef493fd2535a26a
|
7
|
+
data.tar.gz: fd62cd8173bcb5ca7323af64175fb2925bc11421372337916adbb131fc109578748337f3871fc0ff93e520034d868f6c004b8b8ca3291cedeae6518817772307
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.5.0
|
4
|
+
|
5
|
+
* Clear the generated indexes configuration when regenerating dynamic indexes
|
6
|
+
* Removed `Mongoid::Giza::clear_generated_sphinx_indexes_configuration` method
|
7
|
+
* Added `Mongoid::Giza::remove_generated_sphinx_indexes` method to remove selected generated indexes
|
8
|
+
* Changed the indexes names parameter of `Mongoid::Giza::Search#initialize` from splat to array
|
9
|
+
* Renamed `Mongoid::Giza#generate_dynamic_sphinx_indexes` to `Mongoid::Giza#generate_sphinx_indexes`
|
10
|
+
* Renamed `Mongoid::Giza::regenerate_dynamic_sphinx_indexes` to `Mongoid::Giza::regenerate_sphinx_indexes`
|
11
|
+
* Renamed `Mongoid::Giza::Index#generate_xmlpipe2` to `Mongoid::Giza::Index#xmlpipe2`
|
12
|
+
|
3
13
|
## 0.4.0
|
4
14
|
|
5
15
|
* Do not render the configuration file on `Mongoid::Giza::Indexer#index!`
|
data/README.md
CHANGED
@@ -46,7 +46,7 @@ development:
|
|
46
46
|
index:
|
47
47
|
path: "/tmp/sphinx"
|
48
48
|
source:
|
49
|
-
xmlpipe_command: "rails r '<%= index.klass %>.sphinx_indexes[:<%= index.name %>].
|
49
|
+
xmlpipe_command: "rails r '<%= index.klass %>.sphinx_indexes[:<%= index.name %>].xmlpipe2(STDOUT)'"
|
50
50
|
```
|
51
51
|
|
52
52
|
### Setting up indexes on models
|
@@ -138,6 +138,18 @@ class Person
|
|
138
138
|
end
|
139
139
|
```
|
140
140
|
|
141
|
+
##### Manipulating Dynamic Indexes
|
142
|
+
|
143
|
+
If your objects changed and this changes must be reflected on your dynamic indexes, call `Mongoid::Giza::regenerate_sphinx_indexes` to clear the existing ones and regenerate all again.
|
144
|
+
|
145
|
+
If you need finer control, you may use `Mongoid::Giza#generate_sphinx_indexes` to generate all dynamic indexes for the object (which will replace any existing one with the same name), and `Mongoid::Giza::remove_generated_sphinx_indexes` with the name of the generated indexes which you want to remove.
|
146
|
+
|
147
|
+
##### Difference Between Dynamic Index and Generated Index
|
148
|
+
|
149
|
+
A dynamic index is just the skeleton that creates indexes from every object of the class.
|
150
|
+
|
151
|
+
A generated index is the actual index that was dynamically created based on the object which the dynamic index used for evaluation.
|
152
|
+
|
141
153
|
### Indexing
|
142
154
|
|
143
155
|
There are 3 ways to populate the Sphinx index: use the model class' `sphinx_indexer!` method, `Mongoid::Giza::Indexer.instance.index!` or `Mongoid::Giza::Indexer.instance.full_index!`
|
data/lib/mongoid/giza.rb
CHANGED
@@ -60,7 +60,7 @@ module Mongoid
|
|
60
60
|
end
|
61
61
|
|
62
62
|
# Generates all the dynamic indexes defined on the class for the object
|
63
|
-
def
|
63
|
+
def generate_sphinx_indexes
|
64
64
|
self.class.dynamic_sphinx_indexes.each do |dynamic_index|
|
65
65
|
index = dynamic_index.generate_index(self)
|
66
66
|
self.class.generated_sphinx_indexes.merge!({index.name => index})
|
@@ -128,21 +128,25 @@ module Mongoid
|
|
128
128
|
# @return [Array] an Array with Riddle result hashes containing an additional key with the name of the class.
|
129
129
|
# The value of this aditional key is a Mongoid::Criteria that return the actual objects of the match
|
130
130
|
def search(&block)
|
131
|
-
search = Mongoid::Giza::Search.new(giza_configuration.searchd.address, giza_configuration.searchd.port,
|
131
|
+
search = Mongoid::Giza::Search.new(giza_configuration.searchd.address, giza_configuration.searchd.port, sphinx_indexes_names)
|
132
132
|
Docile.dsl_eval(search, &block)
|
133
133
|
results = search.run
|
134
134
|
results.each { |result| result[name.to_sym] = self.in(giza_id: result[:matches].map { |match| match[:doc] }) }
|
135
135
|
end
|
136
136
|
|
137
137
|
# Regenerates all dynamic indexes of the class
|
138
|
-
def
|
138
|
+
def regenerate_sphinx_indexes
|
139
|
+
giza_configuration.remove_generated_indexes(generated_sphinx_indexes.keys)
|
139
140
|
generated_sphinx_indexes.clear
|
140
141
|
dynamic_sphinx_indexes.each { |dynamic_index| process_dynamic_sphinx_index(dynamic_index) }
|
141
142
|
end
|
142
143
|
|
143
|
-
# Removes
|
144
|
-
|
145
|
-
|
144
|
+
# Removes the generated indexes.
|
145
|
+
#
|
146
|
+
# @param names [Array] a list of generated index names that should be removed
|
147
|
+
def remove_generated_sphinx_indexes(*names)
|
148
|
+
names.each { |name| generated_sphinx_indexes.delete(name) }
|
149
|
+
giza_configuration.remove_generated_indexes(names)
|
146
150
|
end
|
147
151
|
|
148
152
|
# Execute the indexing routines of the indexes defined on the class.
|
@@ -119,10 +119,10 @@ module Mongoid
|
|
119
119
|
|
120
120
|
# Removes Riddle::Index's specifieds as params
|
121
121
|
#
|
122
|
-
# @param
|
123
|
-
def remove_generated_indexes(
|
124
|
-
|
125
|
-
indices.delete(@generated_indexes.delete(
|
122
|
+
# @param names [Array<Symbol>] names of generated indexes that should be removed
|
123
|
+
def remove_generated_indexes(names)
|
124
|
+
names.each do |name|
|
125
|
+
indices.delete(@generated_indexes.delete(name))
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
data/lib/mongoid/giza/index.rb
CHANGED
@@ -99,7 +99,7 @@ module Mongoid
|
|
99
99
|
# Generates a XML document according to the XMLPipe2 specification from Sphinx
|
100
100
|
#
|
101
101
|
# @param buffer [#<<] any IO object that supports appending content using <<
|
102
|
-
def
|
102
|
+
def xmlpipe2(buffer)
|
103
103
|
Mongoid::Giza::XMLPipe2.new(self, buffer).generate!
|
104
104
|
end
|
105
105
|
end
|
data/lib/mongoid/giza/indexer.rb
CHANGED
@@ -14,19 +14,19 @@ module Mongoid
|
|
14
14
|
# Index everything, regenerating all dynamic indexes from all classes
|
15
15
|
def full_index!
|
16
16
|
@configuration.clear_generated_indexes
|
17
|
-
giza_classes.each { |klass| klass.
|
17
|
+
giza_classes.each { |klass| klass.regenerate_sphinx_indexes }
|
18
18
|
@configuration.render
|
19
19
|
index!
|
20
20
|
end
|
21
21
|
|
22
22
|
# Executes the sphinx indexer
|
23
23
|
#
|
24
|
-
# @param
|
24
|
+
# @param names [Array<Symbol>] name of the indexes that should be indexed.
|
25
25
|
# If not provided all indexes from the configuration file are indexed
|
26
26
|
# @param options [Hash] additional options to pass to Riddle::Controller#index
|
27
27
|
# @option options [TrueClass, FalseClass] :verbose shows the indexer output
|
28
|
-
def index!(*
|
29
|
-
@controller.index(*
|
28
|
+
def index!(*names)
|
29
|
+
@controller.index(*names)
|
30
30
|
end
|
31
31
|
|
32
32
|
# @return [Array<Class>] all Mongoid models that include the {Mongoid::Giza} module
|
data/lib/mongoid/giza/railtie.rb
CHANGED
@@ -7,7 +7,7 @@ module Mongoid
|
|
7
7
|
|
8
8
|
initializer "mongoid-giza.load-configuration" do
|
9
9
|
# Sets the default xmlpipe_command
|
10
|
-
configuration.source.xmlpipe_command = "rails r '<%= index.klass %>.sphinx_indexes[:<%= index.name %>].
|
10
|
+
configuration.source.xmlpipe_command = "rails r '<%= index.klass %>.sphinx_indexes[:<%= index.name %>].xmlpipe2(STDOUT)'"
|
11
11
|
# Loads the configuration file
|
12
12
|
file = Rails.root.join("config", "giza.yml")
|
13
13
|
configuration.load(file, Rails.env) if file.file?
|
data/lib/mongoid/giza/search.rb
CHANGED
@@ -10,11 +10,11 @@ module Mongoid
|
|
10
10
|
#
|
11
11
|
# @param host [String] the host address of sphinxd
|
12
12
|
# @param port [Fixnum] the TCP port of sphinxd
|
13
|
-
# @param
|
14
|
-
# Defaults to "
|
15
|
-
def initialize(host, port,
|
13
|
+
# @param names [Array] an optional array defining the indexes that the search will run on.
|
14
|
+
# Defaults to "[]" which means all indexes
|
15
|
+
def initialize(host, port, names = [])
|
16
16
|
@client = Riddle::Client.new(host, port)
|
17
|
-
@indexes =
|
17
|
+
@indexes = names
|
18
18
|
end
|
19
19
|
|
20
20
|
# Sets the search criteria on full-text fields
|
data/lib/mongoid/giza/version.rb
CHANGED
@@ -131,20 +131,20 @@ describe Mongoid::Giza::Index do
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
describe "
|
134
|
+
describe "xmlpipe2" do
|
135
135
|
let(:xmlpipe2) { double("XMLPipe2") }
|
136
136
|
|
137
137
|
let(:buffer) { double("buffer") }
|
138
138
|
|
139
139
|
it "should create a new XMLPipe2 object" do
|
140
140
|
expect(Mongoid::Giza::XMLPipe2).to receive(:new).with(index, buffer) { xmlpipe2.as_null_object }
|
141
|
-
index.
|
141
|
+
index.xmlpipe2(buffer)
|
142
142
|
end
|
143
143
|
|
144
144
|
it "should generate the xml" do
|
145
145
|
allow(Mongoid::Giza::XMLPipe2).to receive(:new) { xmlpipe2 }
|
146
146
|
expect(xmlpipe2).to receive(:generate!)
|
147
|
-
index.
|
147
|
+
index.xmlpipe2(buffer)
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
@@ -37,21 +37,21 @@ describe Mongoid::Giza::Indexer do
|
|
37
37
|
it "should clear the generated indexes from the configuration" do
|
38
38
|
expect(config).to receive(:clear_generated_indexes)
|
39
39
|
allow(@indexer).to receive(:giza_classes) { [klass] }
|
40
|
-
allow(klass).to receive(:
|
40
|
+
allow(klass).to receive(:regenerate_sphinx_indexes)
|
41
41
|
@indexer.full_index!
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should regenerate all dynamic indexes of the giza classes" do
|
45
45
|
allow(config).to receive(:clear_generated_indexes)
|
46
46
|
allow(@indexer).to receive(:giza_classes) { [klass] }
|
47
|
-
expect(klass).to receive(:
|
47
|
+
expect(klass).to receive(:regenerate_sphinx_indexes)
|
48
48
|
@indexer.full_index!
|
49
49
|
end
|
50
50
|
|
51
51
|
it "should create the sphinx configuration file" do
|
52
52
|
allow(config).to receive(:clear_generated_indexes)
|
53
53
|
allow(@indexer).to receive(:giza_classes) { [klass] }
|
54
|
-
allow(klass).to receive(:
|
54
|
+
allow(klass).to receive(:regenerate_sphinx_indexes)
|
55
55
|
expect(config).to receive(:render)
|
56
56
|
@indexer.full_index!
|
57
57
|
end
|
@@ -59,7 +59,7 @@ describe Mongoid::Giza::Indexer do
|
|
59
59
|
it "should execute the indexer" do
|
60
60
|
allow(config).to receive(:clear_generated_indexes)
|
61
61
|
allow(@indexer).to receive(:giza_classes) { [klass] }
|
62
|
-
allow(klass).to receive(:
|
62
|
+
allow(klass).to receive(:regenerate_sphinx_indexes)
|
63
63
|
expect(@indexer).to receive(:index!).with(no_args)
|
64
64
|
@indexer.full_index!
|
65
65
|
end
|
@@ -24,7 +24,7 @@ describe Mongoid::Giza::Search do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should accept a index list" do
|
27
|
-
indexes = Mongoid::Giza::Search.new("localhost", 9132, :index1, :index2).indexes
|
27
|
+
indexes = Mongoid::Giza::Search.new("localhost", 9132, [:index1, :index2]).indexes
|
28
28
|
expect(indexes).to eql([:index1, :index2])
|
29
29
|
end
|
30
30
|
end
|
data/spec/mongoid/giza_spec.rb
CHANGED
@@ -28,7 +28,7 @@ describe Mongoid::Giza do
|
|
28
28
|
|
29
29
|
let(:search) do
|
30
30
|
search = double("search")
|
31
|
-
allow(Mongoid::Giza::Search).to receive(:new).with("localhost", 9132) { search }
|
31
|
+
allow(Mongoid::Giza::Search).to receive(:new).with("localhost", 9132, []) { search }
|
32
32
|
search
|
33
33
|
end
|
34
34
|
|
@@ -145,7 +145,7 @@ describe Mongoid::Giza do
|
|
145
145
|
end
|
146
146
|
|
147
147
|
it "should create a search" do
|
148
|
-
expect(Mongoid::Giza::Search).to receive(:new).with("localhost", 9132, :Person, :Person_2) { double("search").as_null_object }
|
148
|
+
expect(Mongoid::Giza::Search).to receive(:new).with("localhost", 9132, [:Person, :Person_2]) { double("search").as_null_object }
|
149
149
|
Person.sphinx_index { }
|
150
150
|
Person.sphinx_index { name :Person_2 }
|
151
151
|
Person.search { }
|
@@ -261,34 +261,39 @@ describe Mongoid::Giza do
|
|
261
261
|
end
|
262
262
|
end
|
263
263
|
|
264
|
-
describe "
|
264
|
+
describe "regenerate_sphinx_indexes" do
|
265
265
|
let(:generated) { double("generated") }
|
266
266
|
|
267
267
|
let(:dynamic) { double("dynamic") }
|
268
268
|
|
269
|
-
|
269
|
+
let(:keys) { double("keys") }
|
270
|
+
|
271
|
+
before do
|
270
272
|
allow(Person).to receive(:generated_sphinx_indexes) { generated }
|
271
|
-
|
272
|
-
|
273
|
+
allow(generated).to receive(:keys) { keys }
|
274
|
+
allow(generated).to receive(:clear)
|
275
|
+
allow(config).to receive(:remove_generated_indexes)
|
276
|
+
end
|
277
|
+
|
278
|
+
it "should clear the generated indexes configuration" do
|
279
|
+
expect(config).to receive(:remove_generated_indexes).with(keys)
|
280
|
+
Person.regenerate_sphinx_indexes
|
281
|
+
end
|
282
|
+
|
283
|
+
it "should clear the generated indexes" do
|
284
|
+
expect(generated).to receive(:clear).with(no_args)
|
285
|
+
Person.regenerate_sphinx_indexes
|
273
286
|
end
|
274
287
|
|
275
288
|
it "should process all dynamic indexes" do
|
276
289
|
allow(Person).to receive(:dynamic_sphinx_indexes) { dynamic }
|
277
290
|
allow(dynamic).to receive(:each).and_yield(:dynamic_index)
|
278
291
|
expect(Person).to receive(:process_dynamic_sphinx_index).with(:dynamic_index)
|
279
|
-
Person.
|
292
|
+
Person.regenerate_sphinx_indexes
|
280
293
|
end
|
281
294
|
end
|
282
295
|
|
283
|
-
describe "
|
284
|
-
it "should remove all generated indexes of this class from the configuration" do
|
285
|
-
allow(Person).to receive(:generated_sphinx_indexes) { {index1: :index, index2: :index} }
|
286
|
-
expect(config).to receive(:remove_generated_indexes).with([:index1, :index2])
|
287
|
-
Person.clear_generated_sphinx_indexes_configuration
|
288
|
-
end
|
289
|
-
end
|
290
|
-
|
291
|
-
describe "generate_dynamic_sphinx_indexes" do
|
296
|
+
describe "generate_sphinx_indexes" do
|
292
297
|
let(:person) { Person.new }
|
293
298
|
|
294
299
|
let(:dynamic_index) { double("dynamic index") }
|
@@ -307,17 +312,31 @@ describe Mongoid::Giza do
|
|
307
312
|
|
308
313
|
it "should generate all the dynamic indexes of the class for the object" do
|
309
314
|
expect(dynamic_index).to receive(:generate_index).with(person).twice { index }
|
310
|
-
person.
|
315
|
+
person.generate_sphinx_indexes
|
311
316
|
end
|
312
317
|
|
313
318
|
it "should merge the resulting indexes to the class' generated indexes" do
|
314
319
|
expect(Person.generated_sphinx_indexes).to receive(:merge!).with({name: index}).twice
|
315
|
-
person.
|
320
|
+
person.generate_sphinx_indexes
|
316
321
|
end
|
317
322
|
|
318
323
|
it "should add the indexes to the configuration" do
|
319
324
|
expect(config).to receive(:add_index).with(index, true).twice
|
320
|
-
person.
|
325
|
+
person.generate_sphinx_indexes
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
describe "remove_generated_sphinx_indexes" do
|
330
|
+
let(:index_name) { double("index name") }
|
331
|
+
|
332
|
+
it "should remove the indexes from the generated indexes collection" do
|
333
|
+
expect(Person.generated_sphinx_indexes).to receive(:delete).with(index_name).twice
|
334
|
+
Person.remove_generated_sphinx_indexes(index_name, index_name)
|
335
|
+
end
|
336
|
+
|
337
|
+
it "should remove the indexes from the configuration" do
|
338
|
+
expect(config).to receive(:remove_generated_indexes).with([index_name, index_name])
|
339
|
+
Person.remove_generated_sphinx_indexes(index_name, index_name)
|
321
340
|
end
|
322
341
|
end
|
323
342
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-giza
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maurício Batista
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|