class BusinessCentral::Object::Request
Public Class Methods
convert(request = {})
click to toggle source
# File lib/business_central/object/request.rb, line 23 def convert(request = {}) result = {} request.each do |key, value| result[key.to_s.to_camel_case] = value if key.is_a? Symbol result[key.to_s] = value if key.is_a? String end result.to_json end
delete(client, url, etag)
click to toggle source
# File lib/business_central/object/request.rb, line 19 def delete(client, url, etag) request(:delete, client, url, etag: etag) end
get(client, url)
click to toggle source
# File lib/business_central/object/request.rb, line 7 def get(client, url) request(:get, client, url) end
patch(client, url, etag, params)
click to toggle source
# File lib/business_central/object/request.rb, line 15 def patch(client, url, etag, params) request(:patch, client, url, etag: etag, params: params) end
post(client, url, params)
click to toggle source
# File lib/business_central/object/request.rb, line 11 def post(client, url, params) request(:post, client, url, params: params) end
request(method, client, url, etag: '', params: {}) { |request| ... }
click to toggle source
# File lib/business_central/object/request.rb, line 33 def request(method, client, url, etag: '', params: {}) send do uri = URI(url) https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true https.set_debug_output($stdout) if client.debug request = Object.const_get("Net::HTTP::#{method.to_s.capitalize}").new(uri) request['If-Match'] = etag if !etag.blank? request['Accept'] = 'application/json' if block_given? yield(request) else request['Content-Type'] = 'application/json' request.body = convert(params) if %i[post patch].include?(method) end if client.access_token request['Authorization'] = "Bearer #{client.access_token.token}" else request.basic_auth(client.username, client.password) end https.request(request) end end
Also aliased as: call
Private Class Methods
send() { || ... }
click to toggle source
# File lib/business_central/object/request.rb, line 61 def send request = yield response = Response.new(request.read_body.to_s).results if Response.success?(request.code.to_i) response elsif Response.success_no_content?(request.code.to_i) true else if Response.unauthorized?(request.code.to_i) raise UnauthorizedException elsif Response.not_found?(request.code.to_i) raise NotFoundException else if !response.fetch(:error, nil).nil? case response[:error][:code] when 'Internal_CompanyNotFound' raise CompanyNotFoundException else raise ApiException, "#{request.code} - #{response[:error][:code]} #{response[:error][:message]}" end else raise ApiException, "#{request.code} - API call failed" end end end end