arangorb 1.0.0 → 1.1.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 +1 -1
- data/README.md +26 -1
- data/lib/ArangoRB_AQL.rb +30 -60
- data/lib/ArangoRB_Col.rb +89 -258
- data/lib/ArangoRB_DB.rb +18 -90
- data/lib/ArangoRB_Doc.rb +46 -45
- data/lib/ArangoRB_Edg.rb +48 -57
- data/lib/ArangoRB_Gra.rb +66 -105
- data/lib/ArangoRB_Index.rb +41 -72
- data/lib/ArangoRB_Ser.rb +21 -65
- data/lib/ArangoRB_Task.rb +33 -57
- data/lib/ArangoRB_Tra.rb +31 -35
- data/lib/ArangoRB_Tran.rb +17 -15
- data/lib/ArangoRB_User.rb +54 -71
- data/lib/ArangoRB_Ver.rb +48 -57
- data/spec/arangoRB_helper.rb +1 -0
- data/spec/lib/0.1.0/arangoC_helper.rb +2 -2
- data/spec/lib/0.1.0/arangoDoc_helper.rb +1 -1
- data/spec/lib/0.1.0/arangoE_helper.rb +1 -1
- data/spec/lib/0.1.0/arangoS_helper.rb +3 -3
- data/spec/lib/0.1.0/arangoT_helper.rb +4 -4
- data/spec/lib/0.1.0/arangoV_helper.rb +1 -1
- data/spec/lib/1.0.0/arangoDB_helper.rb +0 -33
- data/spec/lib/1.0.0/arangoS_helper.rb +1 -1
- data/spec/lib/1.0.0/arangoTa_helper.rb +1 -1
- data/spec/lib/1.0.0/arangoTr_helper.rb +1 -1
- data/spec/lib/1.1.0/arangoRB_helper.rb +144 -0
- data/spec/lib/1.1.0/arangoRB_walks_helper.rb +18 -0
- data/spec/lib/arangoRB_1.1.0_helper.rb +2 -0
- data/spec/spec_helper.rb +1 -0
- metadata +5 -3
data/lib/ArangoRB_Index.rb
CHANGED
@@ -41,31 +41,31 @@ class ArangoIndex < ArangoServer
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
attr_reader :
|
44
|
+
attr_reader :body, :type, :id, :unique, :fields, :key, :sparse
|
45
|
+
|
46
|
+
### RETRIEVE ###
|
47
|
+
|
48
|
+
def database
|
49
|
+
ArangoDatabase.new(database: @database)
|
50
|
+
end
|
51
|
+
|
52
|
+
def collection
|
53
|
+
ArangoCollection.new(collection: @collection, database: @database)
|
54
|
+
end
|
45
55
|
|
46
56
|
def retrieve # TESTED
|
47
57
|
result = self.class.get("/_db/#{@database}/_api/index/#{@id}", @@request)
|
48
|
-
if @@async == "store"
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
result.delete("code")
|
60
|
-
@body = result
|
61
|
-
@type = result["type"]
|
62
|
-
@unique = result["unique"]
|
63
|
-
@fields = result["fields"]
|
64
|
-
@sparse = result["sparse"]
|
65
|
-
self
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
58
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
59
|
+
result = result.parsed_response
|
60
|
+
return result if @@verbose
|
61
|
+
return result["errorMessage"] if result["error"]
|
62
|
+
result.delete_if{|k,v| k == "error" || k == "code"}
|
63
|
+
@body = result
|
64
|
+
@type = result["type"]
|
65
|
+
@unique = result["unique"]
|
66
|
+
@fields = result["fields"]
|
67
|
+
@sparse = result["sparse"]
|
68
|
+
self
|
69
69
|
end
|
70
70
|
|
71
71
|
def self.indexes(database: @@database, collection: @@collection) # TESTED
|
@@ -74,23 +74,13 @@ class ArangoIndex < ArangoServer
|
|
74
74
|
query = { "collection": collection }
|
75
75
|
request = @@request.merge({ :query => query })
|
76
76
|
result = get("/_db/#{database}/_api/index", request)
|
77
|
-
if @@async == "store"
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
if result["error"]
|
85
|
-
result["errorMessage"]
|
86
|
-
else
|
87
|
-
result.delete("error")
|
88
|
-
result.delete("code")
|
89
|
-
result["indexes"] = result["indexes"].map{|x| ArangoIndex.new(body: x, id: x["id"], database: database, collection: collection, type: x["type"], unique: x["unique"], fields: x["fields"], sparse: x["sparse"])}
|
90
|
-
result
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
77
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
78
|
+
result = result.parsed_response
|
79
|
+
return result if @@verbose
|
80
|
+
return result["errorMessage"] if result["error"]
|
81
|
+
result.delete_if{|k,v| k == "error" || k == "code"}
|
82
|
+
result["indexes"] = result["indexes"].map{|x| ArangoIndex.new(body: x, id: x["id"], database: database, collection: collection, type: x["type"], unique: x["unique"], fields: x["fields"], sparse: x["sparse"])}
|
83
|
+
result
|
94
84
|
end
|
95
85
|
|
96
86
|
def create # TESTED
|
@@ -103,42 +93,21 @@ class ArangoIndex < ArangoServer
|
|
103
93
|
query = { "collection": @collection }
|
104
94
|
request = @@request.merge({ :body => body.to_json, :query => query })
|
105
95
|
result = self.class.post("/_db/#{@database}/_api/index", request)
|
106
|
-
if @@async == "store"
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
else
|
116
|
-
result.delete("error")
|
117
|
-
result.delete("code")
|
118
|
-
@body = result
|
119
|
-
@id = result["id"]
|
120
|
-
@key = @id.split("/")[1]
|
121
|
-
self
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
96
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
97
|
+
result = result.parsed_response
|
98
|
+
return result if @@verbose
|
99
|
+
return result["errorMessage"] if result["error"]
|
100
|
+
result.delete_if{|k,v| k == "error" || k == "code"}
|
101
|
+
@body = result
|
102
|
+
@id = result["id"]
|
103
|
+
@key = @id.split("/")[1]
|
104
|
+
self
|
125
105
|
end
|
126
106
|
|
127
107
|
def destroy # TESTED
|
128
108
|
result = self.class.delete("/_db/#{@database}/_api/index/#{id}", @@request)
|
129
|
-
if @@async == "store"
|
130
|
-
|
131
|
-
|
132
|
-
result = result.parsed_response
|
133
|
-
if @@verbose
|
134
|
-
result
|
135
|
-
else
|
136
|
-
if result["error"]
|
137
|
-
result["errorMessage"]
|
138
|
-
else
|
139
|
-
true
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
109
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
110
|
+
result = result.parsed_response
|
111
|
+
@@verbose ? result : result["error"] ? result["errorMessage"] : true
|
143
112
|
end
|
144
113
|
end
|
data/lib/ArangoRB_Ser.rb
CHANGED
@@ -64,10 +64,11 @@ class ArangoServer
|
|
64
64
|
else
|
65
65
|
raise "database should be a String or an ArangoDatabase instance, not a #{database.class}"
|
66
66
|
end
|
67
|
+
ArangoDatabase.new(database: @@database)
|
67
68
|
end
|
68
69
|
|
69
70
|
def self.database # TESTED
|
70
|
-
@@database
|
71
|
+
ArangoDatabase.new(database: @@database)
|
71
72
|
end
|
72
73
|
|
73
74
|
def self.graph=(graph) # TESTED
|
@@ -78,10 +79,11 @@ class ArangoServer
|
|
78
79
|
else
|
79
80
|
raise "graph should be a String or an ArangoGraph instance, not a #{graph.class}"
|
80
81
|
end
|
82
|
+
ArangoGraph.new(database: @@database, graph: @@graph)
|
81
83
|
end
|
82
84
|
|
83
85
|
def self.graph # TESTED
|
84
|
-
@@graph
|
86
|
+
ArangoGraph.new(database: @@database, graph: @@graph)
|
85
87
|
end
|
86
88
|
|
87
89
|
def self.collection=(collection) # TESTED
|
@@ -92,10 +94,11 @@ class ArangoServer
|
|
92
94
|
else
|
93
95
|
raise "graph should be a String or an ArangoCollection instance, not a #{collection.class}"
|
94
96
|
end
|
97
|
+
ArangoCollection.new(database: @@database, collection: @@collection)
|
95
98
|
end
|
96
99
|
|
97
100
|
def self.collection # TESTED
|
98
|
-
@@collection
|
101
|
+
ArangoCollection.new(database: @@database, collection: @@collection)
|
99
102
|
end
|
100
103
|
|
101
104
|
def self.user=(user)
|
@@ -106,10 +109,11 @@ class ArangoServer
|
|
106
109
|
else
|
107
110
|
raise "graph should be a String or an ArangoUser instance, not a #{user.class}"
|
108
111
|
end
|
112
|
+
ArangoUser.new(user: @@user)
|
109
113
|
end
|
110
114
|
|
111
115
|
def self.user # TESTED
|
112
|
-
@@user
|
116
|
+
ArangoUser.new(user: @@user)
|
113
117
|
end
|
114
118
|
|
115
119
|
def self.request # TESTED
|
@@ -171,20 +175,9 @@ class ArangoServer
|
|
171
175
|
|
172
176
|
def self.users # TESTED
|
173
177
|
result = get("/_api/user", @@request)
|
174
|
-
if @@async == "store"
|
175
|
-
|
176
|
-
|
177
|
-
result = result.parsed_response
|
178
|
-
if @@verbose
|
179
|
-
return result
|
180
|
-
else
|
181
|
-
if result["error"]
|
182
|
-
return result["errorMessage"]
|
183
|
-
else
|
184
|
-
return result["result"].map{|x| ArangoUser.new(user: x["user"], active: x["active"], extra: x["extra"])}
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
178
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
179
|
+
result = result.parsed_response
|
180
|
+
@@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].map{|x| ArangoUser.new(user: x["user"], active: x["active"], extra: x["extra"])}
|
188
181
|
end
|
189
182
|
|
190
183
|
def self.databases(user: nil) # TESTED
|
@@ -194,20 +187,9 @@ class ArangoServer
|
|
194
187
|
|
195
188
|
def self.tasks # TESTED
|
196
189
|
result = get("/_api/tasks", @@request)
|
197
|
-
if @@async == "store"
|
198
|
-
|
199
|
-
|
200
|
-
result = result.parsed_response
|
201
|
-
if @@verbose
|
202
|
-
result
|
203
|
-
else
|
204
|
-
if result.is_a?(Hash) && result["error"]
|
205
|
-
result["errorMessage"]
|
206
|
-
else
|
207
|
-
result.map{|x| ArangoTask.new(id: x["id"], name: x["name"], type: x["type"], period: x["period"], created: x["created"], command: x["command"], database: x["database"])}
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
190
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
191
|
+
result = result.parsed_response
|
192
|
+
@@verbose ? result : (result.is_a?(Hash) && result["error"]) ? result["errorMessage"] : result.map{|x| ArangoTask.new(id: x["id"], name: x["name"], type: x["type"], period: x["period"], created: x["created"], command: x["command"], database: x["database"])}
|
211
193
|
end
|
212
194
|
|
213
195
|
# === ASYNC ===
|
@@ -444,42 +426,16 @@ class ArangoServer
|
|
444
426
|
# === UTILITY ===
|
445
427
|
|
446
428
|
def self.return_result(result:, caseTrue: false, key: nil)
|
447
|
-
if @@async == "store"
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
else
|
454
|
-
if result["error"]
|
455
|
-
result["errorMessage"]
|
456
|
-
else
|
457
|
-
if caseTrue
|
458
|
-
true
|
459
|
-
elsif key.nil?
|
460
|
-
result.delete_if{|k,v| k == "error" || k == "code"}
|
461
|
-
else
|
462
|
-
result[key]
|
463
|
-
end
|
464
|
-
end
|
465
|
-
end
|
466
|
-
end
|
429
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
430
|
+
result = result.parsed_response
|
431
|
+
return result if @@verbose || !result.is_a?(Hash)
|
432
|
+
return result["errorMessage"] if result["error"]
|
433
|
+
return true if caseTrue
|
434
|
+
return key.nil? ? result.delete_if{|k,v| k == "error" || k == "code"} : result[key]
|
467
435
|
end
|
468
436
|
|
469
437
|
def self.return_result_async(result:, caseTrue: false)
|
470
438
|
result = result.parsed_response
|
471
|
-
|
472
|
-
result
|
473
|
-
else
|
474
|
-
if result["error"]
|
475
|
-
result["errorMessage"]
|
476
|
-
else
|
477
|
-
if caseTrue
|
478
|
-
true
|
479
|
-
else
|
480
|
-
result.delete_if{|k,v| k == "error" || k == "code"}
|
481
|
-
end
|
482
|
-
end
|
483
|
-
end
|
439
|
+
(@@verbose || !result.is_a?(Hash)) ? result : result["error"] ? result["errorMessage"] : caseTrue ? true : result.delete_if{|k,v| k == "error" || k == "code"}
|
484
440
|
end
|
485
441
|
end
|
data/lib/ArangoRB_Task.rb
CHANGED
@@ -18,7 +18,11 @@ class ArangoTask < ArangoServer
|
|
18
18
|
@created = created
|
19
19
|
end
|
20
20
|
|
21
|
-
attr_reader :id, :name, :type, :period, :created, :command, :
|
21
|
+
attr_reader :id, :name, :type, :period, :created, :command, :params
|
22
|
+
|
23
|
+
def database
|
24
|
+
ArangoDatabase.new(database: @database)
|
25
|
+
end
|
22
26
|
|
23
27
|
def retrieve # TESTED
|
24
28
|
result = self.class.get("/_db/#{@database}/_api/tasks/#{@id}")
|
@@ -54,20 +58,9 @@ class ArangoTask < ArangoServer
|
|
54
58
|
|
55
59
|
def self.tasks # TESTED
|
56
60
|
result = get("/_db/#{@@database}/_api/tasks", @@request)
|
57
|
-
if @@async == "store"
|
58
|
-
|
59
|
-
|
60
|
-
result = result.parsed_response
|
61
|
-
if @@verbose
|
62
|
-
result
|
63
|
-
else
|
64
|
-
if result.is_a?(Hash) && result["error"]
|
65
|
-
result["errorMessage"]
|
66
|
-
else
|
67
|
-
result.map{|x| ArangoTask.new(id: x["id"], name: x["name"], type: x["type"], period: x["period"], created: x["created"], command: x["command"], database: x["database"])}
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
61
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
62
|
+
result = result.parsed_response
|
63
|
+
@@verbose ? result : (result.is_a?(Hash) && result["error"]) ? result["errorMessage"] : result.map{|x| ArangoTask.new(id: x["id"], name: x["name"], type: x["type"], period: x["period"], created: x["created"], command: x["command"], database: x["database"])}
|
71
64
|
end
|
72
65
|
|
73
66
|
def create offset: nil # TESTED
|
@@ -84,53 +77,36 @@ class ArangoTask < ArangoServer
|
|
84
77
|
else
|
85
78
|
result = self.class.put("/_db/#{@database}/_api/tasks/#{@id}", request)
|
86
79
|
end
|
87
|
-
if @@async == "store"
|
88
|
-
|
89
|
-
|
90
|
-
result
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
@command = result["command"]
|
99
|
-
@database = result["database"]
|
100
|
-
end
|
101
|
-
result
|
102
|
-
else
|
103
|
-
if result.is_a?(Hash) && result["error"]
|
104
|
-
result["errorMessage"]
|
105
|
-
else
|
106
|
-
@id = result["id"]
|
107
|
-
@name = result["name"]
|
108
|
-
@type = result["type"]
|
109
|
-
@period = result["period"]
|
110
|
-
@created = result["created"]
|
111
|
-
@command = result["command"]
|
112
|
-
@database = result["database"]
|
113
|
-
self
|
114
|
-
end
|
80
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
81
|
+
result = result.parsed_response
|
82
|
+
if @@verbose
|
83
|
+
unless result.is_a?(Hash) && result["error"]
|
84
|
+
@id = result["id"]
|
85
|
+
@name = result["name"]
|
86
|
+
@type = result["type"]
|
87
|
+
@period = result["period"]
|
88
|
+
@created = result["created"]
|
89
|
+
@command = result["command"]
|
90
|
+
@database = result["database"]
|
115
91
|
end
|
92
|
+
result
|
93
|
+
else
|
94
|
+
return result["errorMessage"] if result.is_a?(Hash) && result["error"]
|
95
|
+
@id = result["id"]
|
96
|
+
@name = result["name"]
|
97
|
+
@type = result["type"]
|
98
|
+
@period = result["period"]
|
99
|
+
@created = result["created"]
|
100
|
+
@command = result["command"]
|
101
|
+
@database = result["database"]
|
102
|
+
self
|
116
103
|
end
|
117
104
|
end
|
118
105
|
|
119
106
|
def destroy # TESTED
|
120
107
|
result = self.class.delete("/_db/#{@database}/_api/tasks/#{@id}", @@request)
|
121
|
-
if @@async == "store"
|
122
|
-
|
123
|
-
|
124
|
-
result = result.parsed_response
|
125
|
-
if @@verbose
|
126
|
-
result
|
127
|
-
else
|
128
|
-
if result.is_a?(Hash) && result["error"]
|
129
|
-
result["errorMessage"]
|
130
|
-
else
|
131
|
-
true
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
108
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
109
|
+
result = result.parsed_response
|
110
|
+
@@verbose ? result : (result.is_a?(Hash) && result["error"]) ? result["errorMessage"] : true
|
135
111
|
end
|
136
112
|
end
|
data/lib/ArangoRB_Tra.rb
CHANGED
@@ -23,8 +23,26 @@ class ArangoTraversal < ArangoServer
|
|
23
23
|
@paths = nil
|
24
24
|
end
|
25
25
|
|
26
|
-
attr_accessor :sort, :direction, :maxDepth, :minDepth, :visitor, :itemOrder, :strategy, :filter, :init, :maxiterations, :uniqueness, :order, :expander, :vertices, :paths
|
27
|
-
|
26
|
+
attr_accessor :sort, :direction, :maxDepth, :minDepth, :visitor, :itemOrder, :strategy, :filter, :init, :maxiterations, :uniqueness, :order, :expander, :vertices, :paths
|
27
|
+
|
28
|
+
### RETRIEVE ###
|
29
|
+
|
30
|
+
def startVertex
|
31
|
+
val = @startVertex.split("/")
|
32
|
+
ArangoDocument.new(database: @database, collection: val[0], key: val[1])
|
33
|
+
end
|
34
|
+
|
35
|
+
def edgeCollection
|
36
|
+
ArangoCollection.new(collection: @edgeCollection, database: @database)
|
37
|
+
end
|
38
|
+
|
39
|
+
def database
|
40
|
+
ArangoDatabase.new(database: @database)
|
41
|
+
end
|
42
|
+
|
43
|
+
def graphName
|
44
|
+
ArangoGraph.new(graph: @graphName, database: @database).retrieve
|
45
|
+
end
|
28
46
|
|
29
47
|
def startVertex=(startVertex) # TESTED
|
30
48
|
if startVertex.is_a?(String)
|
@@ -100,38 +118,16 @@ class ArangoTraversal < ArangoServer
|
|
100
118
|
}.delete_if{|k,v| v.nil?}
|
101
119
|
request = @@request.merge({ :body => body.to_json })
|
102
120
|
result = self.class.post("/_db/#{@database}/_api/traversal", request)
|
103
|
-
if @@async == "store"
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
body: x
|
115
|
-
)}
|
116
|
-
@paths = result["result"]["visited"]["paths"].map{|x|
|
117
|
-
{ "edges" => x["edges"].map{|e| ArangoDocument.new(
|
118
|
-
key: e["_key"],
|
119
|
-
collection: e["_id"].split("/")[0],
|
120
|
-
database: @database,
|
121
|
-
body: e,
|
122
|
-
from: e["_from"],
|
123
|
-
to: e["_to"]
|
124
|
-
)},
|
125
|
-
"vertices" => x["vertices"].map{|v| ArangoDocument.new(
|
126
|
-
key: v["_key"],
|
127
|
-
collection: v["_id"].split("/")[0],
|
128
|
-
database: @database,
|
129
|
-
body: v
|
130
|
-
)}
|
131
|
-
}
|
132
|
-
}
|
133
|
-
return @@verbose ? result : self
|
134
|
-
end
|
135
|
-
end
|
121
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
122
|
+
result = result.parsed_response
|
123
|
+
return @@verbose ? result : result["errorMessage"] if result["error"]
|
124
|
+
@vertices = result["result"]["visited"]["vertices"].map{|x| ArangoDocument.new(key: x["_key"], collection: x["_id"].split("/")[0], database: @database, body: x)}
|
125
|
+
@paths = result["result"]["visited"]["paths"].map{|x|
|
126
|
+
{
|
127
|
+
"edges" => x["edges"].map{|e| ArangoDocument.new(key: e["_key"], collection: e["_id"].split("/")[0], database: @database, body: e, from: e["_from"], to: e["_to"] )},
|
128
|
+
"vertices" => x["vertices"].map{|v| ArangoDocument.new(key: v["_key"], collection: v["_id"].split("/")[0], database: @database, body: v )}
|
129
|
+
}
|
130
|
+
}
|
131
|
+
@@verbose ? result : self
|
136
132
|
end
|
137
133
|
end
|