arangorb 1.4.1 → 2.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.
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