libcouchbase-mapo 1.4.1
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 +7 -0
- data/.gitignore +20 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +38 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +445 -0
- data/Rakefile +76 -0
- data/ext/README.md +6 -0
- data/ext/Rakefile +19 -0
- data/lib/libcouchbase.rb +40 -0
- data/lib/libcouchbase/bucket.rb +825 -0
- data/lib/libcouchbase/callbacks.rb +69 -0
- data/lib/libcouchbase/connection.rb +886 -0
- data/lib/libcouchbase/design_docs.rb +92 -0
- data/lib/libcouchbase/error.rb +68 -0
- data/lib/libcouchbase/ext/libcouchbase.rb +1175 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +61 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
- data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
- data/lib/libcouchbase/ext/libcouchbase/enums.rb +1007 -0
- data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
- data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
- data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
- data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
- data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
- data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
- data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
- data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +31 -0
- data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase_libuv.rb +22 -0
- data/lib/libcouchbase/ext/tasks.rb +39 -0
- data/lib/libcouchbase/n1ql.rb +78 -0
- data/lib/libcouchbase/query_full_text.rb +147 -0
- data/lib/libcouchbase/query_n1ql.rb +123 -0
- data/lib/libcouchbase/query_view.rb +135 -0
- data/lib/libcouchbase/results_fiber.rb +281 -0
- data/lib/libcouchbase/results_native.rb +220 -0
- data/lib/libcouchbase/subdoc_request.rb +139 -0
- data/lib/libcouchbase/version.rb +5 -0
- data/libcouchbase.gemspec +68 -0
- data/spec/bucket_spec.rb +290 -0
- data/spec/connection_spec.rb +257 -0
- data/spec/design_docs_spec.rb +31 -0
- data/spec/error_spec.rb +26 -0
- data/spec/fts_spec.rb +135 -0
- data/spec/n1ql_spec.rb +206 -0
- data/spec/results_libuv_spec.rb +244 -0
- data/spec/results_native_spec.rb +259 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
- data/spec/subdoc_spec.rb +192 -0
- data/spec/view_spec.rb +201 -0
- data/windows_build.md +36 -0
- metadata +265 -0
@@ -0,0 +1,257 @@
|
|
1
|
+
# frozen_string_literal: true, encoding: ASCII-8BIT
|
2
|
+
|
3
|
+
require 'libcouchbase'
|
4
|
+
|
5
|
+
|
6
|
+
describe Libcouchbase::Connection do
|
7
|
+
before :each do
|
8
|
+
@log = []
|
9
|
+
expect(@log).to eq([])
|
10
|
+
@reactor = ::Libuv::Reactor.default
|
11
|
+
end
|
12
|
+
|
13
|
+
after :each do
|
14
|
+
@reactor = nil
|
15
|
+
@log = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should connect and disconnect from the default bucket" do
|
19
|
+
@reactor.run { |reactor|
|
20
|
+
connection = Libcouchbase::Connection.new
|
21
|
+
connection.connect.then {
|
22
|
+
@log << true
|
23
|
+
}.finally { connection.destroy }
|
24
|
+
}
|
25
|
+
|
26
|
+
expect(@log).to eq([true])
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should store a key on the default bucket" do
|
30
|
+
@reactor.run { |reactor|
|
31
|
+
connection = Libcouchbase::Connection.new
|
32
|
+
connection.connect.then do
|
33
|
+
connection.store('sometestkey', {"json" => "data"}).then(proc {|resp|
|
34
|
+
@log << resp.callback
|
35
|
+
}, proc { |error|
|
36
|
+
@log << error
|
37
|
+
}).finally { connection.destroy }
|
38
|
+
end
|
39
|
+
}
|
40
|
+
|
41
|
+
expect(@log).to eq([:callback_store])
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should durably store a key on the default bucket" do
|
45
|
+
@reactor.run { |reactor|
|
46
|
+
connection = Libcouchbase::Connection.new
|
47
|
+
connection.connect.then do
|
48
|
+
connection.store('sometestkey', {"json" => "data2"}, persist_to: -1, replicate_to: -1).then(proc {|resp|
|
49
|
+
@log << resp.callback
|
50
|
+
}, proc { |error|
|
51
|
+
@log << error
|
52
|
+
}).finally { connection.destroy }
|
53
|
+
end
|
54
|
+
}
|
55
|
+
|
56
|
+
expect(@log).to eq([:callback_storedur])
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should fetch a key from the default bucket" do
|
60
|
+
@reactor.run { |reactor|
|
61
|
+
connection = Libcouchbase::Connection.new
|
62
|
+
connection.connect.then do
|
63
|
+
connection.get('sometestkey').then(proc {|resp|
|
64
|
+
@log << resp.value
|
65
|
+
}, proc { |error|
|
66
|
+
@log << error
|
67
|
+
}).finally { connection.destroy }
|
68
|
+
end
|
69
|
+
}
|
70
|
+
|
71
|
+
expect(@log).to eq([{json: "data2"}])
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should unlock a key on the default bucket" do
|
75
|
+
|
76
|
+
@reactor.run { |reactor|
|
77
|
+
connection = Libcouchbase::Connection.new
|
78
|
+
connection.connect.then do
|
79
|
+
connection.get('sometestkey', lock: 2).then(proc {|resp|
|
80
|
+
@log << resp.callback
|
81
|
+
connection.unlock('sometestkey', cas: resp.cas).then(proc {|resp|
|
82
|
+
@log << resp.callback
|
83
|
+
}, proc { |error|
|
84
|
+
@log << error
|
85
|
+
})
|
86
|
+
}, proc { |error|
|
87
|
+
@log << error
|
88
|
+
}).finally { connection.destroy }
|
89
|
+
end
|
90
|
+
}
|
91
|
+
|
92
|
+
expect(@log).to eq([:callback_get, :callback_unlock])
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should remove a key on the default bucket" do
|
96
|
+
@reactor.run { |reactor|
|
97
|
+
connection = Libcouchbase::Connection.new
|
98
|
+
connection.connect.then do
|
99
|
+
connection.remove('sometestkey').then(proc {|resp|
|
100
|
+
@log << :success
|
101
|
+
}, proc { |error|
|
102
|
+
@log << error
|
103
|
+
}).finally { connection.destroy }
|
104
|
+
end
|
105
|
+
}
|
106
|
+
|
107
|
+
expect(@log).to eq([:success])
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should allow settings to be configured" do
|
111
|
+
@reactor.run { |reactor|
|
112
|
+
connection = Libcouchbase::Connection.new
|
113
|
+
connection.connect.then do
|
114
|
+
expect(connection.configure(:operation_timeout, 1500000).value).to be(connection)
|
115
|
+
expect { connection.configure(:bob, 1500000).value }.to raise_error(Libcouchbase::Error)
|
116
|
+
@log << :success
|
117
|
+
connection.destroy
|
118
|
+
end
|
119
|
+
}
|
120
|
+
|
121
|
+
expect(@log).to eq([:success])
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should return the server list" do
|
125
|
+
@reactor.run { |reactor|
|
126
|
+
begin
|
127
|
+
connection = Libcouchbase::Connection.new
|
128
|
+
connection.connect.value
|
129
|
+
@log = connection.get_server_list.value
|
130
|
+
ensure
|
131
|
+
connection.destroy
|
132
|
+
end
|
133
|
+
}
|
134
|
+
|
135
|
+
expect(@log).to eq(['127.0.0.1:11210'])
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should support counter operations" do
|
139
|
+
@reactor.run { |reactor|
|
140
|
+
connection = Libcouchbase::Connection.new
|
141
|
+
connection.connect.then do
|
142
|
+
connection.counter('testcount', initial: 10, expire_in: 2)
|
143
|
+
.then(proc { |resp|
|
144
|
+
@log << resp.value
|
145
|
+
connection.get('testcount').then do |resp|
|
146
|
+
@log << resp.value
|
147
|
+
end
|
148
|
+
}, proc { |error|
|
149
|
+
@log << error
|
150
|
+
}).finally { connection.destroy }
|
151
|
+
end
|
152
|
+
}
|
153
|
+
|
154
|
+
expect(@log).to eq([10, 10])
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should support touch operations" do
|
158
|
+
@reactor.run { |reactor|
|
159
|
+
connection = Libcouchbase::Connection.new
|
160
|
+
connection.connect.then do
|
161
|
+
connection.store('testtouch', 34).then(proc {|resp|
|
162
|
+
@log << resp.value
|
163
|
+
connection.touch('testtouch', expire_in: 1).then(proc {
|
164
|
+
@log << 'set'
|
165
|
+
sleep 2
|
166
|
+
connection.get('testtouch').catch do |err|
|
167
|
+
@log << err.is_a?(Libcouchbase::Error::KeyNotFound)
|
168
|
+
end
|
169
|
+
})
|
170
|
+
}, proc { |error|
|
171
|
+
@log << error
|
172
|
+
}).finally { connection.destroy }
|
173
|
+
end
|
174
|
+
}
|
175
|
+
|
176
|
+
expect(@log).to eq([34, 'set', true])
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should fail to flush unless the connection specifies it is enabled" do
|
180
|
+
@reactor.run { |reactor|
|
181
|
+
connection = Libcouchbase::Connection.new
|
182
|
+
connection.connect.then do
|
183
|
+
begin
|
184
|
+
connection.flush.then(proc {
|
185
|
+
@log << :error
|
186
|
+
}, proc {
|
187
|
+
@log << :error
|
188
|
+
}).finally { connection.destroy }
|
189
|
+
rescue => e
|
190
|
+
@log << :success
|
191
|
+
connection.destroy
|
192
|
+
end
|
193
|
+
end
|
194
|
+
}
|
195
|
+
|
196
|
+
expect(@log).to eq([:success])
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should flush when enabled explicitly", flush: true do
|
200
|
+
@reactor.run { |reactor|
|
201
|
+
connection = Libcouchbase::Connection.new(bucket: :test, username: 'tester', password: 'password123')
|
202
|
+
connection.connect(flush_enabled: true).then do
|
203
|
+
begin
|
204
|
+
connection.flush.then(proc { |resp|
|
205
|
+
@log << resp.callback
|
206
|
+
}, proc { |error|
|
207
|
+
@log << error
|
208
|
+
}).finally { connection.destroy }
|
209
|
+
rescue => e
|
210
|
+
@log << e
|
211
|
+
connection.destroy
|
212
|
+
end
|
213
|
+
end
|
214
|
+
}
|
215
|
+
|
216
|
+
expect(@log).to eq([:callback_cbflush])
|
217
|
+
end
|
218
|
+
|
219
|
+
it "should perform a HTTP request" do
|
220
|
+
@reactor.run { |reactor|
|
221
|
+
connection = Libcouchbase::Connection.new
|
222
|
+
connection.connect.then do
|
223
|
+
connection.http("/pools/default/buckets/#{connection.bucket}/ddocs", type: :management).then(
|
224
|
+
proc { |resp|
|
225
|
+
@log << resp.headers.empty?
|
226
|
+
@log << resp.body.empty?
|
227
|
+
},
|
228
|
+
proc { |err|
|
229
|
+
@log << err
|
230
|
+
}
|
231
|
+
).finally { connection.destroy }
|
232
|
+
end
|
233
|
+
}
|
234
|
+
|
235
|
+
expect(@log).to eq([false, false])
|
236
|
+
end
|
237
|
+
|
238
|
+
it "should fail a HTTP request" do
|
239
|
+
@reactor.run { |reactor|
|
240
|
+
connection = Libcouchbase::Connection.new
|
241
|
+
connection.connect.then do
|
242
|
+
connection.http("/pools/default/buckets/#{connection.bucket}/ddocs").then(
|
243
|
+
proc { |resp|
|
244
|
+
@log << resp.headers.empty?
|
245
|
+
@log << resp.body.empty?
|
246
|
+
},
|
247
|
+
proc { |err|
|
248
|
+
@log << err.message
|
249
|
+
@log << err.code
|
250
|
+
}
|
251
|
+
).finally { connection.destroy }
|
252
|
+
end
|
253
|
+
}
|
254
|
+
|
255
|
+
expect(@log).to eq(['non success response for /pools/default/buckets/default/ddocs', 400])
|
256
|
+
end
|
257
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true, encoding: ASCII-8BIT
|
2
|
+
|
3
|
+
require 'libcouchbase'
|
4
|
+
|
5
|
+
|
6
|
+
describe Libcouchbase::DesignDocs, design_docs: true do
|
7
|
+
before :each do
|
8
|
+
@ddoc = Libcouchbase::Bucket.new.design_docs
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should list the available designs" do
|
12
|
+
designs = @ddoc.designs
|
13
|
+
expect(designs.count).to eq(23)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should list the available views" do
|
17
|
+
views = @ddoc.design("user").views
|
18
|
+
expect(views).to eq([:is_sys_admin])
|
19
|
+
|
20
|
+
views = @ddoc[:user].views
|
21
|
+
expect(views).to eq([:is_sys_admin])
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should provide access to view configuration" do
|
25
|
+
config = @ddoc.design("user").view_config
|
26
|
+
expect(config.keys).to eq([:is_sys_admin])
|
27
|
+
|
28
|
+
config = @ddoc[:user].view_config
|
29
|
+
expect(config.keys).to eq([:is_sys_admin])
|
30
|
+
end
|
31
|
+
end
|
data/spec/error_spec.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true, encoding: ASCII-8BIT
|
2
|
+
|
3
|
+
require 'libcouchbase'
|
4
|
+
|
5
|
+
|
6
|
+
describe Libcouchbase::Error do
|
7
|
+
it "define the error classes" do
|
8
|
+
expect(Libcouchbase::Error::MapChanged.new.is_a? StandardError).to be(true)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should be able to look up errors" do
|
12
|
+
expect(Libcouchbase::Error::Lookup[:empty_key]).to be(Libcouchbase::Error::EmptyKey)
|
13
|
+
expect(Libcouchbase::Error.lookup(:empty_key)).to be(Libcouchbase::Error::EmptyKey)
|
14
|
+
expect(Libcouchbase::Error.lookup(:whatwhat_key)).to be(Libcouchbase::Error::UnknownError)
|
15
|
+
expect(Libcouchbase::Error.lookup(2)).to be(Libcouchbase::Error::AuthError)
|
16
|
+
expect(Libcouchbase::Error.lookup(-2)).to be(Libcouchbase::Error::UnknownError)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be able to catch generic errors" do
|
20
|
+
begin
|
21
|
+
raise ::Libcouchbase::Error::NoMemory, 'what what'
|
22
|
+
rescue ::Libcouchbase::Error => e
|
23
|
+
expect(e.message).to eq('what what')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/spec/fts_spec.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
# frozen_string_literal: true, encoding: ASCII-8BIT
|
2
|
+
|
3
|
+
require 'libcouchbase'
|
4
|
+
|
5
|
+
|
6
|
+
describe Libcouchbase::QueryFullText, full_text_search: true do
|
7
|
+
before :each do
|
8
|
+
# This will load the couchbase connection on a different thread
|
9
|
+
@bucket = Libcouchbase::Bucket.new
|
10
|
+
@reactor = ::Libuv::Reactor.default
|
11
|
+
@log = []
|
12
|
+
end
|
13
|
+
|
14
|
+
after :each do
|
15
|
+
@bucket = nil
|
16
|
+
@reactor = nil
|
17
|
+
@log = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'perform native queries' do
|
21
|
+
it "should iterate a full text search with results" do
|
22
|
+
results = @bucket.full_text_search(:default, 'Toshiba')
|
23
|
+
@log << results.to_a.count
|
24
|
+
@log << results.count
|
25
|
+
@log << results.collect { |res| res.value.nil? }
|
26
|
+
expect(@log).to eq([4, 4, [false, false, false, false]])
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should iterate a full text search without results" do
|
30
|
+
results = @bucket.full_text_search(:default, 'Toshiba', include_docs: false)
|
31
|
+
@log << results.to_a.count
|
32
|
+
@log << results.count
|
33
|
+
@log << results.collect { |res| res.value.nil? }
|
34
|
+
expect(@log).to eq([4, 4, [true, true, true, true]])
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should cancel a full text search when an error occurs" do
|
38
|
+
results = @bucket.full_text_search(:default, 'Toshiba')
|
39
|
+
begin
|
40
|
+
count = 0
|
41
|
+
results.collect { |res|
|
42
|
+
raise 'err' if count > 0
|
43
|
+
@log << res.value.nil?
|
44
|
+
count += 1
|
45
|
+
}
|
46
|
+
rescue => e
|
47
|
+
@log << :error
|
48
|
+
end
|
49
|
+
expect(@log).to eq([false, :error])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'perform queries in libuv reactor' do
|
54
|
+
it "should iterate a full text search with results" do
|
55
|
+
@reactor.run { |reactor|
|
56
|
+
results = @bucket.full_text_search(:default, 'Toshiba')
|
57
|
+
@log << results.to_a.count
|
58
|
+
@log << results.count
|
59
|
+
@log << results.collect { |res| res.value.nil? }
|
60
|
+
}
|
61
|
+
expect(@log).to eq([4, 4, [false, false, false, false]])
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should iterate a full text search without results" do
|
65
|
+
@reactor.run { |reactor|
|
66
|
+
results = @bucket.full_text_search(:default, 'Toshiba', include_docs: false)
|
67
|
+
@log << results.to_a.count
|
68
|
+
@log << results.count
|
69
|
+
@log << results.collect { |res| res.value.nil? }
|
70
|
+
}
|
71
|
+
expect(@log).to eq([4, 4, [true, true, true, true]])
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should cancel a full text search when an error occurs" do
|
75
|
+
@reactor.run { |reactor|
|
76
|
+
results = @bucket.full_text_search(:default, 'Toshiba')
|
77
|
+
begin
|
78
|
+
count = 0
|
79
|
+
results.collect { |res|
|
80
|
+
raise 'err' if count > 0
|
81
|
+
@log << res.value.nil?
|
82
|
+
count += 1
|
83
|
+
}
|
84
|
+
rescue => e
|
85
|
+
@log << :error
|
86
|
+
end
|
87
|
+
}
|
88
|
+
expect(@log).to eq([false, :error])
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe 'perform queries in event machine' do
|
93
|
+
require 'em-synchrony'
|
94
|
+
|
95
|
+
it "should iterate a full text search with results" do
|
96
|
+
EM.synchrony {
|
97
|
+
results = @bucket.full_text_search(:default, 'Toshiba')
|
98
|
+
@log << results.to_a.count
|
99
|
+
@log << results.count
|
100
|
+
@log << results.collect { |res| res.value.nil? }
|
101
|
+
EM.stop
|
102
|
+
}
|
103
|
+
expect(@log).to eq([4, 4, [false, false, false, false]])
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should iterate a full text search without results" do
|
107
|
+
EM.synchrony {
|
108
|
+
results = @bucket.full_text_search(:default, 'Toshiba', include_docs: false)
|
109
|
+
@log << results.to_a.count
|
110
|
+
@log << results.count
|
111
|
+
@log << results.collect { |res| res.value.nil? }
|
112
|
+
EM.stop
|
113
|
+
}
|
114
|
+
expect(@log).to eq([4, 4, [true, true, true, true]])
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should cancel a full text search when an error occurs" do
|
118
|
+
EM.synchrony {
|
119
|
+
results = @bucket.full_text_search(:default, 'Toshiba')
|
120
|
+
begin
|
121
|
+
count = 0
|
122
|
+
results.collect { |res|
|
123
|
+
raise 'err' if count > 0
|
124
|
+
@log << res.value.nil?
|
125
|
+
count += 1
|
126
|
+
}
|
127
|
+
rescue => e
|
128
|
+
@log << :error
|
129
|
+
end
|
130
|
+
EM.stop
|
131
|
+
}
|
132
|
+
expect(@log).to eq([false, :error])
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|