arangorb 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|