class BingTranslator::ApiClient
Constants
- API_HOST
- COGNITIVE_ACCESS_TOKEN_URI
Public Class Methods
new(subscription_key, skip_ssl_verify, read_timeout = 60, open_timeout = 60)
click to toggle source
# File lib/bing_translator.rb, line 22 def initialize(subscription_key, skip_ssl_verify, read_timeout = 60, open_timeout = 60) @subscription_key = subscription_key @skip_ssl_verify = skip_ssl_verify @read_timeout = read_timeout @open_timeout = open_timeout end
Public Instance Methods
get(path, params: {}, headers: {}, authorization: false)
click to toggle source
# File lib/bing_translator.rb, line 29 def get(path, params: {}, headers: {}, authorization: false) uri = request_uri(path, params) request = Net::HTTP::Get.new(uri.request_uri, default_headers(authorization).merge(headers)) json_response(uri, request) end
post(path, params: {}, headers: {}, data: {}, authorization: true)
click to toggle source
# File lib/bing_translator.rb, line 36 def post(path, params: {}, headers: {}, data: {}, authorization: true) uri = request_uri(path, params) request = Net::HTTP::Post.new(uri.request_uri, default_headers(authorization).merge(headers)) request.body = data json_response(uri, request) end
Private Instance Methods
access_token()
click to toggle source
# File lib/bing_translator.rb, line 78 def access_token if @access_token.nil? || Time.now >= @access_token_expiration_time @access_token = request_new_access_token end @access_token end
default_headers(authorization = true)
click to toggle source
# File lib/bing_translator.rb, line 47 def default_headers(authorization = true) headers = { 'Content-Type' => 'application/json' } headers['Authorization'] = "Bearer #{access_token}" if authorization headers end
http_client(uri)
click to toggle source
# File lib/bing_translator.rb, line 62 def http_client(uri) http = Net::HTTP.new(uri.host, 443) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @skip_ssl_verify http.read_timeout = @read_timeout http.open_timeout = @open_timeout http end
json_response(uri, request)
click to toggle source
# File lib/bing_translator.rb, line 53 def json_response(uri, request) http = http_client(uri) response = http.request(request) raise ApiException.new("Unsuccessful API call: Code: #{response.code}") unless response.code == '200' JSON.parse(response.body) end
request_new_access_token()
click to toggle source
# File lib/bing_translator.rb, line 85 def request_new_access_token headers = { 'Ocp-Apim-Subscription-Key' => @subscription_key } http = Net::HTTP.new(COGNITIVE_ACCESS_TOKEN_URI.host, COGNITIVE_ACCESS_TOKEN_URI.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @skip_ssl_verify response = http.post(COGNITIVE_ACCESS_TOKEN_URI.path, '', headers) case response when Net::HTTPSuccess @access_token_expiration_time = Time.now + 480 response.body when Net::HTTPServerError raise UnavailableException.new("#{response.code}: Credentials server unavailable") else raise AuthenticationException.new("Unsuccessful Access Token call: Code: #{response.code} (Invalid credentials?)") end end
request_uri(path, params)
click to toggle source
# File lib/bing_translator.rb, line 71 def request_uri(path, params) encoded_params = URI.encode_www_form(params.merge('api-version' => '3.0')) uri = URI.parse("#{API_HOST}#{path}") uri.query = encoded_params uri end