Class: ArangoDatabase

Inherits:
ArangoServer show all
Defined in:
lib/ArangoRB_DB.rb

Overview

DATABASE ===

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ArangoServer

address, async, async=, batch, cancelAsync, changePropertyWAL, checkPort, cluster, cluster=, clusterRoundtrip, clusterStatistics, collection, collection=, createDumpBatch, database, database=, databaseVersion, default_server, destroyAllAsync, destroyAsync, destroyCluster, destroyDumpBatch, destroyExpiredAsync, echo, endpoints, execute, executeCluster, executeClusterHead, executeClusterPut, fetchAsync, flushWAL, graph, graph=, log, pendingAsync, prolongDumpBatch, propertyWAL, reload, request, restart, retrieveAsync, retrieveDoneAsync, retrievePendingAsync, return_result, return_result_async, role, server, serverId, shutdown, sleep, statistics, tasks, test, time, transactions, updateCluster, user, user=, username, users, verbose, verbose=, version

Constructor Details

#initialize(database: @@database) ⇒ ArangoDatabase

TESTED



8
9
10
11
12
13
14
15
16
17
# File 'lib/ArangoRB_DB.rb', line 8

def initialize(database: @@database)  # TESTED
  if database.is_a?(String)
    @database = database
  elsif database.is_a?(ArangoDatabase)
    @database = database.database
  else
    raise "database should be a String or an ArangoDatabase instance, not a #{database.class}"
  end
  @idCache = "DB_#{@database}"
end

Instance Attribute Details

#databaseObject (readonly) Also known as: name

TESTED



19
20
21
# File 'lib/ArangoRB_DB.rb', line 19

def database
  @database
end

#idObject (readonly)

TESTED



19
20
21
# File 'lib/ArangoRB_DB.rb', line 19

def id
  @id
end

#idCacheObject (readonly)

TESTED



19
20
21
# File 'lib/ArangoRB_DB.rb', line 19

def idCache
  @idCache
end

#isSystemObject (readonly)

TESTED



19
20
21
# File 'lib/ArangoRB_DB.rb', line 19

def isSystem
  @isSystem
end

#pathObject (readonly)

TESTED



19
20
21
# File 'lib/ArangoRB_DB.rb', line 19

def path
  @path
end

Class Method Details

.databases(user: nil) ⇒ Object

LISTS ===



91
92
93
94
95
96
97
98
# File 'lib/ArangoRB_DB.rb', line 91

def self.databases(user: nil)  # TESTED
  user = user.user if user.is_a?(ArangoUser)
  result = user.nil? ? get("/_api/database") : get("/_api/database/#{user}", @@request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  @@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].map{|x| ArangoDatabase.new(database: x)}
end

Instance Method Details

#[](collection_name) ⇒ Object Also known as: collection



36
37
38
# File 'lib/ArangoRB_DB.rb', line 36

def [](collection_name)
  ArangoCollection.new(collection: collection_name, database: @database)
end

#changePropertiesQuery(slowQueryThreshold: nil, enabled: nil, maxSlowQueries: nil, trackSlowQueries: nil, maxQueryStringLength: nil) ⇒ Object

TESTED



151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/ArangoRB_DB.rb', line 151

def changePropertiesQuery(slowQueryThreshold: nil, enabled: nil, maxSlowQueries: nil, trackSlowQueries: nil, maxQueryStringLength: nil)  # TESTED
  body = {
    "slowQueryThreshold" => slowQueryThreshold,
    "enabled" => enabled,
    "maxSlowQueries" => maxSlowQueries,
    "trackSlowQueries" => trackSlowQueries,
    "maxQueryStringLength" => maxQueryStringLength
  }.delete_if{|k,v| v.nil?}
  request = @@request.merge({ :body => body.to_json })
  result = self.class.put("/_db/#{@database}/_api/query/properties", request)
  self.class.return_result result: result
end

#changePropertyCache(mode: nil, maxResults: nil) ⇒ Object

TESTED



176
177
178
179
180
181
# File 'lib/ArangoRB_DB.rb', line 176

def changePropertyCache(mode: nil, maxResults: nil)  # TESTED
  body = { "mode" => mode, "maxResults" => maxResults }.delete_if{|k,v| v.nil?}
  request = @@request.merge({ :body => body.to_json })
  result = self.class.put("/_db/#{@database}/_api/query-cache/properties", request)
  self.class.return_result result: result
end

#clearCacheObject

CACHE ===



166
167
168
169
# File 'lib/ArangoRB_DB.rb', line 166

def clearCache  # TESTED
  result = self.class.delete("/_db/#{@database}/_api/query-cache", @@request)
  self.class.return_result result: result, caseTrue: true
end

#clusterInventory(includeSystem: false) ⇒ Object

TESTED



210
211
212
213
214
215
# File 'lib/ArangoRB_DB.rb', line 210

def clusterInventory(includeSystem: false) # TESTED
  query = { "includeSystem": includeSystem }
  request = @@request.merge({ :query => query })
  result = self.class.get("/_db/#{@database}/_api/replication/clusterInventory", request)
  self.class.return_result result: result
end

#collections(excludeSystem: true) ⇒ Object

TESTED



100
101
102
103
104
105
106
107
108
# File 'lib/ArangoRB_DB.rb', line 100

def collections(excludeSystem: true)  # TESTED
  query = { "excludeSystem": excludeSystem }.delete_if{|k,v| v.nil?}
  request = @@request.merge({ :query => query })
  result = self.class.get("/_db/#{@database}/_api/collection", request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  @@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].map{|x| ArangoCollection.new(database: @database, collection: x["name"], type: x['type'] == 3 ? 'Edge' : 'Collection')}
end

#create(username: nil, passwd: nil, users: nil) ⇒ Object

POST ===



68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/ArangoRB_DB.rb', line 68

def create(username: nil, passwd: nil, users: nil)  # TESTED
  body = {
    "name" => @database,
    "username" => username,
    "passwd" => passwd,
    "users" => users
  }
  body = body.delete_if{|k,v| v.nil?}.to_json
  request = @@request.merge({ :body => body })
  result = self.class.post("/_api/database", request)
  return true if @@async
  @@async == "store" ? result.headers["x-arango-async-id"] : @@verbose ? result.parsed_response : result.parsed_response["error"] ? result.parsed_response["errorMessage"] : self
end

#createFunction(code:, name:, isDeterministic: nil) ⇒ Object

AQL FUNCTION ===



185
186
187
188
189
190
191
192
193
194
# File 'lib/ArangoRB_DB.rb', line 185

def createFunction(code:, name:, isDeterministic: nil)  # TESTED
  body = {
    "code" => code,
    "name" => name,
    "isDeterministic" => isDeterministic
  }.delete_if{|k,v| v.nil?}
  request = @@request.merge({ :body => body.to_json })
  result = self.class.post("/_db/#{@database}/_api/aqlfunction", request)
  self.class.return_result result: result
end

#currentQueryObject

TESTED



130
131
132
133
# File 'lib/ArangoRB_DB.rb', line 130

def currentQuery  # TESTED
  result = self.class.get("/_db/#{@database}/_api/query/current", @@request)
  self.class.return_result result: result
end

#deleteFunction(name:) ⇒ Object

TESTED



196
197
198
199
# File 'lib/ArangoRB_DB.rb', line 196

def deleteFunction(name:) # TESTED
  result = self.class.delete("/_db/#{@database}/_api/aqlfunction/#{name}", @@request)
  self.class.return_result result: result, caseTrue: true
end

#destroyObject

DELETE ===



84
85
86
87
# File 'lib/ArangoRB_DB.rb', line 84

def destroy  # TESTED
  result = self.class.delete("/_api/database/#{@database}", @@request)
  self.class.return_result(result: result, caseTrue: true)
end

#functionsObject

TESTED



118
119
120
121
# File 'lib/ArangoRB_DB.rb', line 118

def functions  # TESTED
  result = self.class.get("/_db/#{@database}/_api/aqlfunction", @@request)
  self.class.return_result result: result
end

#grant(user: @@user) ⇒ Object

USER ===



348
349
350
351
352
353
354
# File 'lib/ArangoRB_DB.rb', line 348

def grant(user: @@user) # TESTED
  user = user.user if user.is_a?(ArangoUser)
  body = { "grant" => "rw" }.to_json
  request = @@request.merge({ :body => body })
  result = self.class.put("/_api/user/#{user}/database/#{@database}", request)
  self.class.return_result result: result, caseTrue: true
end

#graph(graph_name) ⇒ Object



41
42
43
# File 'lib/ArangoRB_DB.rb', line 41

def graph(graph_name)
   ArangoGraph.new(graph: graph_name, database: @database)
end

#graphsObject

TESTED



110
111
112
113
114
115
116
# File 'lib/ArangoRB_DB.rb', line 110

def graphs  # TESTED
  result = self.class.get("/_db/#{@database}/_api/gharial", @@request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  @@verbose ? result : result["error"] ? result["errorMessage"] : result["graphs"].map{|x| ArangoGraph.new(database: @database, graph: x["_key"], edgeDefinitions: x["edgeDefinitions"], orphanCollections: x["orphanCollections"])}
end

#infoObject

GET ===



47
48
49
50
51
52
53
# File 'lib/ArangoRB_DB.rb', line 47

def info  # TESTED
  result = self.class.get("/_db/#{@database}/_api/database/current", @@request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  @@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].delete_if{|k,v| k == "error" || k == "code"}
end

#inventory(includeSystem: false) ⇒ Object

REPLICATION ===



203
204
205
206
207
208
# File 'lib/ArangoRB_DB.rb', line 203

def inventory(includeSystem: false) # TESTED
  query = { "includeSystem": includeSystem }
  request = @@request.merge({ :query => query })
  result = self.class.get("/_db/#{@database}/_api/replication/inventory", request)
  self.class.return_result result: result
end

#killQuery(query:) ⇒ Object

TESTED



145
146
147
148
149
# File 'lib/ArangoRB_DB.rb', line 145

def killQuery(query:)  # TESTED
  id = query.is_a?(ArangoAQL) ? query.id : query.is_a?(String) ? query : nil
  result = self.class.delete("/_db/#{@database}/_api/query/#{id}", @@request)
  self.class.return_result result: result, caseTrue: true
end

#propertiesQueryObject

QUERY ===



125
126
127
128
# File 'lib/ArangoRB_DB.rb', line 125

def propertiesQuery  # TESTED
  result = self.class.get("/_db/#{@database}/_api/query/properties", @@request)
  self.class.return_result result: result
end

#propertyCacheObject

TESTED



171
172
173
174
# File 'lib/ArangoRB_DB.rb', line 171

def propertyCache  # TESTED
  result = self.class.get("/_db/#{@database}/_api/query-cache/properties", @@request)
  self.class.return_result result: result
end

#retrieveObject

TESTED



55
56
57
58
59
60
61
62
63
64
# File 'lib/ArangoRB_DB.rb', line 55

def retrieve  # TESTED
  result = self.class.get("/_db/#{@database}/_api/database/current", @@request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  @isSystem = result["isSystem"]
  @path = result["path"]
  @id = result["id"]
  @@verbose ? result : result["error"] ? result["errorMessage"] : self
end

#revoke(user: @@user) ⇒ Object

TESTED



356
357
358
359
360
361
362
# File 'lib/ArangoRB_DB.rb', line 356

def revoke(user: @@user) # TESTED
  user = user.user if user.is_a?(ArangoUser)
  body = { "grant" => "none" }.to_json
  request = @@request.merge({ :body => body })
  result = self.class.put("/_api/user/#{user}/database/#{@database}", request)
  self.class.return_result result: result, caseTrue: true
end

#slowQueryObject

TESTED



135
136
137
138
# File 'lib/ArangoRB_DB.rb', line 135

def slowQuery  # TESTED
  result = self.class.get("/_db/#{@database}/_api/query/slow", @@request)
  self.class.return_result result: result
end

#stopSlowQueryObject

TESTED



140
141
142
143
# File 'lib/ArangoRB_DB.rb', line 140

def stopSlowQuery  # TESTED
  result = self.class.delete("/_db/#{@database}/_api/query/slow", @@request)
  self.class.return_result result: result, caseTrue: true
end

#to_hashObject Also known as: to_h

RETRIEVE ===



24
25
26
27
28
29
30
31
32
33
# File 'lib/ArangoRB_DB.rb', line 24

def to_hash
  {
    "database" => @database,
    "isSystem" => @isSystem,
    "path" => @path,
    "id" => @id,
    "idCache" => @idCache,
    "endpoint" => "tcp://#{@@server}:#{@@port}"
  }.delete_if{|k,v| v.nil?}
end