Class: Arango::User

Inherits:
Object
  • Object
show all
Includes:
Helper_Error, Helper_Return, Server_Return
Defined in:
lib/User.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Server_Return

#server=

Methods included from Helper_Return

#return_delete, #return_directly?, #return_element

Methods included from Helper_Error

#satisfy_category?, #satisfy_class?, #warning_deprecated

Constructor Details

#initialize(server:, password: "", name:, extra: {}, active: nil, cache_name: nil) ⇒ User

Returns a new instance of User.



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/User.rb', line 29

def initialize(server:, password: "", name:, extra: {}, active: nil, cache_name: nil)
  assign_server(server)
  unless cache_name.nil?
    @cache_name = cache_name
    @server.cache.save(:user, cache_name, self)
  end
  @password = password
  @name     = name
  @extra    = extra
  @active   = active
end

Instance Attribute Details

#activeObject

DEFINE ===



43
44
45
# File 'lib/User.rb', line 43

def active
  @active
end

#bodyObject

Returns the value of attribute body.



44
45
46
# File 'lib/User.rb', line 44

def body
  @body
end

#cache_nameObject (readonly)

Returns the value of attribute cache_name.



44
45
46
# File 'lib/User.rb', line 44

def cache_name
  @cache_name
end

#extraObject

DEFINE ===



43
44
45
# File 'lib/User.rb', line 43

def extra
  @extra
end

#nameObject Also known as: user

DEFINE ===



43
44
45
# File 'lib/User.rb', line 43

def name
  @name
end

#password=(value) ⇒ Object (writeonly)

Sets the attribute password

Parameters:

  • value

    the value to set the attribute password to.



45
46
47
# File 'lib/User.rb', line 45

def password=(value)
  @password = value
end

#serverObject (readonly)

Returns the value of attribute server.



44
45
46
# File 'lib/User.rb', line 44

def server
  @server
end

Class Method Details

.new(*args) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/User.rb', line 9

def self.new(*args)
  hash = args[0]
  super unless hash.is_a?(Hash)
  database = hash[:database]
  if database.is_a?(Arango::Database) && database.server.active_cache
    cache_name = hash[:name]
    cached = database.server.cache.cache.dig(:user, cache_name)
    if cached.nil?
      hash[:cache_name] = cache_name
      return super
    else
      body = {}
      [:password, :extra, :active].each{|k| body[k] ||= hash[k]}
      cached.assign_attributes(body)
      return cached
    end
  end
  super
end

Instance Method Details

#[](database) ⇒ Object Also known as: database



74
75
76
77
78
79
80
# File 'lib/User.rb', line 74

def [](database)
  if self.databases[database.to_sym] == "rw"
    Arango::Database.new name: database, server: @server
  else
    "This User does not have access to Database #{database}."
  end
end

#addCollectionAccess(grant:, database:, collection:) ⇒ Object



144
145
146
147
148
149
150
151
152
153
154
# File 'lib/User.rb', line 144

def addCollectionAccess(grant:, database:, collection:)
  satisfy_category?(grant, ["rw", "ro", "none"])
  satisfy_class?(database, [Arango::Database, String])
  satisfy_class?(collection, [Arango::Collection, String])
  database = database.name     if database.is_a?(Arango::Database)
  collection = collection.name if collection.is_a?(Arango::Collection)
  body = {"grant": grant}
  result = @server.request("PUT", "_api/user/#{@name}/database/#{database}/#{collection}",
    body: body)
  return return_directly?(result) ? result : result[:"#{database}/#{collection}"]
end

#addDatabaseAccess(grant:, database:) ⇒ Object

ACCESS ==



130
131
132
133
134
135
136
137
138
# File 'lib/User.rb', line 130

def addDatabaseAccess(grant:, database:)
  satisfy_category?(grant, ["rw", "ro", "none"])
  satisfy_class?(database, [Arango::Database, String])
  database = database.name if database.is_a?(Arango::Database)
  body = {"grant": grant}
  result = @server.request("PUT", "_api/user/#{@name}/database/#{database}",
    body: body)
  return return_directly?(result) ? result : result[database.to_sym]
end

#collectionAccess(database:, collection:) ⇒ Object



187
188
189
190
191
192
193
194
195
# File 'lib/User.rb', line 187

def collectionAccess(database:, collection:)
  satisfy_class?(database, [Arango::Database, String])
  satisfy_class?(collection, [Arango::Collection, String])
  database = database.name     if database.is_a?(Arango::Database)
  collection = collection.name if collection.is_a?(Arango::Collection)
  result = @server.request("GET", "_api/user/#{@name}/database/#{database}/#{collection}",
    body: body)
  return return_directly?(result) ? result : result[:result]
end

#create(password: @password, active: @active, extra: @extra) ⇒ Object

USER ACTION ==



85
86
87
88
89
90
91
92
93
94
# File 'lib/User.rb', line 85

def create(password: @password, active: @active, extra: @extra)
  body = {
    "user": @name,
    "passwd": password,
    "extra": extra,
    "active": active
  }
  result = @server.request("POST", "_api/user", body: body)
  return_element(result)
end

#databaseAccess(database:) ⇒ Object



180
181
182
183
184
185
# File 'lib/User.rb', line 180

def databaseAccess(database:)
  satisfy_class?(database, [Arango::Database, String])
  database = database.name if database.is_a?(Arango::Database)
  result = @server.request("GET", "_api/user/#{@name}/database/#{database}")
  return return_directly?(result) ? result : result[:result]
end

#destroyObject



123
124
125
126
# File 'lib/User.rb', line 123

def destroy
  result = @server.request("DELETE", "_api/user/#{@name}")
  return return_directly?(result) ? result : true
end

#grant(database:) ⇒ Object



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

def grant(database:)
  addDatabaseAccess(grant: "rw", database: database)
end

#listAccess(full: nil) ⇒ Object Also known as: databases



173
174
175
176
177
# File 'lib/User.rb', line 173

def listAccess(full: nil)
  query = {"full": full}
  result = @server.request("GET", "_api/user/#{@name}/database", query: query)
  return return_directly?(result) ? result : result[:result]
end

#replace(password: @password, active: @active, extra: @extra) ⇒ Object



101
102
103
104
105
106
107
108
109
110
# File 'lib/User.rb', line 101

def replace(password: @password, active: @active, extra: @extra)
  body = {
    "passwd": password,
    "active": active,
    "extra": extra
  }
  result = @server.request("PUT", "_api/user/#{@name}", body: body)
  @password = password
  return_element(result)
end

#retrieveObject



96
97
98
99
# File 'lib/User.rb', line 96

def retrieve
  result = @server.request("GET", "_api/user/#{@name}", body: body)
  return_element(result)
end

#revokeCollectionAccess(database:, collection:) ⇒ Object



164
165
166
167
168
169
170
171
# File 'lib/User.rb', line 164

def revokeCollectionAccess(database:, collection:)
  satisfy_class?(database, [Arango::Database, String])
  satisfy_class?(collection, [Arango::Collection, String])
  database = database.name     if database.is_a?(Arango::Database)
  collection = collection.name if collection.is_a?(Arango::Collection)
  result = @server.request("DELETE", "_api/user/#{@name}/database/#{database}/#{collection}")
  return return_directly?(result) ? result : true
end

#revokeDatabaseAccess(database:) ⇒ Object Also known as: revoke



156
157
158
159
160
161
# File 'lib/User.rb', line 156

def revokeDatabaseAccess(database:)
  satisfy_class?(database, [Arango::Database, String])
  database = database.name if database.is_a?(Arango::Database)
  result = @server.request("DELETE", "_api/user/#{@name}/database/#{database}")
  return return_directly?(result) ? result : true
end

#to_hObject

TO HASH ===



64
65
66
67
68
69
70
71
72
# File 'lib/User.rb', line 64

def to_h
  {
    "user": @name,
    "extra": @extra,
    "active": @active,
    "cache_name": @cache_name,
    "server": @server.base_uri
  }.delete_if{|k,v| v.nil?}
end

#update(password: @password, active: @active, extra: @extra) ⇒ Object



112
113
114
115
116
117
118
119
120
121
# File 'lib/User.rb', line 112

def update(password: @password, active: @active, extra: @extra)
  body = {
    "passwd": password,
    "active": active,
    "extra": extra
  }
  result = @server.request("PATCH", "_api/user/#{@name}", body: body)
  @password = password
  return_element(result)
end