SaiChaitanya's picture
Upload 149 files
a431caa verified
require 'net/https'
require 'uri'
require 'cgi'
require 'json'
class OnetWebService
def initialize(username, password)
@username = username
@password = password
@headers = { 'Accept' => 'application/json',
'User-Agent' => 'ruby-OnetWebService/1.00 (bot)' }
self.set_version
end
def set_version(version = nil)
@url_root =
if version.nil?
'https://services.onetcenter.org/ws/'
else
"https://services.onetcenter.org/v#{version}/ws/"
end
end
def call(path, query = {})
url = @url_root + path + '?'
query.each do |key, value|
Array(value).each do |v|
url += CGI::escape(key.to_s) + '=' + CGI::escape(v.to_s) + '&'
end
end
url.chop!
uri = URI.parse(url)
request = Net::HTTP::Get.new(uri.request_uri)
@headers.each { |k, v| request[k] = v }
request.basic_auth(@username, @password)
response = nil
begin
Net::HTTP.start(uri.host, uri.port,
:use_ssl => true,
:open_timeout => 10,
:read_timeout => 10,
:ssl_timeout => 10) do |http|
response = http.request(request)
end
rescue StandardError => e
return { 'error' => "Call to #{url} failed with reason: #{e.inspect}" }
end
result = nil
case response
when Net::HTTPOK, Net::HTTPUnprocessableEntity
result = JSON.parse(response.body)
else
if !response.code.nil?
result = { 'error' => "Call to #{url} failed with error code #{response.code}" }
else
result = { 'error' => "Call to #{url} failed with unknown reason" }
end
end
result
end
end