mongoid-giza 0.3.0 → 0.4.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +11 -2
- data/README.md +2 -2
- data/lib/mongoid/giza.rb +14 -5
- data/lib/mongoid/giza/configuration.rb +1 -1
- data/lib/mongoid/giza/dynamic_index.rb +16 -3
- data/lib/mongoid/giza/index.rb +2 -1
- data/lib/mongoid/giza/indexer.rb +8 -3
- data/lib/mongoid/giza/version.rb +1 -1
- data/spec/mongoid/giza/dynamic_index_spec.rb +41 -4
- data/spec/mongoid/giza/index_spec.rb +5 -0
- data/spec/mongoid/giza/indexer_spec.rb +16 -10
- data/spec/mongoid/giza_spec.rb +33 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e001380b635b1d6791949047b359df006939e31
|
4
|
+
data.tar.gz: da994906999be72baff0a36730ef846bbfe3bcfb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7d42d8a4c29c6d664e5d450b2322ee3c21de92e01602f2924c9a6a94db2a433092d4224664888d7a4785a732403d636ec4abc37bff04801fa7e45e2dfcb2de2
|
7
|
+
data.tar.gz: c6fc8765245d9261839cdbe189fea7efff0ed22b841e0a6eac357322d51196279074cc4b926580dd7190d03d83c69a5ea288bebd86ded7add89902fcab2f1013
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,15 +1,24 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.4.0
|
4
|
+
|
5
|
+
* Do not render the configuration file on `Mongoid::Giza::Indexer#index!`
|
6
|
+
* Do not force the verbose indexing
|
7
|
+
* Added `Mongoid::Giza::giza_configuration` accessor
|
8
|
+
* Fix converting the index name to symbol
|
9
|
+
* Added `Mongoid::Giza::DynamicIndex#generate_index` method to generate the dynamic index for a single object
|
10
|
+
* Added `Mongoid::Giza#generate_dynamic_sphinx_indexes` method to generate all dynamic indexes for the object
|
11
|
+
|
3
12
|
## 0.3.0
|
4
13
|
|
5
14
|
* Downcase all fields' and attributes' names
|
6
15
|
* Made possible to selective remove generated indexes from the configuration -- `Mongoid::Giza::Configuration#remove_generated_indexes`
|
7
|
-
* Made possible to remove from the
|
16
|
+
* Made possible to remove from the configuration only the generated indexes of a model -- `Mongoid::Giza::clear_generated_sphinx_indexes_configuration`
|
8
17
|
|
9
18
|
## 0.2.0
|
10
19
|
|
11
20
|
* Use ERB to parse string settings of every section of the configuration
|
12
|
-
* Renamed `Mongoid::Giza::Indexer
|
21
|
+
* Renamed `Mongoid::Giza::Indexer#full_index` to `Mongoid::Giza::Indexer#full_index!`
|
13
22
|
* Always convert `Mongoid::Giza::Index::Field` and `Mongoid::Giza::Index::Attribute` names to symbol
|
14
23
|
|
15
24
|
## 0.1.0
|
data/README.md
CHANGED
@@ -144,9 +144,9 @@ There are 3 ways to populate the Sphinx index: use the model class' `sphinx_inde
|
|
144
144
|
|
145
145
|
* **sphinx_indexer!:** Will execute the indexer program only on the indexes of the class.
|
146
146
|
Does not regenerate dynamic indexes.
|
147
|
-
* **index!:** Will execute the indexer
|
147
|
+
* **index!:** Will execute the indexer.
|
148
148
|
Does not regenerate dynamic indexes.
|
149
|
-
* **full_index!:** Will regenerate dynamic indexes and execute the indexer program on all indexes.
|
149
|
+
* **full_index!:** Will regenerate dynamic indexes, render the configuration file and execute the indexer program on all indexes.
|
150
150
|
|
151
151
|
This gem does not execute none of those automatically to let the you define what is the best reindexing strategy for your software.
|
152
152
|
|
data/lib/mongoid/giza.rb
CHANGED
@@ -59,8 +59,17 @@ module Mongoid
|
|
59
59
|
self[:giza_id]
|
60
60
|
end
|
61
61
|
|
62
|
+
# Generates all the dynamic indexes defined on the class for the object
|
63
|
+
def generate_dynamic_sphinx_indexes
|
64
|
+
self.class.dynamic_sphinx_indexes.each do |dynamic_index|
|
65
|
+
index = dynamic_index.generate_index(self)
|
66
|
+
self.class.generated_sphinx_indexes.merge!({index.name => index})
|
67
|
+
self.class.giza_configuration.add_index(index, true)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
62
71
|
module ClassMethods
|
63
|
-
attr_reader :static_sphinx_indexes, :generated_sphinx_indexes, :dynamic_sphinx_indexes
|
72
|
+
attr_reader :giza_configuration, :static_sphinx_indexes, :generated_sphinx_indexes, :dynamic_sphinx_indexes
|
64
73
|
|
65
74
|
# Class method that defines a index relative to the current class' objects.
|
66
75
|
# If an argument is given in the block then a dynamic index will be created.
|
@@ -98,7 +107,7 @@ module Mongoid
|
|
98
107
|
index = Index.new(self, settings)
|
99
108
|
Docile.dsl_eval(index, &block)
|
100
109
|
static_sphinx_indexes[index.name] = index
|
101
|
-
|
110
|
+
giza_configuration.add_index(index)
|
102
111
|
end
|
103
112
|
|
104
113
|
# Generates the indexes from the dynamic index and
|
@@ -108,7 +117,7 @@ module Mongoid
|
|
108
117
|
def process_dynamic_sphinx_index(dynamic_index)
|
109
118
|
generated = dynamic_index.generate!
|
110
119
|
generated_sphinx_indexes.merge!(generated)
|
111
|
-
generated.each { |name, index|
|
120
|
+
generated.each { |name, index| giza_configuration.add_index(index, true) }
|
112
121
|
end
|
113
122
|
|
114
123
|
# Class method that implements a search DSL using a {Mongoid::Giza::Search} object.
|
@@ -119,7 +128,7 @@ module Mongoid
|
|
119
128
|
# @return [Array] an Array with Riddle result hashes containing an additional key with the name of the class.
|
120
129
|
# The value of this aditional key is a Mongoid::Criteria that return the actual objects of the match
|
121
130
|
def search(&block)
|
122
|
-
search = Mongoid::Giza::Search.new(
|
131
|
+
search = Mongoid::Giza::Search.new(giza_configuration.searchd.address, giza_configuration.searchd.port, *sphinx_indexes_names)
|
123
132
|
Docile.dsl_eval(search, &block)
|
124
133
|
results = search.run
|
125
134
|
results.each { |result| result[name.to_sym] = self.in(giza_id: result[:matches].map { |match| match[:doc] }) }
|
@@ -133,7 +142,7 @@ module Mongoid
|
|
133
142
|
|
134
143
|
# Removes all generated indexes of the class from the configuration
|
135
144
|
def clear_generated_sphinx_indexes_configuration
|
136
|
-
|
145
|
+
giza_configuration.remove_generated_indexes(generated_sphinx_indexes.keys)
|
137
146
|
end
|
138
147
|
|
139
148
|
# Execute the indexing routines of the indexes defined on the class.
|
@@ -111,7 +111,7 @@ module Mongoid
|
|
111
111
|
File.open(@file.output_path, "w") { |file| file.write(super) }
|
112
112
|
end
|
113
113
|
|
114
|
-
# Removes all Riddle::Index from the indices Array that
|
114
|
+
# Removes all Riddle::Index from the indices Array that were created from a generated {Mongoid::Giza::Index}
|
115
115
|
def clear_generated_indexes
|
116
116
|
@generated_indexes.each { |name, index| indices.delete(index) }
|
117
117
|
@generated_indexes = {}
|
@@ -21,16 +21,29 @@ module Mongoid
|
|
21
21
|
# The name of the index is unique so in case of a name collision,
|
22
22
|
# the last index to be generated is the one that will persist
|
23
23
|
#
|
24
|
-
# @return [Hash<Symbol, Mongoid::Giza::Index] an hash with every key being the index name
|
24
|
+
# @return [Hash<Symbol, Mongoid::Giza::Index>] an hash with every key being the index name
|
25
25
|
# and the value the index itself
|
26
26
|
def generate!
|
27
27
|
indexes = {}
|
28
28
|
klass.all.each do |object|
|
29
|
+
index = generate_index(object)
|
30
|
+
indexes[index.name] = index if !index.nil?
|
31
|
+
end
|
32
|
+
indexes
|
33
|
+
end
|
34
|
+
|
35
|
+
# Generates the index for the object passed as parameter.
|
36
|
+
# It is only generated if the object's class is the class or a subclass of the index's class
|
37
|
+
#
|
38
|
+
# @param object [Mongoid::Document] the object which the index block wil be evaluated for
|
39
|
+
#
|
40
|
+
# @return [Mongoid::Giza::Index, NilClass] the resulting index from the evaluation
|
41
|
+
# or nil if the object's class is not the index's class or a subclass of it
|
42
|
+
def generate_index(object)
|
43
|
+
if object.is_a?(klass)
|
29
44
|
index = Mongoid::Giza::Index.new(klass, settings)
|
30
45
|
Docile.dsl_eval(index, object, &block)
|
31
|
-
indexes[index.name] = index
|
32
46
|
end
|
33
|
-
indexes
|
34
47
|
end
|
35
48
|
end
|
36
49
|
end
|
data/lib/mongoid/giza/index.rb
CHANGED
@@ -83,7 +83,8 @@ module Mongoid
|
|
83
83
|
#
|
84
84
|
# @return [Symbol] The name of the index
|
85
85
|
def name(new_name = nil)
|
86
|
-
@name = new_name
|
86
|
+
@name = new_name.to_sym if !new_name.nil?
|
87
|
+
@name
|
87
88
|
end
|
88
89
|
|
89
90
|
# Defines the Mongoid::Criteria that will be used to retrive objects when indexing.
|
data/lib/mongoid/giza/indexer.rb
CHANGED
@@ -15,13 +15,18 @@ module Mongoid
|
|
15
15
|
def full_index!
|
16
16
|
@configuration.clear_generated_indexes
|
17
17
|
giza_classes.each { |klass| klass.regenerate_dynamic_sphinx_indexes }
|
18
|
+
@configuration.render
|
18
19
|
index!
|
19
20
|
end
|
20
21
|
|
21
|
-
#
|
22
|
+
# Executes the sphinx indexer
|
23
|
+
#
|
24
|
+
# @param indexes [Array<Symbol>] name of the indexes that should be indexed.
|
25
|
+
# If not provided all indexes from the configuration file are indexed
|
26
|
+
# @param options [Hash] additional options to pass to Riddle::Controller#index
|
27
|
+
# @option options [TrueClass, FalseClass] :verbose shows the indexer output
|
22
28
|
def index!(*indexes)
|
23
|
-
@
|
24
|
-
@controller.index(*indexes, verbose: true)
|
29
|
+
@controller.index(*indexes)
|
25
30
|
end
|
26
31
|
|
27
32
|
# @return [Array<Class>] all Mongoid models that include the {Mongoid::Giza} module
|
data/lib/mongoid/giza/version.rb
CHANGED
@@ -11,14 +11,22 @@ describe Mongoid::Giza::DynamicIndex do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
describe "generate!" do
|
14
|
-
let(:dynamic_index) { Mongoid::Giza::DynamicIndex.new(Object, {}, Proc.new {
|
14
|
+
let(:dynamic_index) { Mongoid::Giza::DynamicIndex.new(Object, {}, Proc.new { }) }
|
15
|
+
|
16
|
+
let(:index) { double("index") }
|
15
17
|
|
16
18
|
before do
|
17
19
|
klass = double("class")
|
18
|
-
index
|
19
|
-
allow(klass).to receive(:all) {
|
20
|
+
allow(index).to receive(:name) { :name }
|
21
|
+
allow(klass).to receive(:all) { Array.new(3) }
|
20
22
|
allow(klass).to receive(:name) { :class }
|
21
23
|
allow(dynamic_index).to receive(:klass) { klass }
|
24
|
+
allow(dynamic_index).to receive(:generate_index) { index }
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should generate index for each object of the class" do
|
28
|
+
expect(dynamic_index).to receive(:generate_index).exactly(3).times
|
29
|
+
dynamic_index.generate!
|
22
30
|
end
|
23
31
|
|
24
32
|
it "should return a collection of indexes" do
|
@@ -26,7 +34,36 @@ describe Mongoid::Giza::DynamicIndex do
|
|
26
34
|
end
|
27
35
|
|
28
36
|
it "should only return indexes with unique names" do
|
29
|
-
expect(dynamic_index.generate!.length).to eql(
|
37
|
+
expect(dynamic_index.generate!.length).to eql(1)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should not an Index if it's nil" do
|
41
|
+
allow(dynamic_index).to receive(:generate_index) { nil }
|
42
|
+
expect(dynamic_index.generate!.length).to eql(0)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "generate_index" do
|
47
|
+
let(:index) { double("index") }
|
48
|
+
|
49
|
+
before do
|
50
|
+
allow(Mongoid::Giza::Index).to receive(:new) { index }
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should check if the object is from the index's class" do
|
54
|
+
expect(Mongoid::Giza::DynamicIndex.new(String, {}, Proc.new { }).generate_index(Array.new)).to eql(nil)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should execute the index dsl on the parameter" do
|
58
|
+
object = Object.new
|
59
|
+
block = Proc.new { }
|
60
|
+
expect(Docile).to receive(:dsl_eval).with(index, object, &block)
|
61
|
+
Mongoid::Giza::DynamicIndex.new(Object, {}, block).generate_index(object)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should return an Index" do
|
65
|
+
allow(Docile).to receive(:dsl_eval) { index }
|
66
|
+
expect(Mongoid::Giza::DynamicIndex.new(String, {}, Proc.new { }).generate_index("")).to be(index)
|
30
67
|
end
|
31
68
|
end
|
32
69
|
end
|
@@ -124,6 +124,11 @@ describe Mongoid::Giza::Index do
|
|
124
124
|
index.name(:Index)
|
125
125
|
expect(index.name).to eql(:Index)
|
126
126
|
end
|
127
|
+
|
128
|
+
it "should be converted to symbol" do
|
129
|
+
index.name("Index")
|
130
|
+
expect(index.name).to eql(:Index)
|
131
|
+
end
|
127
132
|
end
|
128
133
|
|
129
134
|
describe "generate_xmlpipe2" do
|
@@ -10,23 +10,20 @@ describe Mongoid::Giza::Indexer do
|
|
10
10
|
let(:config) { Mongoid::Giza::Configuration.instance }
|
11
11
|
|
12
12
|
describe "index!" do
|
13
|
-
it "should create the sphinx configuration file" do
|
14
|
-
allow(@controller).to receive(:index)
|
15
|
-
expect(config).to receive(:render)
|
16
|
-
@indexer.index!
|
17
|
-
end
|
18
|
-
|
19
13
|
it "should execute the sphinx indexer" do
|
20
|
-
|
21
|
-
expect(@controller).to receive(:index).with(verbose: true)
|
14
|
+
expect(@controller).to receive(:index).with(no_args())
|
22
15
|
@indexer.index!
|
23
16
|
end
|
24
17
|
|
25
18
|
it "should accept an index list" do
|
26
|
-
|
27
|
-
expect(@controller).to receive(:index).with(:Person, :Person_2, verbose: true)
|
19
|
+
expect(@controller).to receive(:index).with(:Person, :Person_2)
|
28
20
|
@indexer.index!(:Person, :Person_2)
|
29
21
|
end
|
22
|
+
|
23
|
+
it "should accept verbose option" do
|
24
|
+
expect(@controller).to receive(:index).with(verbose: true)
|
25
|
+
@indexer.index!(verbose: true)
|
26
|
+
end
|
30
27
|
end
|
31
28
|
|
32
29
|
describe "full_index!" do
|
@@ -34,6 +31,7 @@ describe Mongoid::Giza::Indexer do
|
|
34
31
|
|
35
32
|
before do
|
36
33
|
allow(@indexer).to receive(:index!)
|
34
|
+
allow(config).to receive(:render)
|
37
35
|
end
|
38
36
|
|
39
37
|
it "should clear the generated indexes from the configuration" do
|
@@ -50,6 +48,14 @@ describe Mongoid::Giza::Indexer do
|
|
50
48
|
@indexer.full_index!
|
51
49
|
end
|
52
50
|
|
51
|
+
it "should create the sphinx configuration file" do
|
52
|
+
allow(config).to receive(:clear_generated_indexes)
|
53
|
+
allow(@indexer).to receive(:giza_classes) { [klass] }
|
54
|
+
allow(klass).to receive(:regenerate_dynamic_sphinx_indexes)
|
55
|
+
expect(config).to receive(:render)
|
56
|
+
@indexer.full_index!
|
57
|
+
end
|
58
|
+
|
53
59
|
it "should execute the indexer" do
|
54
60
|
allow(config).to receive(:clear_generated_indexes)
|
55
61
|
allow(@indexer).to receive(:giza_classes) { [klass] }
|
data/spec/mongoid/giza_spec.rb
CHANGED
@@ -287,4 +287,37 @@ describe Mongoid::Giza do
|
|
287
287
|
Person.clear_generated_sphinx_indexes_configuration
|
288
288
|
end
|
289
289
|
end
|
290
|
+
|
291
|
+
describe "generate_dynamic_sphinx_indexes" do
|
292
|
+
let(:person) { Person.new }
|
293
|
+
|
294
|
+
let(:dynamic_index) { double("dynamic index") }
|
295
|
+
|
296
|
+
let(:dynamic_index2) { double("dynamic index 2") }
|
297
|
+
|
298
|
+
let(:index) { double("index") }
|
299
|
+
|
300
|
+
let(:index2) { double("index 2") }
|
301
|
+
|
302
|
+
before do
|
303
|
+
allow(Person).to receive(:dynamic_sphinx_indexes) { [dynamic_index, dynamic_index] }
|
304
|
+
allow(dynamic_index).to receive(:generate_index) { index }
|
305
|
+
allow(index).to receive(:name) { :name }
|
306
|
+
end
|
307
|
+
|
308
|
+
it "should generate all the dynamic indexes of the class for the object" do
|
309
|
+
expect(dynamic_index).to receive(:generate_index).with(person).twice { index }
|
310
|
+
person.generate_dynamic_sphinx_indexes
|
311
|
+
end
|
312
|
+
|
313
|
+
it "should merge the resulting indexes to the class' generated indexes" do
|
314
|
+
expect(Person.generated_sphinx_indexes).to receive(:merge!).with({name: index}).twice
|
315
|
+
person.generate_dynamic_sphinx_indexes
|
316
|
+
end
|
317
|
+
|
318
|
+
it "should add the indexes to the configuration" do
|
319
|
+
expect(config).to receive(:add_index).with(index, true).twice
|
320
|
+
person.generate_dynamic_sphinx_indexes
|
321
|
+
end
|
322
|
+
end
|
290
323
|
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.4.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-
|
11
|
+
date: 2014-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -223,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
223
|
version: '0'
|
224
224
|
requirements: []
|
225
225
|
rubyforge_project:
|
226
|
-
rubygems_version: 2.2.
|
226
|
+
rubygems_version: 2.2.2
|
227
227
|
signing_key:
|
228
228
|
specification_version: 4
|
229
229
|
summary: Mongoid layer for the Sphinx fulltext search server
|