rmla 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +6 -0
- data/.rspec +1 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +139 -0
- data/LICENSE.txt +20 -0
- data/README.md +255 -0
- data/Rakefile +44 -0
- data/TODO.md +23 -0
- data/VERSION +1 -0
- data/lib/generators/mebla/install/USAGE +7 -0
- data/lib/generators/mebla/install/install_generator.rb +35 -0
- data/lib/generators/mebla/install/templates/mebla.yml +15 -0
- data/lib/mebla.rb +117 -0
- data/lib/mebla/configuration.rb +71 -0
- data/lib/mebla/context.rb +298 -0
- data/lib/mebla/errors.rb +11 -0
- data/lib/mebla/errors/mebla_configuration_exception.rb +10 -0
- data/lib/mebla/errors/mebla_error.rb +14 -0
- data/lib/mebla/errors/mebla_fatal.rb +14 -0
- data/lib/mebla/errors/mebla_index_exception.rb +10 -0
- data/lib/mebla/errors/mebla_synchronization_exception.rb +9 -0
- data/lib/mebla/log_subscriber.rb +74 -0
- data/lib/mebla/mongoid/mebla.rb +341 -0
- data/lib/mebla/railtie.rb +39 -0
- data/lib/mebla/result_set.rb +91 -0
- data/lib/mebla/search.rb +240 -0
- data/lib/mebla/tasks.rb +49 -0
- data/mebla.gemspec +113 -0
- data/spec/fixtures/models.rb +99 -0
- data/spec/fixtures/mongoid.yml +3 -0
- data/spec/mebla/indexing_spec.rb +165 -0
- data/spec/mebla/searching_spec.rb +142 -0
- data/spec/mebla/synchronizing_spec.rb +126 -0
- data/spec/mebla_helper.rb +33 -0
- data/spec/mebla_spec.rb +28 -0
- data/spec/spec_helper.rb +50 -0
- data/spec/support/mongoid.rb +3 -0
- data/spec/support/rails.rb +13 -0
- metadata +301 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
class MongoidAlpha
|
2
|
+
include Mongoid::Document
|
3
|
+
include Mongoid::Mebla
|
4
|
+
field :name
|
5
|
+
field :value, :type => Integer
|
6
|
+
field :cost, :type => Float
|
7
|
+
field :hidden
|
8
|
+
|
9
|
+
self.whiny_indexing = true
|
10
|
+
|
11
|
+
referenced_in :mongoid_epsilon
|
12
|
+
|
13
|
+
search_in :name, :cost, :value
|
14
|
+
end
|
15
|
+
|
16
|
+
class MongoidBeta
|
17
|
+
include Mongoid::Document
|
18
|
+
include Mongoid::Mebla
|
19
|
+
field :name
|
20
|
+
|
21
|
+
self.whiny_indexing = true
|
22
|
+
|
23
|
+
embeds_many :mongoid_gammas
|
24
|
+
|
25
|
+
search_in :name => {:boost => 2.0, :analyzer => 'snowball'}
|
26
|
+
end
|
27
|
+
|
28
|
+
class MongoidTheta < MongoidAlpha
|
29
|
+
field :extra
|
30
|
+
|
31
|
+
search_in :extra
|
32
|
+
end
|
33
|
+
|
34
|
+
class MongoidTau < MongoidAlpha
|
35
|
+
field :extra2
|
36
|
+
end
|
37
|
+
|
38
|
+
class MongoidDelta
|
39
|
+
include Mongoid::Document
|
40
|
+
include Mongoid::Mebla
|
41
|
+
field :name
|
42
|
+
|
43
|
+
self.whiny_indexing = true
|
44
|
+
end
|
45
|
+
|
46
|
+
class MongoidOmega < MongoidDelta
|
47
|
+
search_in :name
|
48
|
+
end
|
49
|
+
|
50
|
+
class MongoidZeta
|
51
|
+
include Mongoid::Document
|
52
|
+
include Mongoid::Mebla
|
53
|
+
field :name
|
54
|
+
field :an_array, :type => Array
|
55
|
+
|
56
|
+
search_in :name, :an_array
|
57
|
+
end
|
58
|
+
|
59
|
+
class MongoidGamma
|
60
|
+
include Mongoid::Document
|
61
|
+
include Mongoid::Mebla
|
62
|
+
field :name
|
63
|
+
field :value, :type => Integer
|
64
|
+
|
65
|
+
self.whiny_indexing = true
|
66
|
+
|
67
|
+
embedded_in :mongoid_beta
|
68
|
+
|
69
|
+
search_in :name, :value, :embedded_in => :mongoid_beta
|
70
|
+
end
|
71
|
+
|
72
|
+
class MongoidPi
|
73
|
+
include Mongoid::Document
|
74
|
+
include Mongoid::Mebla
|
75
|
+
field :name
|
76
|
+
|
77
|
+
self.whiny_indexing = true
|
78
|
+
|
79
|
+
references_one :mongoid_epsilon
|
80
|
+
|
81
|
+
search_in :name, :does_smth
|
82
|
+
|
83
|
+
def does_smth
|
84
|
+
"returns smth"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class MongoidEpsilon
|
89
|
+
include Mongoid::Document
|
90
|
+
include Mongoid::Mebla
|
91
|
+
field :name
|
92
|
+
|
93
|
+
self.whiny_indexing = true
|
94
|
+
|
95
|
+
referenced_in :mongoid_pi
|
96
|
+
references_many :mongoid_alphas
|
97
|
+
|
98
|
+
search_in :name, :search_relations => {:mongoid_pi => :name, :mongoid_alphas => [:name, :value]}
|
99
|
+
end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
require 'ruby-debug'
|
3
|
+
|
4
|
+
describe "Mebla" do
|
5
|
+
describe "indexing" do
|
6
|
+
it "should index existing records" do
|
7
|
+
Mebla.context.drop_index
|
8
|
+
|
9
|
+
fdocument = nil
|
10
|
+
ldocument = nil
|
11
|
+
|
12
|
+
MongoidAlpha.without_indexing do
|
13
|
+
fdocument = MongoidAlpha.create! :name => "Testing indexing bulkly", :value => 1, :cost => 1.0
|
14
|
+
ldocument = MongoidAlpha.create! :name => "Testing indexing bulkly other one", :value => 2, :cost => 2.0
|
15
|
+
end
|
16
|
+
|
17
|
+
Mebla.context.index_data
|
18
|
+
|
19
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_alpha, fdocument.id.to_s)}.should_not raise_error
|
20
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_alpha, ldocument.id.to_s)}.should_not raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should delete the existing index and create a new one" do
|
24
|
+
Mebla.context.rebuild_index.should_not == false
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should create the index with proper mapping" do
|
28
|
+
maps = Mebla.context.slingshot_index.mapping["mongoid_alpha"]["properties"]
|
29
|
+
maps["name"]["type"].should == "string"
|
30
|
+
maps["value"]["type"].should == "integer"
|
31
|
+
maps["cost"]["type"].should == "float"
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "array fields" do
|
35
|
+
it "should index arrays" do
|
36
|
+
Mebla.context.drop_index
|
37
|
+
|
38
|
+
zeta = nil
|
39
|
+
|
40
|
+
MongoidZeta.without_indexing do
|
41
|
+
zeta = MongoidZeta.create! :name => "Document with an array", :an_array => [:item, :item2]
|
42
|
+
end
|
43
|
+
|
44
|
+
Mebla.context.index_data
|
45
|
+
|
46
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_zeta, zeta.id.to_s)}.should_not raise_error
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "method fields" do
|
51
|
+
it "should index method results" do
|
52
|
+
Mebla.context.drop_index
|
53
|
+
|
54
|
+
pi = nil
|
55
|
+
|
56
|
+
MongoidPi.without_indexing do
|
57
|
+
pi = MongoidPi.create! :name => "Document with an indexed method"
|
58
|
+
end
|
59
|
+
|
60
|
+
Mebla.context.index_data
|
61
|
+
|
62
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_pi, pi.id.to_s)}.should_not raise_error
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "relational fields" do
|
67
|
+
it "should index relational fields" do
|
68
|
+
Mebla.context.drop_index
|
69
|
+
|
70
|
+
pi = nil
|
71
|
+
|
72
|
+
MongoidPi.without_indexing do
|
73
|
+
pi = MongoidPi.create! :name => "A pi"
|
74
|
+
end
|
75
|
+
|
76
|
+
alpha = nil
|
77
|
+
|
78
|
+
MongoidAlpha.without_indexing do
|
79
|
+
alpha = MongoidAlpha.create! :name => "Testing index", :value => 1, :cost => 2.0
|
80
|
+
end
|
81
|
+
|
82
|
+
epsilon = nil
|
83
|
+
|
84
|
+
MongoidEpsilon.without_indexing do
|
85
|
+
epsilon = pi.create_mongoid_epsilon :name => "episilon", :mongoid_alphas => [alpha]
|
86
|
+
end
|
87
|
+
|
88
|
+
Mebla.context.index_data
|
89
|
+
|
90
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_epsilon, epsilon.id.to_s)}.should_not raise_error
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "for sub-classed documents" do
|
95
|
+
it "should index existing records" do
|
96
|
+
Mebla.context.drop_index
|
97
|
+
|
98
|
+
theta = nil
|
99
|
+
|
100
|
+
MongoidTheta.without_indexing do
|
101
|
+
theta = MongoidTheta.create! :extra => "Subclassed parent"
|
102
|
+
end
|
103
|
+
|
104
|
+
Mebla.context.index_data
|
105
|
+
|
106
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_theta, theta.id.to_s)}.should_not raise_error
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should not index non searchable subclassed models" do
|
110
|
+
Mebla.context.drop_index
|
111
|
+
|
112
|
+
tau = nil
|
113
|
+
MongoidAlpha.without_indexing do
|
114
|
+
MongoidAlpha.create! :name => "Testing indexing bulkly", :value => 1, :cost => 1.0
|
115
|
+
tau = MongoidTau.create! :extra2 => "Should not be indexed"
|
116
|
+
end
|
117
|
+
|
118
|
+
lambda {Mebla.context.index_data}.should_not raise_error
|
119
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_tau, tau.id.to_s)}.should raise_error
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should index only models with defined indecies" do
|
123
|
+
Mebla.context.drop_index
|
124
|
+
|
125
|
+
theta = nil
|
126
|
+
|
127
|
+
MongoidOmega.without_indexing do
|
128
|
+
theta = MongoidOmega.create! :name => "Subclassed parent"
|
129
|
+
end
|
130
|
+
|
131
|
+
lambda {Mebla.context.index_data}.should_not raise_error
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "for embedded documents" do
|
136
|
+
it "should index existing records" do
|
137
|
+
Mebla.context.drop_index
|
138
|
+
|
139
|
+
beta = nil
|
140
|
+
gamma = nil
|
141
|
+
|
142
|
+
MongoidBeta.without_indexing do
|
143
|
+
beta = MongoidBeta.create! :name => "Embedor parent"
|
144
|
+
MongoidGamma.without_indexing do
|
145
|
+
gamma = beta.mongoid_gammas.create :name => "Embedded", :value => 1
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
Mebla.context.index_data
|
150
|
+
|
151
|
+
lambda {
|
152
|
+
Slingshot::Configuration.client.get "#{Mebla::Configuration.instance.url}/#{Mebla.context.slingshot_index_name}/mongoid_gamma/#{gamma.id.to_s}?routing=#{beta.id.to_s}"
|
153
|
+
}.should_not raise_error
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should create the index with proper parent mapping" do
|
157
|
+
mappings = Mebla.context.slingshot_index.mapping["mongoid_gamma"]
|
158
|
+
routing = mappings["_routing"]
|
159
|
+
parent = mappings["_parent"]
|
160
|
+
routing["path"].should == "mongoid_beta_id"
|
161
|
+
parent["type"].should == "mongoid_beta"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "Mebla" do
|
4
|
+
describe "searching" do
|
5
|
+
before(:each) do
|
6
|
+
Mebla.context.rebuild_index
|
7
|
+
MongoidAlpha.create! :name => "Testing index", :value => 1, :cost => 2.0
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should search and return the only relevant result" do
|
11
|
+
results=MongoidAlpha.search "name: Testing index"
|
12
|
+
|
13
|
+
results.total.should == 1
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should search and return the only relevant result, and cast it into the correct class type" do
|
17
|
+
results=MongoidAlpha.search "name: Testing index"
|
18
|
+
|
19
|
+
results.first.class.should == MongoidAlpha
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "documents with arrays" do
|
23
|
+
before(:each) do
|
24
|
+
Mebla.context.rebuild_index
|
25
|
+
MongoidZeta.create! :name => "Document with array", :an_array => [:item, :item2]
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should return arrays correctly" do
|
29
|
+
results = MongoidZeta.search "Document with array"
|
30
|
+
|
31
|
+
results.first.an_array.class.should == Array
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should search within arrays" do
|
35
|
+
results = MongoidZeta.search "item2"
|
36
|
+
|
37
|
+
results.total.should == 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "documents with indexed methods" do
|
42
|
+
before(:each) do
|
43
|
+
Mebla.context.rebuild_index
|
44
|
+
MongoidPi.create! :name => "Document with an indexed method"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should search within indexed methods" do
|
48
|
+
results = MongoidPi.search "returns smth"
|
49
|
+
|
50
|
+
results.total.should == 1
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "documents with indexed relation fields" do
|
55
|
+
before(:each) do
|
56
|
+
Mebla.context.rebuild_index
|
57
|
+
pi = MongoidPi.create! :name => "A pi"
|
58
|
+
alpha = MongoidAlpha.create! :name => "Testing index", :value => 1, :cost => 2.0
|
59
|
+
epsilon = pi.create_mongoid_epsilon :name => "epsilon"#, :mongoid_alphas => [alpha] # currently there is a bug in setting the relation like this while creating the document
|
60
|
+
epsilon.mongoid_alphas << alpha
|
61
|
+
epsilon.save # another bug; mongoid doesn't raise the save callbacks for `<<` method
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should search within indexed fields from the relations" do
|
65
|
+
results = MongoidEpsilon.search "Testing index"
|
66
|
+
|
67
|
+
results.total.should == 1
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "multiple types" do
|
72
|
+
before(:each) do
|
73
|
+
MongoidBeta.create! :name => "Testing index"
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should search and return all results of all class types" do
|
77
|
+
results=Mebla.search "name: Testing index"
|
78
|
+
|
79
|
+
results.total.should == 2
|
80
|
+
(results.each.collect{|e| e.class} & [MongoidAlpha, MongoidBeta]).should =~ [MongoidAlpha, MongoidBeta]
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should search and return only results from the searched class type" do
|
84
|
+
results=MongoidAlpha.search "name: Testing index"
|
85
|
+
|
86
|
+
results.total.should == 1
|
87
|
+
results.first.class.should == MongoidAlpha
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "embedded documents" do
|
92
|
+
before(:each) do
|
93
|
+
beta = MongoidBeta.create! :name => "Embedor parent"
|
94
|
+
beta.mongoid_gammas.create :name => "Embedded", :value => 1
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should search and return the only relevant result" do
|
98
|
+
results=MongoidGamma.search "name: Embedded"
|
99
|
+
|
100
|
+
results.total.should == 1
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should search and return the only relevant result, and cast it into the correct class type" do
|
104
|
+
results=MongoidGamma.search "name: Embedded"
|
105
|
+
|
106
|
+
results.first.class.should == MongoidGamma
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "with options" do
|
111
|
+
before(:each) do
|
112
|
+
beta = MongoidBeta.create! :name => "Different map"
|
113
|
+
beta.mongoid_gammas.create :name => "Testing index 2", :value => 2
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should sort descending according to the criteria defined" do
|
117
|
+
Mebla.search("Testing index").desc(:value).first.class.should == MongoidGamma
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should sort ascending according to the criteria defined" do
|
121
|
+
Mebla.search("Testing index").asc(:value).first.class.should == MongoidAlpha
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should search and only return results matching the term defined" do
|
125
|
+
Mebla.search.term(:name, "index").total.should == 2
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should search and only return results matching the terms defined" do
|
129
|
+
Mebla.search.terms(:name, ["index", "map"]).total.should == 3
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should search and filter results according to the filters defined" do
|
133
|
+
Mebla.search.terms(:name, ["index", "map"]).only(:value => [1]).total.should == 1
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should search and return results along with facets" do
|
137
|
+
results = Mebla.search.terms(:name, ["index", "map"]).facet("values", :value)
|
138
|
+
results.facets["values"]["terms"].count.should == 2
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "Mebla" do
|
4
|
+
describe "synchronizing" do
|
5
|
+
before(:each) do
|
6
|
+
Mebla.context.rebuild_index
|
7
|
+
MongoidAlpha.create! :name => "Testing index", :value => 1, :cost => 2.0
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should index new documents automatically" do
|
11
|
+
mdocument = MongoidAlpha.first
|
12
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_alpha, mdocument.id.to_s)}.should_not raise_error
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should remove deleted documents from index automatically" do
|
16
|
+
mdocument = MongoidAlpha.first
|
17
|
+
doc_id = mdocument.id.to_s
|
18
|
+
mdocument.destroy
|
19
|
+
|
20
|
+
lambda {MongoidAlpha.slingshot_index.retrieve(:mongoid_alpha, doc_id)}.should raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should update the index automatically when a document is updated" do
|
24
|
+
udocument = MongoidAlpha.first
|
25
|
+
udocument.update_attributes(:cost => 3.1).should == true
|
26
|
+
|
27
|
+
result = Mebla.context.slingshot_index.retrieve(:mongoid_alpha, udocument.id.to_s)
|
28
|
+
result[:cost].should == 3.1
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "sub classes" do
|
33
|
+
before(:each) do
|
34
|
+
Mebla.context.rebuild_index
|
35
|
+
MongoidTheta.create! :extra => "Is this indexed?"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should index sub-classed documents automatically under the sub-class type" do
|
39
|
+
mdocument = MongoidTheta.first
|
40
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_theta, mdocument.id.to_s)}.should_not raise_error
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should index sub-classed documents automatically and correctly" do
|
44
|
+
pdocument = MongoidTheta.first
|
45
|
+
result = Mebla.context.slingshot_index.retrieve(:mongoid_theta, pdocument.id.to_s)
|
46
|
+
result[:extra].should == "Is this indexed?"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "documents with indexed method fields" do
|
51
|
+
before(:each) do
|
52
|
+
Mebla.context.rebuild_index
|
53
|
+
MongoidPi.create! :name => "Testing indexing methods"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should index method" do
|
57
|
+
pdocument = MongoidPi.first
|
58
|
+
|
59
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_pi, pdocument.id.to_s)}.should_not raise_error
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should index method fields documents automatically and correctly" do
|
63
|
+
pdocument = MongoidPi.first
|
64
|
+
result = Mebla.context.slingshot_index.retrieve(:mongoid_pi, pdocument.id.to_s)
|
65
|
+
result[:does_smth].should == "returns smth"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "documents with indexed relation fields" do
|
70
|
+
before(:each) do
|
71
|
+
Mebla.context.rebuild_index
|
72
|
+
pi = MongoidPi.create! :name => "A pi"
|
73
|
+
alpha = MongoidAlpha.create! :name => "Testing index", :value => 1, :cost => 2.0
|
74
|
+
epsilon = pi.create_mongoid_epsilon :name => "epsilon"#, :mongoid_alphas => [alpha] # currently there is a bug in setting the relation like this while creating the document
|
75
|
+
epsilon.mongoid_alphas << alpha
|
76
|
+
epsilon.save # another bug; mongoid doesn't raise the save callbacks for `<<` method
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should index documents with indexed fields from the relations" do
|
80
|
+
edocument = MongoidEpsilon.first
|
81
|
+
|
82
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_epsilon, edocument.id.to_s)}.should_not raise_error
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should index fields from the relations with the document" do
|
86
|
+
edocument = MongoidEpsilon.first
|
87
|
+
|
88
|
+
result = Mebla.context.slingshot_index.retrieve(:mongoid_epsilon, edocument.id.to_s)
|
89
|
+
result[:mongoid_pi][:name].should == "A pi"
|
90
|
+
result[:mongoid_alphas].is_a?(Array).should == true
|
91
|
+
result[:mongoid_alphas].first["name"].should == "Testing index"
|
92
|
+
result[:mongoid_alphas].first["value"].should == 1
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "array fields documents" do
|
97
|
+
it "should index array fields and retrieve them correctly" do
|
98
|
+
Mebla.context.rebuild_index
|
99
|
+
zdocument = MongoidZeta.create :name => "Document with array", :an_array => [:index, :index2, :index2]
|
100
|
+
|
101
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_zeta, zdocument.id.to_s)}.should_not raise_error
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should index array fields and retrieve them correctly" do
|
105
|
+
Mebla.context.rebuild_index
|
106
|
+
zdocument = MongoidZeta.create :name => "Document with array", :an_array => [:index, :index2, :index2]
|
107
|
+
|
108
|
+
lambda {Mebla.context.slingshot_index.retrieve(:mongoid_zeta, zdocument.id.to_s)}.should_not raise_error
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "embedded documents" do
|
113
|
+
before(:each) do
|
114
|
+
Mebla.context.rebuild_index
|
115
|
+
beta = MongoidBeta.create! :name => "Embedor parent"
|
116
|
+
beta.mongoid_gammas.create :name => "Embedded", :value => 1
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should index embedded documents automatically and link to the parent" do
|
120
|
+
mdocument = MongoidBeta.first.mongoid_gammas.first
|
121
|
+
lambda {
|
122
|
+
Slingshot::Configuration.client.get "#{Mebla::Configuration.instance.url}/#{Mebla.context.slingshot_index_name}/mongoid_gamma/#{mdocument.id.to_s}?routing=#{mdocument.mongoid_beta.id.to_s}"
|
123
|
+
}.should_not raise_error
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|