class Wovnrb::ApiTranslator
Public Class Methods
new(store, headers)
click to toggle source
# File lib/wovnrb/api_translator.rb, line 8 def initialize(store, headers) @store = store @headers = headers end
Public Instance Methods
translate(body)
click to toggle source
# File lib/wovnrb/api_translator.rb, line 13 def translate(body) connection = prepare_connection request = prepare_request(body) begin response = connection.request(request) rescue => e WovnLogger.error("\"#{e.message}\" error occurred when contacting WOVNio translation API") return body end case response when Net::HTTPSuccess if response.header['Content-Encoding'] == 'gzip' response_body = Zlib::GzipReader.new(StringIO.new(response.body)).read JSON.parse(response_body)['body'] || body elsif @store.dev_mode? JSON.parse(response.body)['body'] || body else WovnLogger.error("Received invalid content (\"#{response.header['Content-Encoding']}\") from WOVNio translation API.") body end else WovnLogger.error("Received \"#{response.message}\" from WOVNio translation API.") body end end
Private Instance Methods
api_timeout()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 115 def api_timeout @store.settings['api_timeout_seconds'] end
api_uri()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 111 def api_uri Addressable::URI.parse("#{@store.settings['api_url']}/v0/") end
compress_request_data(data_hash)
click to toggle source
# File lib/wovnrb/api_translator.rb, line 101 def compress_request_data(data_hash) encoded_data_components = data_hash.map do |key, value| "#{key}=#{CGI.escape(value)}" end gzip = Zlib::GzipWriter.new(StringIO.new) gzip << encoded_data_components.join('&') gzip.close.string end
custom_lang_aliases()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 139 def custom_lang_aliases @store.settings['custom_lang_aliases'] end
generate_cache_key(body)
click to toggle source
# File lib/wovnrb/api_translator.rb, line 71 def generate_cache_key(body) cache_key_components = { 'token' => token, 'settings_hash' => settings_hash, 'body_hash' => Digest::MD5.hexdigest(body), 'path' => page_pathname, 'lang' => lang_code, 'version' => "wovnrb_#{VERSION}" }.map { |k, v| "#{k}=#{v}" }.join('&') CGI.escape("(#{cache_key_components})") end
generate_request_data(body)
click to toggle source
# File lib/wovnrb/api_translator.rb, line 84 def generate_request_data(body) data = { 'url' => page_url, 'token' => token, 'lang_code' => lang_code, 'url_pattern' => url_pattern, 'lang_param_name' => lang_param_name, 'product' => 'WOVN.rb', 'version' => VERSION, 'body' => body } data['custom_lang_aliases'] = JSON.dump(custom_lang_aliases) unless custom_lang_aliases.empty? data end
generate_request_path(body)
click to toggle source
# File lib/wovnrb/api_translator.rb, line 67 def generate_request_path(body) "#{api_uri.path.sub(/\/$/, '')}/translation?cache_key=#{generate_cache_key(body)}" end
lang_code()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 127 def lang_code @headers.lang_code end
lang_param_name()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 135 def lang_param_name @store.settings['lang_param_name'] end
page_pathname()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 147 def page_pathname @headers.pathname_with_trailing_slash_if_present end
page_url()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 143 def page_url "#{@headers.protocol}://#{@headers.url}" end
prepare_connection()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 44 def prepare_connection connection = Net::HTTP.new(api_uri.host, api_uri.port) connection.open_timeout = api_timeout connection.read_timeout = api_timeout connection end
prepare_request(body)
click to toggle source
# File lib/wovnrb/api_translator.rb, line 53 def prepare_request(body) data = compress_request_data(generate_request_data(body)) headers = { 'Accept-Encoding' => 'gzip', 'Content-Type' => 'application/octet-stream', 'Content-Length' => data.bytesize.to_s } request = Net::HTTP::Post.new(generate_request_path(body), headers) request.body = data request end
settings_hash()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 119 def settings_hash Digest::MD5.hexdigest(JSON.dump(@store.settings)) end
token()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 123 def token @store.settings['project_token'] end
url_pattern()
click to toggle source
# File lib/wovnrb/api_translator.rb, line 131 def url_pattern @store.settings['url_pattern'] end