class Arango::Request
Attributes
async[RW]
base_uri[RW]
options[RW]
return_output[RW]
verbose[RW]
Public Class Methods
new(return_output:, base_uri:, options:, verbose:, async:)
click to toggle source
# File lib/Request.rb, line 3 def initialize(return_output:, base_uri:, options:, verbose:, async:) @return_output = return_output @base_uri = base_uri @options = options @verbose = verbose @async = async end
Public Instance Methods
download(url:, path:, body: {}, headers: {}, query: {})
click to toggle source
# File lib/Request.rb, line 126 def download(url:, path:, body: {}, headers: {}, query: {}) send_url = "#{@base_uri}/" send_url += url body.delete_if{|k,v| v.nil?} query.delete_if{|k,v| v.nil?} headers.delete_if{|k,v| v.nil?} body = Oj.dump(body, mode: :json) options = @options.merge({body: body, query: query, headers: headers, stream_body: true}) puts "\n#{action} #{send_url}\n" if @verbose File.open(path, "w") do |file| file.binmode HTTParty.post(send_url, options) do |fragment| file.write(fragment) end end end
request(action, url, body: {}, headers: {}, query: {}, key: nil, return_direct_result: @return_output, skip_to_json: false, keepNull: false, skip_parsing: false)
click to toggle source
# File lib/Request.rb, line 13 def request(action, url, body: {}, headers: {}, query: {}, key: nil, return_direct_result: @return_output, skip_to_json: false, keepNull: false, skip_parsing: false) send_url = "#{@base_uri}/" send_url += url if body.is_a?(Hash) body.delete_if{|k,v| v.nil?} unless keepNull end query.delete_if{|k,v| v.nil?} headers.delete_if{|k,v| v.nil?} options = @options.merge({body: body, query: query}) options[:headers].merge!(headers) if ["GET", "HEAD", "DELETE"].include?(action) options.delete(:body) end if @verbose puts "\n===REQUEST===" puts "#{action} #{send_url}\n" puts JSON.pretty_generate(options) puts "===============" end if !skip_to_json && !options[:body].nil? options[:body] = Oj.dump(options[:body], mode: :json) end options.delete_if{|k,v| v.empty?} begin response = case action when "GET" HTTParty.get(send_url, options) when "HEAD" HTTParty.head(send_url, options) when "PATCH" HTTParty.patch(send_url, options) when "POST" HTTParty.post(send_url, options) when "PUT" HTTParty.put(send_url, options) when "DELETE" HTTParty.delete(send_url, options) end rescue Exception => e raise Arango::Error.new err: :impossible_to_connect_with_database, data: {"error": e.message} end if @verbose puts "\n===RESPONSE===" puts "CODE: #{response.code}" end case @async when :store val = response.headers["x-arango-async-id"] if @verbose puts val puts "===============" end return val when true puts "===============" if @verbose return true end if skip_parsing val = response.parsed_response if @verbose puts val puts "===============" end return val end begin result = Oj.load(response.parsed_response, mode: :json, symbol_keys: true) rescue Exception => e raise Arango::Error.new err: :impossible_to_parse_arangodb_response, data: {"response": response.parsed_response, "action": action, "url": send_url, "request": JSON.pretty_generate(options)} end if @verbose case result when Hash, Array puts JSON.pretty_generate(result) else puts "#{result}\n" end puts "===============" end case result when Hash if result[:error] raise Arango::ErrorDB.new message: result[:errorMessage], code: result[:code], data: result, errorNum: result[:errorNum], action: action, url: send_url, request: options elsif return_direct_result return result end when Array, NilClass return result else raise Arango::Error.new message: "ArangoRB didn't return a valid result", data: {"response": response, "action": action, "url": send_url, "request": JSON.pretty_generate(options)} end return key.nil? ? result.delete_if{|k,v| k == :error || k == :code} : result[key] end