arangorb 1.4.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/ArangoRB.gemspec +20 -18
  3. data/Gemfile +3 -0
  4. data/README.md +1079 -908
  5. data/lib/AQL.rb +155 -0
  6. data/lib/Batch.rb +97 -0
  7. data/lib/Cache.rb +71 -0
  8. data/lib/Collection.rb +852 -0
  9. data/lib/Database.rb +417 -0
  10. data/lib/Document.rb +346 -0
  11. data/lib/Edge.rb +104 -0
  12. data/lib/Error.rb +125 -0
  13. data/lib/Foxx.rb +277 -0
  14. data/lib/Graph.rb +325 -0
  15. data/lib/Index.rb +126 -0
  16. data/lib/Replication.rb +235 -0
  17. data/lib/Request.rb +143 -0
  18. data/lib/Server.rb +466 -0
  19. data/lib/Task.rb +120 -0
  20. data/lib/Transaction.rb +115 -0
  21. data/lib/Traversal.rb +224 -0
  22. data/lib/User.rb +197 -0
  23. data/lib/Vertex.rb +127 -0
  24. data/lib/View.rb +151 -0
  25. data/lib/arangorb.rb +23 -15
  26. data/lib/helpers/Error.rb +28 -0
  27. data/lib/helpers/Return.rb +53 -0
  28. metadata +64 -45
  29. data/lib/ArangoRB_AQL.rb +0 -181
  30. data/lib/ArangoRB_Cache.rb +0 -174
  31. data/lib/ArangoRB_Col.rb +0 -526
  32. data/lib/ArangoRB_DB.rb +0 -363
  33. data/lib/ArangoRB_Doc.rb +0 -319
  34. data/lib/ArangoRB_Edg.rb +0 -184
  35. data/lib/ArangoRB_Gra.rb +0 -201
  36. data/lib/ArangoRB_Index.rb +0 -135
  37. data/lib/ArangoRB_Replication.rb +0 -261
  38. data/lib/ArangoRB_Ser.rb +0 -446
  39. data/lib/ArangoRB_Task.rb +0 -129
  40. data/lib/ArangoRB_Tra.rb +0 -169
  41. data/lib/ArangoRB_Tran.rb +0 -68
  42. data/lib/ArangoRB_User.rb +0 -157
  43. data/lib/ArangoRB_Ver.rb +0 -162
  44. data/spec/arangoRB_helper.rb +0 -4
  45. data/spec/arangoRestart_helper.rb +0 -14
  46. data/spec/arangorb-1.3.0.gem +0 -0
  47. data/spec/lib/0.1.0/arangoAQL_helper.rb +0 -64
  48. data/spec/lib/0.1.0/arangoC_helper.rb +0 -170
  49. data/spec/lib/0.1.0/arangoDB_helper.rb +0 -119
  50. data/spec/lib/0.1.0/arangoDoc_helper.rb +0 -79
  51. data/spec/lib/0.1.0/arangoE_helper.rb +0 -50
  52. data/spec/lib/0.1.0/arangoG_helper.rb +0 -78
  53. data/spec/lib/0.1.0/arangoS_helper.rb +0 -37
  54. data/spec/lib/0.1.0/arangoT_helper.rb +0 -48
  55. data/spec/lib/0.1.0/arangoV_helper.rb +0 -65
  56. data/spec/lib/1.0.0/arangoC_helper.rb +0 -73
  57. data/spec/lib/1.0.0/arangoDB_helper.rb +0 -48
  58. data/spec/lib/1.0.0/arangoI_helper.rb +0 -43
  59. data/spec/lib/1.0.0/arangoS_helper.rb +0 -192
  60. data/spec/lib/1.0.0/arangoTa_helper.rb +0 -49
  61. data/spec/lib/1.0.0/arangoTr_helper.rb +0 -15
  62. data/spec/lib/1.0.0/arangoU_helper.rb +0 -72
  63. data/spec/lib/1.1.0/arangoRB_helper.rb +0 -144
  64. data/spec/lib/1.1.0/arangoRB_walks_helper.rb +0 -19
  65. data/spec/lib/1.2.0/arangoCache_helper.rb +0 -66
  66. data/spec/lib/1.3.0/arangoHash_helper.rb +0 -30
  67. data/spec/lib/arangoRB_0.1.0_helper.rb +0 -9
  68. data/spec/lib/arangoRB_1.0.0_helper.rb +0 -6
  69. data/spec/lib/arangoRB_1.1.0_helper.rb +0 -2
  70. data/spec/lib/arangoRB_1.2.0_helper.rb +0 -2
  71. data/spec/spec_helper.rb +0 -42
data/lib/ArangoRB_DB.rb DELETED
@@ -1,363 +0,0 @@
1
- # === DATABASE ===
2
-
3
- class ArangoDatabase < ArangoServer
4
- @isSystem = nil
5
- @path = nil
6
- @id = nil
7
-
8
- def initialize(database: @@database) # TESTED
9
- if database.is_a?(String)
10
- @database = database
11
- elsif database.is_a?(ArangoDatabase)
12
- @database = database.database
13
- else
14
- raise "database should be a String or an ArangoDatabase instance, not a #{database.class}"
15
- end
16
- @idCache = "DB_#{@database}"
17
- end
18
-
19
- attr_reader :database, :isSystem, :path, :id, :idCache # TESTED
20
- alias name database
21
-
22
- # === RETRIEVE ===
23
-
24
- def to_hash
25
- {
26
- "database" => @database,
27
- "isSystem" => @isSystem,
28
- "path" => @path,
29
- "id" => @id,
30
- "idCache" => @idCache,
31
- "endpoint" => "tcp://#{@@server}:#{@@port}"
32
- }.delete_if{|k,v| v.nil?}
33
- end
34
- alias to_h to_hash
35
-
36
- def [](collection_name)
37
- ArangoCollection.new(collection: collection_name, database: @database)
38
- end
39
- alias collection []
40
-
41
- def graph(graph_name)
42
- ArangoGraph.new(graph: graph_name, database: @database)
43
- end
44
-
45
- # === GET ===
46
-
47
- def info # TESTED
48
- result = self.class.get("/_db/#{@database}/_api/database/current", @@request)
49
- return result.headers["x-arango-async-id"] if @@async == "store"
50
- return true if @@async
51
- result = result.parsed_response
52
- @@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].delete_if{|k,v| k == "error" || k == "code"}
53
- end
54
-
55
- def retrieve # TESTED
56
- result = self.class.get("/_db/#{@database}/_api/database/current", @@request)
57
- return result.headers["x-arango-async-id"] if @@async == "store"
58
- return true if @@async
59
- result = result.parsed_response
60
- @isSystem = result["isSystem"]
61
- @path = result["path"]
62
- @id = result["id"]
63
- @@verbose ? result : result["error"] ? result["errorMessage"] : self
64
- end
65
-
66
- # === POST ===
67
-
68
- def create(username: nil, passwd: nil, users: nil) # TESTED
69
- body = {
70
- "name" => @database,
71
- "username" => username,
72
- "passwd" => passwd,
73
- "users" => users
74
- }
75
- body = body.delete_if{|k,v| v.nil?}.to_json
76
- request = @@request.merge({ :body => body })
77
- result = self.class.post("/_api/database", request)
78
- return true if @@async
79
- @@async == "store" ? result.headers["x-arango-async-id"] : @@verbose ? result.parsed_response : result.parsed_response["error"] ? result.parsed_response["errorMessage"] : self
80
- end
81
-
82
- # === DELETE ===
83
-
84
- def destroy # TESTED
85
- result = self.class.delete("/_api/database/#{@database}", @@request)
86
- self.class.return_result(result: result, caseTrue: true)
87
- end
88
-
89
- # === LISTS ===
90
-
91
- def self.databases(user: nil) # TESTED
92
- user = user.user if user.is_a?(ArangoUser)
93
- result = user.nil? ? get("/_api/database") : get("/_api/database/#{user}", @@request)
94
- return result.headers["x-arango-async-id"] if @@async == "store"
95
- return true if @@async
96
- result = result.parsed_response
97
- @@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].map{|x| ArangoDatabase.new(database: x)}
98
- end
99
-
100
- def collections(excludeSystem: true) # TESTED
101
- query = { "excludeSystem": excludeSystem }.delete_if{|k,v| v.nil?}
102
- request = @@request.merge({ :query => query })
103
- result = self.class.get("/_db/#{@database}/_api/collection", request)
104
- return result.headers["x-arango-async-id"] if @@async == "store"
105
- return true if @@async
106
- result = result.parsed_response
107
- @@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].map{|x| ArangoCollection.new(database: @database, collection: x["name"], type: x['type'] == 3 ? 'Edge' : 'Collection')}
108
- end
109
-
110
- def graphs # TESTED
111
- result = self.class.get("/_db/#{@database}/_api/gharial", @@request)
112
- return result.headers["x-arango-async-id"] if @@async == "store"
113
- return true if @@async
114
- result = result.parsed_response
115
- @@verbose ? result : result["error"] ? result["errorMessage"] : result["graphs"].map{|x| ArangoGraph.new(database: @database, graph: x["_key"], edgeDefinitions: x["edgeDefinitions"], orphanCollections: x["orphanCollections"])}
116
- end
117
-
118
- def functions # TESTED
119
- result = self.class.get("/_db/#{@database}/_api/aqlfunction", @@request)
120
- self.class.return_result result: result
121
- end
122
-
123
- # === QUERY ===
124
-
125
- def propertiesQuery # TESTED
126
- result = self.class.get("/_db/#{@database}/_api/query/properties", @@request)
127
- self.class.return_result result: result
128
- end
129
-
130
- def currentQuery # TESTED
131
- result = self.class.get("/_db/#{@database}/_api/query/current", @@request)
132
- self.class.return_result result: result
133
- end
134
-
135
- def slowQuery # TESTED
136
- result = self.class.get("/_db/#{@database}/_api/query/slow", @@request)
137
- self.class.return_result result: result
138
- end
139
-
140
- def stopSlowQuery # TESTED
141
- result = self.class.delete("/_db/#{@database}/_api/query/slow", @@request)
142
- self.class.return_result result: result, caseTrue: true
143
- end
144
-
145
- def killQuery(query:) # TESTED
146
- id = query.is_a?(ArangoAQL) ? query.id : query.is_a?(String) ? query : nil
147
- result = self.class.delete("/_db/#{@database}/_api/query/#{id}", @@request)
148
- self.class.return_result result: result, caseTrue: true
149
- end
150
-
151
- def changePropertiesQuery(slowQueryThreshold: nil, enabled: nil, maxSlowQueries: nil, trackSlowQueries: nil, maxQueryStringLength: nil) # TESTED
152
- body = {
153
- "slowQueryThreshold" => slowQueryThreshold,
154
- "enabled" => enabled,
155
- "maxSlowQueries" => maxSlowQueries,
156
- "trackSlowQueries" => trackSlowQueries,
157
- "maxQueryStringLength" => maxQueryStringLength
158
- }.delete_if{|k,v| v.nil?}
159
- request = @@request.merge({ :body => body.to_json })
160
- result = self.class.put("/_db/#{@database}/_api/query/properties", request)
161
- self.class.return_result result: result
162
- end
163
-
164
- # === CACHE ===
165
-
166
- def clearCache # TESTED
167
- result = self.class.delete("/_db/#{@database}/_api/query-cache", @@request)
168
- self.class.return_result result: result, caseTrue: true
169
- end
170
-
171
- def propertyCache # TESTED
172
- result = self.class.get("/_db/#{@database}/_api/query-cache/properties", @@request)
173
- self.class.return_result result: result
174
- end
175
-
176
- def changePropertyCache(mode: nil, maxResults: nil) # TESTED
177
- body = { "mode" => mode, "maxResults" => maxResults }.delete_if{|k,v| v.nil?}
178
- request = @@request.merge({ :body => body.to_json })
179
- result = self.class.put("/_db/#{@database}/_api/query-cache/properties", request)
180
- self.class.return_result result: result
181
- end
182
-
183
- # === AQL FUNCTION ===
184
-
185
- def createFunction(code:, name:, isDeterministic: nil) # TESTED
186
- body = {
187
- "code" => code,
188
- "name" => name,
189
- "isDeterministic" => isDeterministic
190
- }.delete_if{|k,v| v.nil?}
191
- request = @@request.merge({ :body => body.to_json })
192
- result = self.class.post("/_db/#{@database}/_api/aqlfunction", request)
193
- self.class.return_result result: result
194
- end
195
-
196
- def deleteFunction(name:) # TESTED
197
- result = self.class.delete("/_db/#{@database}/_api/aqlfunction/#{name}", @@request)
198
- self.class.return_result result: result, caseTrue: true
199
- end
200
-
201
- # === REPLICATION ===
202
-
203
- def inventory(includeSystem: false) # TESTED
204
- query = { "includeSystem": includeSystem }
205
- request = @@request.merge({ :query => query })
206
- result = self.class.get("/_db/#{@database}/_api/replication/inventory", request)
207
- self.class.return_result result: result
208
- end
209
-
210
- def clusterInventory(includeSystem: false) # TESTED
211
- query = { "includeSystem": includeSystem }
212
- request = @@request.merge({ :query => query })
213
- result = self.class.get("/_db/#{@database}/_api/replication/clusterInventory", request)
214
- self.class.return_result result: result
215
- end
216
-
217
- # def logger # TESTED
218
- # result = self.class.get("/_db/#{@database}/_api/replication/logger-state")
219
- # self.class.return_result result: result
220
- # end
221
- #
222
- # def loggerFollow(from: nil, to: nil, chunkSize: nil, includeSystem: false) # TESTED
223
- # query = {
224
- # "from": from,
225
- # "to": to,
226
- # "chunkSize": chunkSize,
227
- # "includeSystem": includeSystem
228
- # }.delete_if{|k,v| v.nil?}
229
- # request = @@request.merge({ :query => query })
230
- # result = self.class.get("/_db/#{@database}/_api/replication/logger-follow", request)
231
- # self.class.return_result result: result
232
- # end
233
- #
234
- # def firstTick # TESTED
235
- # result = self.class.get("/_db/#{@database}/_api/replication/logger-first-tick")
236
- # self.class.return_result result: result, key: "firstTick"
237
- # end
238
- #
239
- # def rangeTick # TESTED
240
- # result = self.class.get("/_db/#{@database}/_api/replication/logger-tick-ranges")
241
- # self.class.return_result result: result
242
- # end
243
- #
244
- # def sync(endpoint:, username:, password:, includeSystem: true, database: @database, initialSyncMaxWaitTime: nil, restrictType: nil, incremental: nil, restrictCollections: nil) # TESTED
245
- # body = {
246
- # "username" => username,
247
- # "password" => password,
248
- # "includeSystem" => includeSystem,
249
- # "endpoint" => endpoint,
250
- # "initialSyncMaxWaitTime" => initialSyncMaxWaitTime,
251
- # "database" => database,
252
- # "restrictType" => restrictType,
253
- # "incremental" => incremental,
254
- # "restrictCollections" => restrictCollections
255
- # }.delete_if{|k,v| v.nil?}
256
- # request = @@request.merge({ :body => body.to_json })
257
- # result = self.class.put("/_db/#{database}/_api/replication/sync", request)
258
- # self.class.return_result result: result
259
- # end
260
- #
261
- # def configurationReplication # TESTED
262
- # result = self.class.get("/_db/#{@database}/_api/replication/applier-config", @@request)
263
- # self.class.return_result result: result
264
- # end
265
- #
266
- # def modifyConfigurationReplication(endpoint: nil, username: nil, password: nil, 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
267
- # body = {
268
- # "username" => username,
269
- # "password" => password,
270
- # "includeSystem" => includeSystem,
271
- # "endpoint" => endpoint,
272
- # "initialSyncMaxWaitTime" => initialSyncMaxWaitTime,
273
- # "database" => database,
274
- # "verbose" => verbose,
275
- # "connectTimeout" => connectTimeout,
276
- # "autoResync" => autoResync,
277
- # "idleMinWaitTime" => idleMinWaitTime,
278
- # "requestTimeout" => requestTimeout,
279
- # "requireFromPresent" => requireFromPresent,
280
- # "idleMaxWaitTime" => idleMaxWaitTime,
281
- # "restrictType" => restrictType,
282
- # "maxConnectRetries" => maxConnectRetries,
283
- # "autoStart" => autoStart,
284
- # "adaptivePolling" => adaptivePolling,
285
- # "connectionRetryWaitTime" => connectionRetryWaitTime,
286
- # "restrictCollections" => restrictCollections,
287
- # "autoResyncRetries" => autoResyncRetries,
288
- # "chunkSize" => chunkSize
289
- # }.delete_if{|k,v| v.nil?}
290
- # request = @@request.merge({ :body => body.to_json })
291
- # result = self.class.put("/_db/#{database}/_api/replication/applier-config", request)
292
- # self.class.return_result result: result
293
- # end
294
- # alias modifyReplication modifyConfigurationReplication
295
- #
296
- # def startReplication(from: nil) # TESTED
297
- # query = {from: from}.delete_if{|k,v| v.nil?}
298
- # request = @@request.merge({ :query => query })
299
- # result = self.class.put("/_db/#{@database}/_api/replication/applier-start", request)
300
- # self.class.return_result result: result
301
- # end
302
- #
303
- # def stopReplication # TESTED
304
- # result = self.class.put("/_db/#{@database}/_api/replication/applier-stop", @@request)
305
- # self.class.return_result result: result
306
- # end
307
- #
308
- # def stateReplication # TESTED
309
- # result = self.class.get("/_db/#{@database}/_api/replication/applier-state", @@request)
310
- # self.class.return_result result: result
311
- # end
312
- #
313
- # def enslave(endpoint:, username:, password:, database: @database, includeSystem: true, verbose: false, connectTimeout: nil, autoResync: nil, idleMinWaitTime: nil, requestTimeout: nil, requireFromPresent: nil, idleMaxWaitTime: nil, restrictCollections: nil, restrictType: nil, initialSyncMaxWaitTime: nil, maxConnectRetries: nil, adaptivePolling: nil, connectionRetryWaitTime: nil, autoResyncRetries: nil, chunkSize: nil) # TESTED
314
- # body = {
315
- # "username" => username,
316
- # "password" => password,
317
- # "includeSystem" => includeSystem,
318
- # "endpoint" => endpoint,
319
- # "initialSyncMaxWaitTime" => initialSyncMaxWaitTime,
320
- # "database" => database,
321
- # "verbose" => verbose,
322
- # "connectTimeout" => connectTimeout,
323
- # "autoResync" => autoResync,
324
- # "idleMinWaitTime" => idleMinWaitTime,
325
- # "requestTimeout" => requestTimeout,
326
- # "requireFromPresent" => requireFromPresent,
327
- # "idleMaxWaitTime" => idleMaxWaitTime,
328
- # "restrictType" => restrictType,
329
- # "maxConnectRetries" => maxConnectRetries,
330
- # "adaptivePolling" => adaptivePolling,
331
- # "connectionRetryWaitTime" => connectionRetryWaitTime,
332
- # "restrictCollections" => restrictCollections,
333
- # "autoResyncRetries" => autoResyncRetries,
334
- # "chunkSize" => chunkSize
335
- # }.delete_if{|k,v| v.nil?}
336
- # request = @@request.merge({ :body => body.to_json })
337
- # result = self.class.put("/_db/#{@database}/_api/replication/make-slave", request)
338
- # self.class.return_result result: result
339
- # end
340
- #
341
- # def serverId # TESTED
342
- # result = self.class.get("/_db/#{@database}/_api/replication/server-id", @@request)
343
- # self.class.return_result result: result, key: "serverId"
344
- # end
345
-
346
- # === USER ===
347
-
348
- def grant(user: @@user) # TESTED
349
- user = user.user if user.is_a?(ArangoUser)
350
- body = { "grant" => "rw" }.to_json
351
- request = @@request.merge({ :body => body })
352
- result = self.class.put("/_api/user/#{user}/database/#{@database}", request)
353
- self.class.return_result result: result, caseTrue: true
354
- end
355
-
356
- def revoke(user: @@user) # TESTED
357
- user = user.user if user.is_a?(ArangoUser)
358
- body = { "grant" => "none" }.to_json
359
- request = @@request.merge({ :body => body })
360
- result = self.class.put("/_api/user/#{user}/database/#{@database}", request)
361
- self.class.return_result result: result, caseTrue: true
362
- end
363
- end
data/lib/ArangoRB_Doc.rb DELETED
@@ -1,319 +0,0 @@
1
- # ==== DOCUMENT ====
2
-
3
- class ArangoDocument < ArangoServer
4
- def initialize(key: nil, collection: @@collection, database: @@database, body: {}, from: nil, to: nil) # TESTED
5
- if collection.is_a?(String)
6
- @collection = collection
7
- elsif collection.is_a?(ArangoCollection)
8
- @collection = collection.collection
9
- else
10
- raise "collection should be a String or an ArangoCollection instance, not a #{collection.class}"
11
- end
12
-
13
- if database.is_a?(String)
14
- @database = database
15
- elsif database.is_a?(ArangoDatabase)
16
- @database = database.database
17
- else
18
- raise "database should be a String or an ArangoDatabase instance, not a #{database.class}"
19
- end
20
-
21
- if key.is_a?(String) || key.nil?
22
- @key = key
23
- unless key.nil?
24
- body["_key"] = @key
25
- @id = "#{@collection}/#{@key}"
26
- end
27
- elsif key.is_a?(ArangoDocument)
28
- @key = key.key
29
- @id = key.id
30
- else
31
- raise "key should be a String, not a #{key.class}"
32
- end
33
-
34
- if body.is_a?(Hash)
35
- @body = body
36
- else
37
- raise "body should be a Hash, not a #{body.class}"
38
- end
39
-
40
- if from.is_a?(String)
41
- @body["_from"] = from
42
- elsif from.is_a?(ArangoDocument)
43
- @body["_from"] = from.id
44
- elsif from.nil?
45
- else
46
- raise "from should be a String or an ArangoDocument instance, not a #{from.class}"
47
- end
48
-
49
- if to.is_a?(String)
50
- @body["_to"] = to
51
- elsif to.is_a?(ArangoDocument)
52
- @body["_to"] = to.id
53
- elsif to.nil?
54
- else
55
- raise "to should be a String or an ArangoDocument instance, not a #{to.class}"
56
- end
57
-
58
- @idCache = "DOC_#{@id}"
59
- end
60
-
61
- attr_reader :key, :id, :body, :idCache
62
- alias name key
63
-
64
- # === RETRIEVE ===
65
-
66
- def to_hash
67
- {
68
- "key" => @key,
69
- "id" => @id,
70
- "collection" => @collection,
71
- "database" => @database,
72
- "body" => @body,
73
- "idCache" => @idCache
74
- }.delete_if{|k,v| v.nil?}
75
- end
76
- alias to_h to_hash
77
-
78
- def collection
79
- ArangoCollection.new(collection: @collection, database: @database)
80
- end
81
-
82
- def database
83
- ArangoDatabase.new(database: @database)
84
- end
85
-
86
- # === GET ===
87
-
88
- def retrieve # TESTED
89
- result = self.class.get("/_db/#{@database}/_api/document/#{@id}", @@request)
90
- self.return_result result: result
91
- end
92
-
93
- def retrieve_edges(collection: , direction: nil) # TESTED
94
- query = {"vertex" => @id, "direction" => direction }.delete_if{|k,v| v.nil?}
95
- request = @@request.merge({ :query => query })
96
- collection = collection.is_a?(String) ? collection : collection.collection
97
- result = self.class.get("/_db/#{@database}/_api/edges/#{collection}", request)
98
- return result.headers["x-arango-async-id"] if @@async == "store"
99
- return true if @@async
100
- result = result.parsed_response
101
- @@verbose ? result : result["error"] ? result["errorMessage"] : result["edges"].map{|edge| ArangoDocument.new(key: edge["_key"], collection: collection, database: @database, body: edge)}
102
- end
103
-
104
- def in(edgeCollection) # TESTED
105
- self.retrieve_edges collection: edgeCollection, direction: "in"
106
- end
107
-
108
- def out(edgeCollection) # TESTED
109
- self.retrieve_edges collection: edgeCollection, direction: "out"
110
- end
111
-
112
- def any(edgeCollection) # TESTED
113
- self.retrieve_edges collection: edgeCollection
114
- end
115
-
116
- def from # TESTED
117
- result = self.class.get("/_db/#{@database}/_api/document/#{self.body["_from"]}", @@request)
118
- collection = result["_id"].split("/")[0]
119
- return result.headers["x-arango-async-id"] if @@async == "store"
120
- return true if @@async
121
- result = result.parsed_response
122
- @@verbose ? result : result["error"] ? result["errorMessage"] : ArangoDocument.new(key: result["_key"], collection: collection, database: @database, body: result)
123
- end
124
-
125
- def to # TESTED
126
- result = self.class.get("/_db/#{@database}/_api/document/#{self.body["_to"]}", @@request)
127
- collection = result["_id"].split("/")[0]
128
- return result.headers["x-arango-async-id"] if @@async == "store"
129
- return true if @@async
130
- result = result.parsed_response
131
- @@verbose ? result : result["error"] ? result["errorMessage"] : ArangoDocument.new(key: result["_key"], collection: collection, database: @database, body: result)
132
- end
133
-
134
- # def header
135
- # result = self.class.head("/_db/#{@database}/_api/document/#{@id}", follow_redirects: true, maintain_method_across_redirects: true)
136
- # @@verbose ? result : result["error"] ? result["errorMessage"] : result
137
- # end
138
-
139
- # === POST ====
140
-
141
- def create(body: {}, waitForSync: nil, returnNew: nil) # TESTED
142
- body = @body.merge(body)
143
- query = {"waitForSync" => waitForSync, "returnNew" => returnNew}.delete_if{|k,v| v.nil?}
144
- body["_key"] = @key if body["_key"].nil? && !key.nil?
145
- request = @@request.merge({ :body => @body.to_json, :query => query })
146
- result = self.class.post("/_db/#{@database}/_api/document/#{@collection}", request)
147
- return_result result: result, body: @body
148
- end
149
- alias create_document create
150
- alias create_vertex create
151
-
152
- def self.create(body: {}, waitForSync: nil, returnNew: nil, database: @@database, collection: @@collection) # TESTED
153
- collection = collection.is_a?(String) ? collection : collection.collection
154
- database = database.is_a?(String) ? database : database.database
155
- query = {"waitForSync" => waitForSync, "returnNew" => returnNew}.delete_if{|k,v| v.nil?}
156
- unless body.is_a? Array
157
- request = @@request.merge({ :body => body.to_json, :query => query })
158
- result = post("/_db/#{database}/_api/document/#{collection}", request)
159
- return result.headers["x-arango-async-id"] if @@async == "store"
160
- return true if @@async
161
- result = result.parsed_response
162
- @@verbose ? result : result["error"] ? result["errorMessage"] : ArangoDocument.new(key: result["_key"], collection: result["_id"].split("/")[0], body: body)
163
- else
164
- body = body.map{|x| x.is_a?(Hash) ? x : x.is_a?(ArangoDocument) ? x.body : nil}
165
- request = @@request.merge({ :body => body.to_json, :query => query })
166
- result = post("/_db/#{database}/_api/document/#{collection}", request)
167
- return result.headers["x-arango-async-id"] if @@async == "store"
168
- return true if @@async
169
- result = result.parsed_response
170
- i = -1
171
- @@verbose ? result : !result.is_a?(Array) ? result["errorMessage"] : result.map{|x| ArangoDocument.new(key: x["_key"], collection: collection, database: database, body: body[i+=1])}
172
- end
173
- end
174
-
175
- def create_edge(body: {}, from:, to:, waitForSync: nil, returnNew: nil, database: @database, collection: @collection) # TESTED
176
- body = @body.merge(body)
177
- edges = []
178
- from = [from] unless from.is_a? Array
179
- to = [to] unless to.is_a? Array
180
- from.each do |f|
181
- body["_from"] = f.is_a?(String) ? f : f.id
182
- to.each do |t|
183
- body["_to"] = t.is_a?(String) ? t : t.id
184
- edges << body.clone
185
- end
186
- end
187
- edges = edges[0]
188
- ArangoDocument.create(body: edges, waitForSync: waitForSync, returnNew: returnNew, database: database, collection: collection)
189
- end
190
-
191
- def self.create_edge(body: {}, from:, to:, waitForSync: nil, returnNew: nil, database: @@database, collection: @@collection) # TESTED
192
- edges = []
193
- from = [from] unless from.is_a? Array
194
- to = [to] unless to.is_a? Array
195
- body = [body] unless body.is_a? Array
196
- body = body.map{|x| x.is_a?(Hash) ? x : x.is_a?(ArangoDocument) ? x.body : nil}
197
- body.each do |b|
198
- from.each do |f|
199
- b["_from"] = f.is_a?(String) ? f : f.id
200
- to.each do |t|
201
- b["_to"] = t.is_a?(String) ? t : t.id
202
- edges << b.clone
203
- end
204
- end
205
- end
206
- edges = edges[0] if edges.length == 1
207
- ArangoDocument.create(body: edges, waitForSync: waitForSync, returnNew: returnNew, database: database, collection: collection)
208
- end
209
-
210
- # === MODIFY ===
211
-
212
- def replace(body: {}, waitForSync: nil, ignoreRevs: nil, returnOld: nil, returnNew: nil) # TESTED
213
- query = {
214
- "waitForSync" => waitForSync,
215
- "returnNew" => returnNew,
216
- "returnOld" => returnOld,
217
- "ignoreRevs" => ignoreRevs
218
- }.delete_if{|k,v| v.nil?}
219
- request = @@request.merge({ :body => body.to_json, :query => query })
220
-
221
- unless body.is_a? Array
222
- result = self.class.put("/_db/#{@database}/_api/document/#{@id}", request)
223
- self.return_result result: result, body: body
224
- else
225
- result = self.class.put("/_db/#{@database}/_api/document/#{@collection}", request)
226
- i = -1
227
- return result.headers["x-arango-async-id"] if @@async == "store"
228
- return true if @@async
229
- result = result.parsed_response
230
- @@verbose ? result : !result.is_a?(Array) ? result["errorMessage"] : result.map{|x| ArangoDocument.new(key: x["_key"], collection: @collection, database: @database, body: body[i+=1])}
231
- end
232
- end
233
-
234
- def update(body: {}, waitForSync: nil, ignoreRevs: nil, returnOld: nil, returnNew: nil, keepNull: nil, mergeObjects: nil) # TESTED
235
- query = {
236
- "waitForSync" => waitForSync,
237
- "returnNew" => returnNew,
238
- "returnOld" => returnOld,
239
- "ignoreRevs" => ignoreRevs,
240
- "keepNull" => keepNull,
241
- "mergeObjects" => mergeObjects
242
- }.delete_if{|k,v| v.nil?}
243
- request = @@request.merge({ :body => body.to_json, :query => query })
244
-
245
- unless body.is_a? Array
246
- result = self.class.patch("/_db/#{@database}/_api/document/#{@id}", request)
247
- return result.headers["x-arango-async-id"] if @@async == "store"
248
- return true if @@async
249
- result = result.parsed_response
250
- if @@verbose
251
- unless result["error"]
252
- @key = result["_key"]
253
- @id = "#{@collection}/#{@key}"
254
- @body = body
255
- end
256
- result
257
- else
258
- return result["errorMessage"] if result["error"]
259
- @key = result["_key"]
260
- @id = "#{@collection}/#{@key}"
261
- @body = @body.merge(body)
262
- return self
263
- end
264
- else
265
- result = self.class.patch("/_db/#{@database}/_api/document/#{@collection}", request)
266
- i = -1
267
- return result.headers["x-arango-async-id"] if @@async == "store"
268
- return true if @@async
269
- result = result.parsed_response
270
- @@verbose ? result : !result.is_a?(Array) ? result["errorMessage"] : result.map{|x| ArangoDocument.new(key: x["_key"], collection: @collection, database: @database, body: body[i+=1])}
271
- end
272
- end
273
-
274
- # === DELETE ===
275
-
276
- def destroy(body: nil, waitForSync: nil, ignoreRevs: nil, returnOld: nil) # TESTED
277
- query = {
278
- "waitForSync" => waitForSync,
279
- "returnOld" => returnOld,
280
- "ignoreRevs" => ignoreRevs
281
- }.delete_if{|k,v| v.nil?}
282
- request = @@request.merge({ :body => body.to_json, :query => query })
283
-
284
- unless body.is_a? Array
285
- result = self.class.delete("/_db/#{@database}/_api/document/#{@id}", request)
286
- return_result result: result, caseTrue: true
287
- else
288
- result = self.class.delete("/_db/#{@database}/_api/document/#{@collection}", request)
289
- return_result result: result, caseTrue: true
290
- end
291
- end
292
-
293
- # === UTILITY ===
294
-
295
- def return_result(result:, body: {}, caseTrue: false, key: nil)
296
- return result.headers["x-arango-async-id"] if @@async == "store"
297
- return true if @@async
298
- result = result.parsed_response
299
- if @@verbose || !result.is_a?(Hash)
300
- resultTemp = result
301
- unless result["errorMessage"]
302
- result.delete_if{|k,v| k == "error" || k == "code"}
303
- @key = result["_key"]
304
- @collection = result["_id"].split("/")[0]
305
- @body = result.merge(body)
306
- end
307
- return resultTemp
308
- else
309
- return result["errorMessage"] if result["error"]
310
- return true if caseTrue
311
- result.delete_if{|k,v| k == "error" || k == "code"}
312
- @key = result["_key"]
313
- @collection = result["_id"].split("/")[0]
314
- @id = "#{@collection}/#{@key}"
315
- @body = result.merge(body)
316
- key.nil? ? self : result[key]
317
- end
318
- end
319
- end