class RESTClient

Public Class Methods

new(service_account, bundle_id, locale = "") click to toggle source
# File lib/rest_client.rb, line 55
def initialize(service_account, bundle_id, locale = "")
        @bundles = []
        @languages = {}
        @resource_data = {}
        @service_account = service_account
        @bundle_id = bundle_id
        
        get_resource_strings(locale)
end

Public Instance Methods

get_bundle_id() click to toggle source
# File lib/rest_client.rb, line 137
def get_bundle_id
        @bundle_id
end
get_bundle_info() click to toggle source

bundle info contains the languages - used get_bundle_info to reflect current API

# File lib/rest_client.rb, line 75
def get_bundle_info
        if @languages.empty?
                url_string = "#{@service_account.get_url_string}/#{@service_account.get_instance_id}/#{URL_PATH}/#{@bundle_id}"
                puts url_string
                response = make_request(url_string, @service_account)
                source_language = response[BUNDLE_STRING][SOURCE_LANGUAGE_STRING]
                @languages[source_language] = response[BUNDLE_STRING][TARGET_LANGUAGES_STRING]
        end
        @languages
end
get_bundles() click to toggle source
# File lib/rest_client.rb, line 65
def get_bundles
        if @bundles.empty?
                url_string = "#{@service_account.get_url_string}/#{@service_account.get_instance_id}/#{URL_PATH}"
                response = make_request(url_string, service_account)
                @bundles = request[BUNDLE_ID_STRING]
        end
        @bundles
end
get_resource_strings(locale = "") click to toggle source
# File lib/rest_client.rb, line 86
def get_resource_strings(locale = "")
        if @resource_data.empty?
                target_languages = []

                if locale.empty?
                        language_dictionary = get_bundle_info
                        target_languages = get_target_languages.dup
                        target_languages << get_source_language
                else
                        if (!@supportedLangs.include? locale)
                                if (@expectedMatches.has_key? locale)
                                        locale = @expectedMatches[locale]
                                else
                                        raise "Unsupported Locale: #{locale}"
                                end
                        end
                        target_languages << locale
                end

                get_translations(@service_account, target_languages, @bundle_id)
        else
                @resource_data
        end
end
get_service_account() click to toggle source
# File lib/rest_client.rb, line 133
def get_service_account
        @service_account
end
get_source_language() click to toggle source
# File lib/rest_client.rb, line 124
def get_source_language
        @languages.keys[0]
end
get_target_languages() click to toggle source
# File lib/rest_client.rb, line 128
def get_target_languages
        source_language = get_source_language
        @languages[source_language]
end
has_language(language) click to toggle source
# File lib/rest_client.rb, line 111
def has_language(language)
        if language.equal? get_source_language
                return true
        end
        get_target_languages.each do |lang|
                if lang.equal? language
                        return true
                end
        end
        
        return false
end
set_bundle_id(name) click to toggle source
# File lib/rest_client.rb, line 149
def set_bundle_id(name)
        @bundle_id = name
end
set_resource_strings(map) click to toggle source
# File lib/rest_client.rb, line 141
def set_resource_strings (map)
        @resource_data = map
end
set_service_account(sa) click to toggle source
# File lib/rest_client.rb, line 145
def set_service_account(sa)
        @service_account = sa
end

Private Instance Methods

get_translations(service_account, locale_list, project_name) click to toggle source
# File lib/rest_client.rb, line 182
def get_translations(service_account, locale_list, project_name)
        url_string = "#{service_account.get_url_string}/#{service_account.get_instance_id}/#{URL_PATH}/#{project_name}"
        
        locale_list.each do |language|
                target_lang_url = "#{url_string}/#{language}"
                response = make_request(target_lang_url, service_account)
                
                @resource_data[language] = {}

                response[RESOURCE_STRINGS].each do |key, value|
                        I18n.backend.store_translations(language, {key => value}, :escape => false)
                        @resource_data[language][key] = value
                end
        end
end
make_request(url, service_account, basic_auth = false) click to toggle source
# File lib/rest_client.rb, line 155
  def make_request(url, service_account, basic_auth = false)
          uri = URI.parse(url.to_s)
          request = Net::HTTP::Get.new uri.path
          
          if service_account.is_iam_enabled
request["Authorization"] = "API-KEY #{service_account.get_api_key}"
          elsif basic_auth
                  request.basic_auth(service_account.get_user_id, service_account.get_password)
          else
                  hmac = HMAC.new
                  d = hmac.get_rfc1123_date
                  request["Date"] = d
                  request["Authorization"] = hmac.get_auth_credentials(service_account.get_user_id, service_account.get_password, "GET", url,d, "").strip
          end
          
          response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') {|http| 
                  http.request(request)
          }
          json_response = JSON.parse(response.body)

          if json_response["status"] != "SUCCESS"
                  raise "Invalid HTTP Request #{json_response["message"]}"
          end
          
          return json_response
  end