arangorb 0.1.0 → 1.0.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/ArangoRB.gemspec +2 -2
- data/README.md +418 -123
- data/lib/ArangoRB_AQL.rb +90 -103
- data/lib/ArangoRB_Col.rb +476 -159
- data/lib/ArangoRB_DB.rb +305 -79
- data/lib/ArangoRB_Doc.rb +112 -114
- data/lib/ArangoRB_Edg.rb +81 -62
- data/lib/ArangoRB_Gra.rb +125 -76
- data/lib/ArangoRB_Index.rb +144 -0
- data/lib/ArangoRB_Ser.rb +439 -18
- data/lib/ArangoRB_Task.rb +136 -0
- data/lib/ArangoRB_Tra.rb +47 -42
- data/lib/ArangoRB_Tran.rb +48 -0
- data/lib/ArangoRB_User.rb +152 -0
- data/lib/ArangoRB_Ver.rb +74 -57
- data/lib/arangorb.rb +4 -0
- data/spec/arangoRB_helper.rb +2 -9
- data/spec/arangoRestart_helper.rb +14 -0
- data/spec/lib/{arangoAQL_helper.rb → 0.1.0/arangoAQL_helper.rb} +2 -21
- data/spec/lib/{arangoC_helper.rb → 0.1.0/arangoC_helper.rb} +40 -19
- data/spec/lib/{arangoDB_helper.rb → 0.1.0/arangoDB_helper.rb} +13 -13
- data/spec/lib/{arangoDoc_helper.rb → 0.1.0/arangoDoc_helper.rb} +10 -23
- data/spec/lib/0.1.0/arangoE_helper.rb +50 -0
- data/spec/lib/{arangoG_helper.rb → 0.1.0/arangoG_helper.rb} +7 -21
- data/spec/lib/0.1.0/arangoS_helper.rb +37 -0
- data/spec/lib/0.1.0/arangoT_helper.rb +48 -0
- data/spec/lib/{arangoV_helper.rb → 0.1.0/arangoV_helper.rb} +6 -22
- data/spec/lib/1.0.0/arangoC_helper.rb +73 -0
- data/spec/lib/1.0.0/arangoDB_helper.rb +81 -0
- data/spec/lib/1.0.0/arangoI_helper.rb +43 -0
- data/spec/lib/1.0.0/arangoS_helper.rb +196 -0
- data/spec/lib/1.0.0/arangoTa_helper.rb +49 -0
- data/spec/lib/1.0.0/arangoTr_helper.rb +15 -0
- data/spec/lib/1.0.0/arangoU_helper.rb +72 -0
- data/spec/lib/arangoRB_0.1.0_helper.rb +9 -0
- data/spec/lib/arangoRB_1.0.0_helper.rb +6 -0
- data/spec/spec_helper.rb +34 -0
- metadata +28 -15
- data/spec/lib/arangoE_helper.rb +0 -70
- data/spec/lib/arangoS_helper.rb +0 -28
- data/spec/lib/arangoT_helper.rb +0 -67
data/lib/ArangoRB_DB.rb
CHANGED
@@ -1,26 +1,30 @@
|
|
1
1
|
# === DATABASE ===
|
2
2
|
|
3
|
-
class
|
4
|
-
def initialize(database: @@database)
|
3
|
+
class ArangoDatabase < ArangoServer
|
4
|
+
def initialize(database: @@database) # TESTED
|
5
5
|
if database.is_a?(String)
|
6
6
|
@database = database
|
7
|
+
elsif database.is_a?(ArangoDatabase)
|
8
|
+
@database = database.database
|
7
9
|
else
|
8
|
-
raise "database should be a String, not a #{database.class}"
|
10
|
+
raise "database should be a String or an ArangoDatabase instance, not a #{database.class}"
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
12
|
-
attr_reader :database
|
14
|
+
attr_reader :database # TESTED
|
13
15
|
|
14
16
|
# === GET ===
|
15
17
|
|
16
|
-
def
|
17
|
-
result = get("/_api/database/current")
|
18
|
-
|
18
|
+
def info # TESTED
|
19
|
+
result = self.class.get("/_db/#{@database}/_api/database/current", @@request)
|
20
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
21
|
+
result = result.parsed_response
|
22
|
+
@@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].delete_if{|k,v| k == "error" || k == "code"}
|
19
23
|
end
|
20
24
|
|
21
25
|
# === POST ===
|
22
26
|
|
23
|
-
def create(username: nil, passwd: nil, users: nil)
|
27
|
+
def create(username: nil, passwd: nil, users: nil) # TESTED
|
24
28
|
body = {
|
25
29
|
"name" => @database,
|
26
30
|
"username" => username,
|
@@ -28,83 +32,100 @@ class ArangoDB < ArangoS
|
|
28
32
|
"users" => users
|
29
33
|
}
|
30
34
|
body = body.delete_if{|k,v| v.nil?}.to_json
|
31
|
-
|
32
|
-
result = self.class.post("/_api/database",
|
33
|
-
@@verbose ? result : result["error"] ? result["errorMessage"] :
|
35
|
+
request = @@request.merge({ :body => body })
|
36
|
+
result = self.class.post("/_api/database", request)
|
37
|
+
@@async == "store" ? result.headers["x-arango-async-id"] : @@verbose ? result.parsed_response : result.parsed_response["error"] ? result.parsed_response["errorMessage"] : self
|
34
38
|
end
|
35
39
|
|
36
40
|
# === DELETE ===
|
37
41
|
|
38
|
-
def destroy
|
39
|
-
result = self.class.delete("/_api/database/#{@database}")
|
40
|
-
|
42
|
+
def destroy # TESTED
|
43
|
+
result = self.class.delete("/_api/database/#{@database}", @@request)
|
44
|
+
self.class.return_result(result: result, caseTrue: true)
|
41
45
|
end
|
42
46
|
|
43
47
|
# === LISTS ===
|
44
48
|
|
45
|
-
def self.databases(user: nil)
|
46
|
-
|
47
|
-
|
49
|
+
def self.databases(user: nil) # TESTED
|
50
|
+
user = user.user if user.is_a?(ArangoUser)
|
51
|
+
result = user.nil? ? get("/_api/database") : get("/_api/database/#{user}", @@request)
|
52
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
53
|
+
result = result.parsed_response
|
54
|
+
@@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].map{|x| ArangoDatabase.new(database: x)}
|
48
55
|
end
|
49
56
|
|
50
|
-
def collections(excludeSystem: true)
|
57
|
+
def collections(excludeSystem: true) # TESTED
|
51
58
|
query = { "excludeSystem": excludeSystem }.delete_if{|k,v| v.nil?}
|
52
|
-
|
53
|
-
result = self.class.get("/_db/#{@database}/_api/collection",
|
54
|
-
if @@
|
55
|
-
|
59
|
+
request = @@request.merge({ :query => query })
|
60
|
+
result = self.class.get("/_db/#{@database}/_api/collection", request)
|
61
|
+
if @@async == "store"
|
62
|
+
result.headers["x-arango-async-id"]
|
56
63
|
else
|
57
|
-
|
58
|
-
|
64
|
+
result = result.parsed_response
|
65
|
+
if @@verbose
|
66
|
+
result
|
59
67
|
else
|
60
|
-
|
68
|
+
if result["error"]
|
69
|
+
result["errorMessage"]
|
70
|
+
else
|
71
|
+
result["result"].map{|x| ArangoCollection.new(database: @database, collection: x["name"])}
|
72
|
+
end
|
61
73
|
end
|
62
74
|
end
|
63
75
|
end
|
64
76
|
|
65
|
-
def graphs
|
66
|
-
result = self.class.get("/_db/#{@database}/_api/gharial")
|
67
|
-
if @@
|
68
|
-
|
77
|
+
def graphs # TESTED
|
78
|
+
result = self.class.get("/_db/#{@database}/_api/gharial", @@request)
|
79
|
+
if @@async == "store"
|
80
|
+
result.headers["x-arango-async-id"]
|
69
81
|
else
|
70
|
-
|
71
|
-
|
82
|
+
result = result.parsed_response
|
83
|
+
if @@verbose
|
84
|
+
result
|
72
85
|
else
|
73
|
-
|
86
|
+
if result["error"]
|
87
|
+
result["errorMessage"]
|
88
|
+
else
|
89
|
+
result["graphs"].map{|x| ArangoGraph.new(database: @database, graph: x["_key"], edgeDefinitions: x["edgeDefinitions"], orphanCollections: x["orphanCollections"])}
|
90
|
+
end
|
74
91
|
end
|
75
92
|
end
|
76
93
|
end
|
77
94
|
|
78
|
-
def functions
|
79
|
-
self.class.get("/_db/#{@database}/_api/aqlfunction")
|
95
|
+
def functions # TESTED
|
96
|
+
result = self.class.get("/_db/#{@database}/_api/aqlfunction", @@request)
|
97
|
+
self.class.return_result result: result
|
80
98
|
end
|
81
99
|
|
82
100
|
# === QUERY ===
|
83
101
|
|
84
|
-
def propertiesQuery
|
85
|
-
result = self.class.get("/_db/#{@database}/_api/query/properties")
|
86
|
-
return_result
|
102
|
+
def propertiesQuery # TESTED
|
103
|
+
result = self.class.get("/_db/#{@database}/_api/query/properties", @@request)
|
104
|
+
self.class.return_result result: result
|
87
105
|
end
|
88
106
|
|
89
|
-
def currentQuery
|
90
|
-
self.class.get("/_db/#{@database}/_api/query/current")
|
107
|
+
def currentQuery # TESTED
|
108
|
+
result = self.class.get("/_db/#{@database}/_api/query/current", @@request)
|
109
|
+
self.class.return_result result: result
|
91
110
|
end
|
92
111
|
|
93
|
-
def slowQuery
|
94
|
-
self.class.get("/_db/#{@database}/_api/query/slow")
|
112
|
+
def slowQuery # TESTED
|
113
|
+
result = self.class.get("/_db/#{@database}/_api/query/slow", @@request)
|
114
|
+
self.class.return_result result: result
|
95
115
|
end
|
96
116
|
|
97
|
-
def stopSlowQuery
|
98
|
-
result = self.class.delete("/_db/#{@database}/_api/query/slow")
|
99
|
-
|
117
|
+
def stopSlowQuery # TESTED
|
118
|
+
result = self.class.delete("/_db/#{@database}/_api/query/slow", @@request)
|
119
|
+
self.class.return_result result: result, caseTrue: true
|
100
120
|
end
|
101
121
|
|
102
|
-
def killQuery(
|
103
|
-
|
104
|
-
|
122
|
+
def killQuery(query:) # TESTED
|
123
|
+
id = query.is_a?(ArangoAQL) ? query.id : query.is_a?(String) ? query : nil
|
124
|
+
result = self.class.delete("/_db/#{@database}/_api/query/#{id}", @@request)
|
125
|
+
self.class.return_result result: result, caseTrue: true
|
105
126
|
end
|
106
127
|
|
107
|
-
def changePropertiesQuery(slowQueryThreshold: nil, enabled: nil, maxSlowQueries: nil, trackSlowQueries: nil, maxQueryStringLength: nil)
|
128
|
+
def changePropertiesQuery(slowQueryThreshold: nil, enabled: nil, maxSlowQueries: nil, trackSlowQueries: nil, maxQueryStringLength: nil) # TESTED
|
108
129
|
body = {
|
109
130
|
"slowQueryThreshold" => slowQueryThreshold,
|
110
131
|
"enabled" => enabled,
|
@@ -112,59 +133,264 @@ class ArangoDB < ArangoS
|
|
112
133
|
"trackSlowQueries" => trackSlowQueries,
|
113
134
|
"maxQueryStringLength" => maxQueryStringLength
|
114
135
|
}.delete_if{|k,v| v.nil?}
|
115
|
-
|
116
|
-
result = self.class.put("/_db/#{@database}/_api/query/properties",
|
117
|
-
return_result
|
136
|
+
request = @@request.merge({ :body => body.to_json })
|
137
|
+
result = self.class.put("/_db/#{@database}/_api/query/properties", request)
|
138
|
+
self.class.return_result result: result
|
118
139
|
end
|
119
140
|
|
120
141
|
# === CACHE ===
|
121
142
|
|
122
|
-
def clearCache
|
123
|
-
result = self.class.delete("/_db/#{@database}/_api/query-cache")
|
124
|
-
|
143
|
+
def clearCache # TESTED
|
144
|
+
result = self.class.delete("/_db/#{@database}/_api/query-cache", @@request)
|
145
|
+
self.class.return_result result: result, caseTrue: true
|
125
146
|
end
|
126
147
|
|
127
|
-
def propertyCache
|
128
|
-
self.class.get("/_db/#{@database}/_api/query-cache/properties")
|
148
|
+
def propertyCache # TESTED
|
149
|
+
result = self.class.get("/_db/#{@database}/_api/query-cache/properties", @@request)
|
150
|
+
self.class.return_result result: result
|
129
151
|
end
|
130
152
|
|
131
|
-
def changePropertyCache(mode: nil, maxResults: nil)
|
153
|
+
def changePropertyCache(mode: nil, maxResults: nil) # TESTED
|
132
154
|
body = { "mode" => mode, "maxResults" => maxResults }.delete_if{|k,v| v.nil?}
|
133
|
-
|
134
|
-
self.class.put("/_db/#{@database}/_api/query-cache/properties",
|
155
|
+
request = @@request.merge({ :body => body.to_json })
|
156
|
+
result = self.class.put("/_db/#{@database}/_api/query-cache/properties", request)
|
157
|
+
self.class.return_result result: result
|
135
158
|
end
|
136
159
|
|
137
160
|
# === AQL FUNCTION ===
|
138
161
|
|
139
|
-
def createFunction(code:, name:, isDeterministic: nil)
|
162
|
+
def createFunction(code:, name:, isDeterministic: nil) # TESTED
|
140
163
|
body = {
|
141
164
|
"code" => code,
|
142
165
|
"name" => name,
|
143
166
|
"isDeterministic" => isDeterministic
|
144
167
|
}.delete_if{|k,v| v.nil?}
|
145
|
-
|
146
|
-
result = self.class.post("/_db/#{@database}/_api/aqlfunction",
|
147
|
-
return_result
|
168
|
+
request = @@request.merge({ :body => body.to_json })
|
169
|
+
result = self.class.post("/_db/#{@database}/_api/aqlfunction", request)
|
170
|
+
self.class.return_result result: result
|
148
171
|
end
|
149
172
|
|
150
|
-
def deleteFunction(name:)
|
151
|
-
result = self.class.delete("/_db/#{@database}/_api/aqlfunction/#{name}")
|
152
|
-
|
173
|
+
def deleteFunction(name:) # TESTED
|
174
|
+
result = self.class.delete("/_db/#{@database}/_api/aqlfunction/#{name}", @@request)
|
175
|
+
self.class.return_result result: result, caseTrue: true
|
153
176
|
end
|
154
177
|
|
155
|
-
# ===
|
178
|
+
# # === ASYNC ===
|
179
|
+
#
|
180
|
+
# def pendingAsync # TESTED
|
181
|
+
# result = self.class.get("/_db/#{@database}/_api/job/pending")
|
182
|
+
# return_result_async result: result
|
183
|
+
# end
|
184
|
+
#
|
185
|
+
# def fetchAsync(id:) # TESTED
|
186
|
+
# result = self.class.put("/_db/#{@database}/_api/job/#{id}")
|
187
|
+
# return_result_async result: result
|
188
|
+
# end
|
189
|
+
#
|
190
|
+
# def retrieveAsync(type:) # TESTED
|
191
|
+
# result = self.class.get("/_db/#{@database}/_api/job/#{type}")
|
192
|
+
# return_result_async result: result
|
193
|
+
# end
|
194
|
+
#
|
195
|
+
# def retrieveDoneAsync # TESTED
|
196
|
+
# retrieveAsync(type: "done")
|
197
|
+
# end
|
198
|
+
#
|
199
|
+
# def retrievePendingAsync # TESTED
|
200
|
+
# retrieveAsync(type: "pending")
|
201
|
+
# end
|
202
|
+
#
|
203
|
+
# def cancelAsync(id:) # TESTED
|
204
|
+
# result = self.class.put("/_db/#{@database}/_api/job/#{id}/cancel")
|
205
|
+
# return_result_async result: result
|
206
|
+
# end
|
207
|
+
#
|
208
|
+
# def destroyAsync(type:) # TESTED
|
209
|
+
# result = self.class.delete("/_db/#{@database}/_api/job/#{type}")
|
210
|
+
# return_result_async result: result, caseTrue: true
|
211
|
+
# end
|
212
|
+
#
|
213
|
+
# def destroyAllAsync # TESTED
|
214
|
+
# destroyAsync(type: "all")
|
215
|
+
# end
|
216
|
+
#
|
217
|
+
# def destroyExpiredAsync # TESTED
|
218
|
+
# destroyAsync(type: "expired")
|
219
|
+
# end
|
156
220
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
221
|
+
# === REPLICATION ===
|
222
|
+
|
223
|
+
def inventory(includeSystem: false) # TESTED
|
224
|
+
query = { "includeSystem": includeSystem }
|
225
|
+
request = @@request.merge({ :query => query })
|
226
|
+
result = self.class.get("/_db/#{@database}/_api/replication/inventory", request)
|
227
|
+
self.class.return_result result: result
|
228
|
+
end
|
229
|
+
|
230
|
+
def clusterInventory(includeSystem: false) # TESTED
|
231
|
+
query = { "includeSystem": includeSystem }
|
232
|
+
request = @@request.merge({ :query => query })
|
233
|
+
result = self.class.get("/_db/#{@database}/_api/replication/clusterInventory", request)
|
234
|
+
self.class.return_result result: result
|
235
|
+
end
|
236
|
+
|
237
|
+
def logger # TESTED
|
238
|
+
result = self.class.get("/_db/#{@database}/_api/replication/logger-state")
|
239
|
+
self.class.return_result result: result
|
240
|
+
end
|
241
|
+
|
242
|
+
def loggerFollow(from: nil, to: nil, chunkSize: nil, includeSystem: false) # TESTED
|
243
|
+
query = {
|
244
|
+
"from": from,
|
245
|
+
"to": to,
|
246
|
+
"chunkSize": chunkSize,
|
247
|
+
"includeSystem": includeSystem
|
248
|
+
}.delete_if{|k,v| v.nil?}
|
249
|
+
request = @@request.merge({ :query => query })
|
250
|
+
result = self.class.get("/_db/#{@database}/_api/replication/logger-follow", request)
|
251
|
+
self.class.return_result result: result
|
252
|
+
end
|
253
|
+
|
254
|
+
def firstTick # TESTED
|
255
|
+
result = self.class.get("/_db/#{@database}/_api/replication/logger-first-tick")
|
256
|
+
self.class.return_result result: result, key: "firstTick"
|
257
|
+
end
|
258
|
+
|
259
|
+
def rangeTick # TESTED
|
260
|
+
result = self.class.get("/_db/#{@database}/_api/replication/logger-tick-ranges")
|
261
|
+
self.class.return_result result: result
|
262
|
+
end
|
263
|
+
|
264
|
+
def sync(endpoint: "tcp://#{@@server}:#{@@port}", username: @@username, password: @@password, includeSystem: false, database: @database, initialSyncMaxWaitTime: nil, restrictType: nil, incremental: nil, restrictCollections: nil)
|
265
|
+
body = {
|
266
|
+
"username" => username,
|
267
|
+
"password" => password,
|
268
|
+
"includeSystem" => includeSystem,
|
269
|
+
"endpoint" => endpoint,
|
270
|
+
"initialSyncMaxWaitTime" => initialSyncMaxWaitTime,
|
271
|
+
"database" => database,
|
272
|
+
"restrictType" => restrictType,
|
273
|
+
"incremental" => incremental,
|
274
|
+
"restrictCollections" => restrictCollections
|
275
|
+
}.delete_if{|k,v| v.nil?}
|
276
|
+
request = @@request.merge({ :body => body.to_json })
|
277
|
+
result = self.class.put("/_db/#{database}/_api/replication/sync", request)
|
278
|
+
self.class.return_result result: result
|
169
279
|
end
|
280
|
+
|
281
|
+
def configurationReplication # TESTED
|
282
|
+
result = self.class.get("/_db/#{@database}/_api/replication/applier-config", @@request)
|
283
|
+
self.class.return_result result: result
|
284
|
+
end
|
285
|
+
|
286
|
+
def modifyConfigurationReplication(endpoint: "tcp://#{@@server}:#{@@port}", username: @@username, password: @@password, database: @database, includeSystem: false, verbose: false, connectTimeout: nil, autoResync: nil, idleMinWaitTime: nil, requestTimeout: nil, requireFromPresent: nil, idleMaxWaitTime: nil, restrictCollections: nil, restrictType: nil, initialSyncMaxWaitTime: nil, maxConnectRetries: nil, autoStart: nil, adaptivePolling: nil, connectionRetryWaitTime: nil, autoResyncRetries: nil, chunkSize: nil) # TESTED
|
287
|
+
body = {
|
288
|
+
"username" => username,
|
289
|
+
"password" => password,
|
290
|
+
"includeSystem" => includeSystem,
|
291
|
+
"endpoint" => endpoint,
|
292
|
+
"initialSyncMaxWaitTime" => initialSyncMaxWaitTime,
|
293
|
+
"database" => database,
|
294
|
+
"verbose" => verbose,
|
295
|
+
"connectTimeout" => connectTimeout,
|
296
|
+
"autoResync" => autoResync,
|
297
|
+
"idleMinWaitTime" => idleMinWaitTime,
|
298
|
+
"requestTimeout" => requestTimeout,
|
299
|
+
"requireFromPresent" => requireFromPresent,
|
300
|
+
"idleMaxWaitTime" => idleMaxWaitTime,
|
301
|
+
"restrictType" => restrictType,
|
302
|
+
"maxConnectRetries" => maxConnectRetries,
|
303
|
+
"autoStart" => autoStart,
|
304
|
+
"adaptivePolling" => adaptivePolling,
|
305
|
+
"connectionRetryWaitTime" => connectionRetryWaitTime,
|
306
|
+
"restrictCollections" => restrictCollections,
|
307
|
+
"autoResyncRetries" => autoResyncRetries,
|
308
|
+
"chunkSize" => chunkSize
|
309
|
+
}.delete_if{|k,v| v.nil?}
|
310
|
+
request = @@request.merge({ :body => body.to_json })
|
311
|
+
result = self.class.put("/_db/#{database}/_api/replication/applier-config", request)
|
312
|
+
self.class.return_result result: result
|
313
|
+
end
|
314
|
+
|
315
|
+
def startReplication(from: nil)
|
316
|
+
query = {from: from}.delete_if{|k,v| v.nil?}
|
317
|
+
request = @@request.merge({ :query => query })
|
318
|
+
result = self.class.put("/_db/#{@database}/_api/replication/applier-start", request)
|
319
|
+
self.class.return_result result: result
|
320
|
+
end
|
321
|
+
|
322
|
+
def stopReplication
|
323
|
+
result = self.class.put("/_db/#{@database}/_api/replication/applier-stop", @@request)
|
324
|
+
self.class.return_result result: result
|
325
|
+
end
|
326
|
+
|
327
|
+
def stateReplication
|
328
|
+
result = self.class.get("/_db/#{@database}/_api/replication/applier-state", @@request)
|
329
|
+
self.class.return_result result: result
|
330
|
+
end
|
331
|
+
|
332
|
+
def enslave(username: @@username, includeSystem: false, endpoint: "tcp://#{@@server}:#{@@port}", verbose: false, connectTimeout: nil, autoResync: nil, password: @@password, database: @database, idleMinWaitTime: nil, requestTimeout: nil, requireFromPresent: nil, idleMaxWaitTime: nil, restrictCollections: nil, restrictType: nil, initialSyncMaxWaitTime: nil, maxConnectRetries: nil, adaptivePolling: nil, connectionRetryWaitTime: nil, autoResyncRetries: nil, chunkSize: nil)
|
333
|
+
body = {
|
334
|
+
"username" => username,
|
335
|
+
"password" => password,
|
336
|
+
"includeSystem" => includeSystem,
|
337
|
+
"endpoint" => endpoint,
|
338
|
+
"initialSyncMaxWaitTime" => initialSyncMaxWaitTime,
|
339
|
+
"database" => database,
|
340
|
+
"verbose" => verbose,
|
341
|
+
"connectTimeout" => connectTimeout,
|
342
|
+
"autoResync" => autoResync,
|
343
|
+
"idleMinWaitTime" => idleMinWaitTime,
|
344
|
+
"requestTimeout" => requestTimeout,
|
345
|
+
"requireFromPresent" => requireFromPresent,
|
346
|
+
"idleMaxWaitTime" => idleMaxWaitTime,
|
347
|
+
"restrictType" => restrictType,
|
348
|
+
"maxConnectRetries" => maxConnectRetries,
|
349
|
+
"adaptivePolling" => adaptivePolling,
|
350
|
+
"connectionRetryWaitTime" => connectionRetryWaitTime,
|
351
|
+
"restrictCollections" => restrictCollections,
|
352
|
+
"autoResyncRetries" => autoResyncRetries,
|
353
|
+
"chunkSize" => chunkSize
|
354
|
+
}.delete_if{|k,v| v.nil?}
|
355
|
+
request = @@request.merge({ :body => body.to_json })
|
356
|
+
result = self.class.put("/_db/#{@database}/_api/replication/make-slave", request)
|
357
|
+
self.class.return_result result: result
|
358
|
+
end
|
359
|
+
|
360
|
+
# === USER ===
|
361
|
+
|
362
|
+
def grant(user: @@user) # TESTED
|
363
|
+
user = user.user if user.is_a?(ArangoUser)
|
364
|
+
body = { "grant" => "rw" }.to_json
|
365
|
+
request = @@request.merge({ :body => body })
|
366
|
+
result = self.class.put("/_api/user/#{user}/database/#{@database}", request)
|
367
|
+
self.class.return_result result: result, caseTrue: true
|
368
|
+
end
|
369
|
+
|
370
|
+
def revoke(user: @@user) # TESTED
|
371
|
+
user = user.user if user.is_a?(ArangoUser)
|
372
|
+
body = { "grant" => "none" }.to_json
|
373
|
+
request = @@request.merge({ :body => body })
|
374
|
+
result = self.class.put("/_api/user/#{user}/database/#{@database}", request)
|
375
|
+
self.class.return_result result: result, caseTrue: true
|
376
|
+
end
|
377
|
+
|
378
|
+
# # === UTILITY ===
|
379
|
+
#
|
380
|
+
# def return_result_async(result:, caseTrue: false)
|
381
|
+
# result = result.parsed_response
|
382
|
+
# if @@verbose || !result.is_a?(Hash)
|
383
|
+
# result
|
384
|
+
# else
|
385
|
+
# if result["error"]
|
386
|
+
# result["errorMessage"]
|
387
|
+
# else
|
388
|
+
# if caseTrue
|
389
|
+
# true
|
390
|
+
# else
|
391
|
+
# result.delete_if{|k,v| k == "error" || k == "code"}
|
392
|
+
# end
|
393
|
+
# end
|
394
|
+
# end
|
395
|
+
# end
|
170
396
|
end
|