Class: Arango::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/arango/request.rb

Overview

Arango Request Implements REST API to Arango Used to define accessor classes to run execute Strictly internal. Not user accessible. Used to implement REST API representation classes.

Direct Known Subclasses

Arango::Requests::AQL::ClearQueryResultCache, Arango::Requests::AQL::CreateFunction, Arango::Requests::AQL::CurrentQueries, Arango::Requests::AQL::DeleteFunction, Arango::Requests::AQL::DeleteSlowQueryList, Arango::Requests::AQL::Explain, Arango::Requests::AQL::GetQueryResultCacheProperties, Arango::Requests::AQL::GetQueryTrackingProperties, Arango::Requests::AQL::GetSlowQueryList, Arango::Requests::AQL::KillQuery, Arango::Requests::AQL::ListFunctions, Arango::Requests::AQL::Parse, Arango::Requests::AQL::QueryResultCacheEntries, Arango::Requests::AQL::SetQueryResultCacheProperties, Arango::Requests::AQL::SetQueryTrackingProperties, Arango::Requests::Administration::Availability, Arango::Requests::Administration::ClusterEndpoints, Arango::Requests::Administration::CreateTask, Arango::Requests::Administration::CreateTaskId, Arango::Requests::Administration::DeleteTasks, Arango::Requests::Administration::Echo, Arango::Requests::Administration::Endpoints, Arango::Requests::Administration::Engine, Arango::Requests::Administration::Execute, Arango::Requests::Administration::GetLogLevel, Arango::Requests::Administration::GetMode, Arango::Requests::Administration::GetTask, Arango::Requests::Administration::ListTasks, Arango::Requests::Administration::Log, Arango::Requests::Administration::Metrics, Arango::Requests::Administration::ReloadRouting, Arango::Requests::Administration::Role, Arango::Requests::Administration::ServerId, Arango::Requests::Administration::SetLogLevel, Arango::Requests::Administration::SetMode, Arango::Requests::Administration::Statistics, Arango::Requests::Administration::StatisticsDescription, Arango::Requests::Administration::Status, Arango::Requests::Administration::TargetVersion, Arango::Requests::Administration::Time, Arango::Requests::Administration::Version, Arango::Requests::Analyzer::Create, Arango::Requests::Analyzer::Delete, Arango::Requests::Analyzer::List, Arango::Requests::Backup::Create, Arango::Requests::Backup::Delete, Arango::Requests::Backup::Download, Arango::Requests::Backup::List, Arango::Requests::Backup::Restore, Arango::Requests::Backup::Upload, Arango::Requests::Bulk::Execute, Arango::Requests::Bulk::Export, Arango::Requests::Bulk::ImportDocument, Arango::Requests::Bulk::ImportJson, Arango::Requests::Cluster::Health, Arango::Requests::Cluster::Maintenance, Arango::Requests::Cluster::Statistics, Arango::Requests::Collection::Checksum, Arango::Requests::Collection::Count, Arango::Requests::Collection::Create, Arango::Requests::Collection::Delete, Arango::Requests::Collection::Get, Arango::Requests::Collection::GetProperties, Arango::Requests::Collection::ListAll, Arango::Requests::Collection::Load, Arango::Requests::Collection::LoadIndexesIntoMemory, Arango::Requests::Collection::RecalculateCount, Arango::Requests::Collection::Rename, Arango::Requests::Collection::ResponsibleShard, Arango::Requests::Collection::Revision, Arango::Requests::Collection::RotateJournal, Arango::Requests::Collection::SetProperties, Arango::Requests::Collection::Shards, Arango::Requests::Collection::Statistics, Arango::Requests::Collection::Truncate, Arango::Requests::Cursor::Create, Arango::Requests::Cursor::Delete, Arango::Requests::Cursor::NextBatch, Arango::Requests::Database::Create, Arango::Requests::Database::Delete, Arango::Requests::Database::GetInformation, Arango::Requests::Database::ListAccessible, Arango::Requests::Database::ListAll, Arango::Requests::Document::Create, Arango::Requests::Document::CreateMultiple, Arango::Requests::Document::Delete, Arango::Requests::Document::DeleteMultiple, Arango::Requests::Document::Get, Arango::Requests::Document::GetMultiple, Arango::Requests::Document::Head, Arango::Requests::Document::Replace, Arango::Requests::Document::ReplaceMultiple, Arango::Requests::Document::Update, Arango::Requests::Document::UpdateMultiple, Arango::Requests::Foxx::Commit, Arango::Requests::Foxx::Description, Arango::Requests::Foxx::DisableDevelopmentMode, Arango::Requests::Foxx::DownloadBundle, Arango::Requests::Foxx::EnableDevelopmentMode, Arango::Requests::Foxx::GetConfiguration, Arango::Requests::Foxx::GetDependencies, Arango::Requests::Foxx::Install, Arango::Requests::Foxx::ListAll, Arango::Requests::Foxx::ListScripts, Arango::Requests::Foxx::Readme, Arango::Requests::Foxx::Replace, Arango::Requests::Foxx::ReplaceConfiguration, Arango::Requests::Foxx::ReplaceDependencies, Arango::Requests::Foxx::RunScript, Arango::Requests::Foxx::RunTests, Arango::Requests::Foxx::Swagger, Arango::Requests::Foxx::Uninstall, Arango::Requests::Foxx::UpdateConfiguration, Arango::Requests::Foxx::UpdateDependencies, Arango::Requests::Foxx::Upgrade, Arango::Requests::Graph::AddEdgeDefinition, Arango::Requests::Graph::AddVertexCollections, Arango::Requests::Graph::Create, Arango::Requests::Graph::CreateEdge, Arango::Requests::Graph::CreateVertex, Arango::Requests::Graph::Delete, Arango::Requests::Graph::DeleteEdge, Arango::Requests::Graph::DeleteVertex, Arango::Requests::Graph::Get, Arango::Requests::Graph::GetEdge, Arango::Requests::Graph::GetVertex, Arango::Requests::Graph::ListAll, Arango::Requests::Graph::ListEdgeDefinitions, Arango::Requests::Graph::ListVertexCollections, Arango::Requests::Graph::RemoveVertexCollections, Arango::Requests::Graph::ReplaceEdge, Arango::Requests::Graph::ReplaceEdgeDefinition, Arango::Requests::Graph::ReplaceVertex, Arango::Requests::Graph::UpdateEdge, Arango::Requests::Graph::UpdateVertex, Arango::Requests::GraphEdges::Read, Arango::Requests::GraphTraversal::Execute, Arango::Requests::Index::Create, Arango::Requests::Index::Delete, Arango::Requests::Index::Get, Arango::Requests::Index::ListAll, Arango::Requests::Job::Cancel, Arango::Requests::Job::Delete, Arango::Requests::Job::Get, Arango::Requests::Job::List, Arango::Requests::Job::Result, Arango::Requests::Replication::CreateDumpBatch, Arango::Requests::Replication::DeleteDumpBatch, Arango::Requests::Replication::GetApplierConfig, Arango::Requests::Replication::GetApplierState, Arango::Requests::Replication::GetClusterInventory, Arango::Requests::Replication::GetDump, Arango::Requests::Replication::GetInventory, Arango::Requests::Replication::GetLastTick, Arango::Requests::Replication::GetLogFirstTick, Arango::Requests::Replication::GetLogFollow, Arango::Requests::Replication::GetLoggerState, Arango::Requests::Replication::GetLoggerTickRanges, Arango::Requests::Replication::GetServerId, Arango::Requests::Replication::GetTail, Arango::Requests::Replication::GetTickRanges, Arango::Requests::Replication::MakeSlave, Arango::Requests::Replication::ProlongDumpBatch, Arango::Requests::Replication::SetApplierConfig, Arango::Requests::Replication::StartApplier, Arango::Requests::Replication::StopApplier, Arango::Requests::Replication::Synchronize, Arango::Requests::Task::All, Arango::Requests::Task::Create, Arango::Requests::Task::CreateWithId, Arango::Requests::Task::Delete, Arango::Requests::Task::Get, Arango::Requests::Transaction::Begin, Arango::Requests::Transaction::Commit, Arango::Requests::Transaction::Delete, Arango::Requests::Transaction::Execute, Arango::Requests::Transaction::ListRunning, Arango::Requests::Transaction::Status, Arango::Requests::User::ClearCollectionAccessLevel, Arango::Requests::User::ClearDatabaseAccessLevel, Arango::Requests::User::Create, Arango::Requests::User::Delete, Arango::Requests::User::Get, Arango::Requests::User::GetCollectionAccessLevel, Arango::Requests::User::GetDatabaseAccessLevel, Arango::Requests::User::List, Arango::Requests::User::ListDatabases, Arango::Requests::User::Replace, Arango::Requests::User::SetCollectionAccessLevel, Arango::Requests::User::SetDatabaseAccessLevel, Arango::Requests::User::Update, Arango::Requests::View::CreateSearchView, Arango::Requests::View::Delete, Arango::Requests::View::Get, Arango::Requests::View::GetProperties, Arango::Requests::View::ListAll, Arango::Requests::View::Rename, Arango::Requests::View::SetSearchViewProperties, Arango::Requests::View::UpdateSearchViewProperties, Arango::Requests::Wal::Flush, Arango::Requests::Wal::GetProperties, Arango::Requests::Wal::SetProperties, Arango::Requests::Wal::Transactions

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(body: nil, params: {}, headers: nil, args: nil, server:) ⇒ Request

create Arango::Request instance



206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/arango/request.rb', line 206

def initialize(body: nil, params: {}, headers: nil, args: nil, server:)
  @server = server
  if args
    @database = args.delete(:db)
    @args = args
  end
  @formatted_headers = validate_and_format_header!(headers) if self.class.has_header?
  @formatted_params = validate_and_format_params!(params) if self.class.has_param?
  @formatted_body = if self.class.body_is_array? || self.class.body_any_key_allowed
                      body
                    elsif self.class.has_body?
                      validate_and_format_body!(body)
                    end
end

Instance Attribute Details

#argsObject (readonly)

Returns the value of attribute args.



185
186
187
# File 'lib/arango/request.rb', line 185

def args
  @args
end

#databaseObject (readonly)

Returns the value of attribute database.



186
187
188
# File 'lib/arango/request.rb', line 186

def database
  @database
end

#formatted_bodyObject (readonly)

Returns the value of attribute formatted_body.



189
190
191
# File 'lib/arango/request.rb', line 189

def formatted_body
  @formatted_body
end

#formatted_headersObject (readonly)

Returns the value of attribute formatted_headers.



187
188
189
# File 'lib/arango/request.rb', line 187

def formatted_headers
  @formatted_headers
end

#formatted_paramsObject (readonly)

Returns the value of attribute formatted_params.



188
189
190
# File 'lib/arango/request.rb', line 188

def formatted_params
  @formatted_params
end

#serverObject (readonly)

Returns the value of attribute server.



190
191
192
# File 'lib/arango/request.rb', line 190

def server
  @server
end

Class Method Details

.body(name, option = nil, &block) ⇒ Object

define body element



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/arango/request.rb', line 39

def body(name, option = nil, &block)
  @has_body = true
  camel_name = name.to_s.camelize(:lower)
  case option
  when :required then body_keys[name] = { camel: camel_name, required: true }
  when :optional then body_keys[name] = { camel: camel_name }
  when nil then body_keys[name] = { camel: camel_name }
  else
    raise Arango::Error.new("Unknown option '#{option}'!")
  end
  if block_given?
    @current_nested_body = Hash.new
    block.call
    body_keys[name][:nested] = @current_nested_body
  end
ensure
  @current_nested_body = nil
end

.body_anyObject

allow any body content



65
66
67
68
# File 'lib/arango/request.rb', line 65

def body_any
  @has_body = true
  @body_any_key_allowed = true
end

.body_any_key_allowedObject

allow any body keys



71
72
73
# File 'lib/arango/request.rb', line 71

def body_any_key_allowed
  @body_any_key_allowed
end

.body_arrayObject

make body an Array



59
60
61
62
# File 'lib/arango/request.rb', line 59

def body_array
  body_any
  @body_is_array = true
end

.body_is_array?Boolean

check if body is an Array



25
26
27
# File 'lib/arango/request.rb', line 25

def body_is_array?
  @body_is_array
end

.body_keysHash

get body keys sets @body_keys to empty Hash (if unset)



32
33
34
# File 'lib/arango/request.rb', line 32

def body_keys
  @body_keys ||= Hash.new
end

.code(number, message) ⇒ Object

define known http code and its meaning



180
181
182
# File 'lib/arango/request.rb', line 180

def code(number, message)
  codes[number] = message
end

.codesHash

get known http return codes and their meanings sets codes to empty hash if undefined



173
174
175
# File 'lib/arango/request.rb', line 173

def codes
  @codes ||= {}
end

.execute(**args) ⇒ Arango::Result

execute Arango::Request



13
14
15
# File 'lib/arango/request.rb', line 13

def execute(**args)
  self.new(**args).execute
end

.has_body?Boolean

check if body exists



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

def has_body?
  @has_body
end

.has_header?Boolean

if request has a header defined



93
94
95
# File 'lib/arango/request.rb', line 93

def has_header?
  @has_header
end

.has_param?Boolean

parameters defined ?



121
122
123
# File 'lib/arango/request.rb', line 121

def has_param?
  @has_param
end

.header(name, option = nil) ⇒ Object

define header element



107
108
109
110
111
112
113
114
115
116
117
# File 'lib/arango/request.rb', line 107

def header(name, option = nil)
  @has_header = true
  key = name.underscore.downcase.to_sym
  case option
  when :required then headers[key] = { real: name, required: true }
  when :optional then headers[key] = { real: name }
  when nil then headers[key] = { real: name }
  else
    raise Arango::Error.new("Unknown option #{option}")
  end
end

.headersHash

get defined headers sets headers to empty Hash if undefined



100
101
102
# File 'lib/arango/request.rb', line 100

def headers
  @headers ||= Hash.new
end

.key(name, option = nil) ⇒ Object

define body key

Raises:



78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/arango/request.rb', line 78

def key(name, option = nil)
  raise Arango::Error.new("No body context!") unless @current_nested_body
  camel_name = name.to_s.camelize(:lower)
  value = case option
          when :required then { camel: camel_name, required: true }
          when :optional then { camel: camel_name }
          when nil then { camel: camel_name }
          else
            raise Arango::Error.new("Unknown option '#{option}'!")
          end
  @current_nested_body[name] = value
end

.param(name, option = nil) ⇒ Object

define parameter element



135
136
137
138
139
140
141
142
143
144
145
# File 'lib/arango/request.rb', line 135

def param(name, option = nil)
  @has_param = true
  camel_name = name.to_s.camelize(:lower)
  case option
  when :required then params[name] = { camel: camel_name, required: true }
  when :optional then params[name] = { camel: camel_name }
  when nil then params[name] = { camel: camel_name }
  else
    raise Arango::Error.new("Unknown option #{option}")
  end
end

.paramsHash

get defined parameters sets parameters to empty Hash if undefined



128
129
130
# File 'lib/arango/request.rb', line 128

def params
  @params ||= Hash.new
end

.reqmObject

get request method



154
155
156
# File 'lib/arango/request.rb', line 154

def reqm
  @request_method
end

.request_method=(name) ⇒ Object

define request method



149
150
151
# File 'lib/arango/request.rb', line 149

def request_method= name
  @request_method = name
end

.uri_templateObject

get uri template



166
167
168
# File 'lib/arango/request.rb', line 166

def uri_template
  @uri_template
end

.uri_template=(template) ⇒ Object

define uri template for API call see rubydoc.info/gems/addressable/Addressable/Template



161
162
163
# File 'lib/arango/request.rb', line 161

def uri_template= template
  @uri_template = Addressable::Template.new(template)
end

Instance Method Details

#executeArango::Result

execute request

Raises:



224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
# File 'lib/arango/request.rb', line 224

def execute
  response, response_code = server.driver_instance.execute_request(self.class.reqm, formatted_uri, formatted_headers, formatted_params, formatted_body)

  if self.class.codes.key?(response_code)
    raise Arango::Error.new(self.class.codes[response_code]) unless self.class.codes[response_code] == :success
  else
    raise Arango::Error.new("Unknown response code #{response_code}")
  end

  begin
    response[:code] = response_code
  rescue TypeError
    # response might be an Array
  end

  result = Arango::Result.new(response)

  # block ? block.call(result) : result
  result
end

#formatted_uriObject

create expanded URI, (from template, including keys) and http:// prefix



193
194
195
196
197
198
# File 'lib/arango/request.rb', line 193

def formatted_uri
  hash = {}
  hash['db_context'] = ['_db', database] if database
  hash.merge!(args.transform_keys(&:to_s)) if args
  server.driver_instance.base_uri + self.class.uri_template.expand(hash)
end