Class: WebTranslateIt::Term

Inherits:
Object
  • Object
show all
Defined in:
lib/web_translate_it/term.rb

Overview

rubocop:todo Metrics/ClassLength

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ Term

Initialize a new WebTranslateIt::Term

Implementation Example:

WebTranslateIt::Term.new({ :text => "Term Name" })

to instantiate a new Term.

translation_es = WebTranslateIt::TermTranslation.new({ :locale => "es", :text => "Hola" })
translation_fr = WebTranslateIt::TermTranslation.new({ :locale => "fr", :text => "Bonjour" })
WebTranslateIt::Term.new({ "text" => "Hello", "translations" => [translation_es, translation_fr]})

to instantiate a new Term with a Term Translations in Spanish and French.



23
24
25
26
27
28
29
30
31
32
# File 'lib/web_translate_it/term.rb', line 23

def initialize(params = {})
  params.stringify_keys!
  self.id           = params['id'] || nil
  self.text         = params['text'] || nil
  self.description  = params['description'] || nil
  self.created_at   = params['created_at'] || nil
  self.updated_at   = params['updated_at'] || nil
  self.translations = params['translations'] || []
  self.new_record   = true
end

Instance Attribute Details

#created_atObject

Returns the value of attribute created_at.



7
8
9
# File 'lib/web_translate_it/term.rb', line 7

def created_at
  @created_at
end

#descriptionObject

Returns the value of attribute description.



7
8
9
# File 'lib/web_translate_it/term.rb', line 7

def description
  @description
end

#idObject

Returns the value of attribute id.



7
8
9
# File 'lib/web_translate_it/term.rb', line 7

def id
  @id
end

#new_recordObject

Returns the value of attribute new_record.



7
8
9
# File 'lib/web_translate_it/term.rb', line 7

def new_record
  @new_record
end

#textObject

Returns the value of attribute text.



7
8
9
# File 'lib/web_translate_it/term.rb', line 7

def text
  @text
end

#translationsObject

Returns the value of attribute translations.



7
8
9
# File 'lib/web_translate_it/term.rb', line 7

def translations
  @translations
end

#updated_atObject

Returns the value of attribute updated_at.



7
8
9
# File 'lib/web_translate_it/term.rb', line 7

def updated_at
  @updated_at
end

Class Method Details

.find(term_id) ⇒ Object

Find a Term based on its ID Returns a Term object or nil if not found.

Implementation Example:

WebTranslateIt::Connection.new('secret_api_token') do
  term = WebTranslateIt::Term.find(1234)
end

puts term.inspect #=> A Term object

to find and instantiate the Term which ID is ‘1234`.



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/web_translate_it/term.rb', line 97

def self.find(term_id) # rubocop:todo Metrics/MethodLength, Metrics/AbcSize
  success = true
  tries ||= 3
  request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/terms/#{term_id}")
  WebTranslateIt::Util.add_fields(request)
  begin
    response = Connection.http_connection.request(request)
    return nil if response.code.to_i == 404

    term = WebTranslateIt::Term.new(JSON.parse(response.body))
    term.new_record = false
    return term
  rescue Timeout::Error
    puts 'Request timeout. Will retry in 5 seconds.'
    if (tries -= 1).positive?
      sleep(5)
      retry
    else
      success = false
    end
  end
  success
end

.find_all(params = {}) ⇒ Object

Fetch all terms

Implementation Example:

 WebTranslateIt::Connection.new('secret_api_token') do
   terms = WebTranslateIt::Term.find_all
 end

puts terms.inspect #=> An array of WebTranslateIt::Term objects


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/web_translate_it/term.rb', line 44

def self.find_all(params = {}) # rubocop:todo Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
  success = true
  tries ||= 3
  params.stringify_keys!
  url = "/api/projects/#{Connection.api_key}/terms"
  url += "?#{HashUtil.to_params(params)}" unless params.empty?

  request = Net::HTTP::Get.new(url)
  WebTranslateIt::Util.add_fields(request)
  begin
    terms = []
    while request
      response = Connection.http_connection.request(request)
      JSON.parse(response.body).each do |term_response|
        term = WebTranslateIt::Term.new(term_response)
        term.new_record = false
        terms.push(term)
      end
      if response['Link']&.include?('rel="next"')
        url = response['Link'].match(/<(.*)>; rel="next"/)[1]
        request = Net::HTTP::Get.new(url)
        WebTranslateIt::Util.add_fields(request)
      else
        request = nil
      end
    end
    return terms
  rescue Timeout::Error
    puts 'Request timeout. Will retry in 5 seconds.'
    if (tries -= 1).positive?
      sleep(5)
      retry
    else
      success = false
    end
  end
  success
end

Instance Method Details

#deleteObject

Delete a Term on WebTranslateIt.com

Implementation Example:

WebTranslateIt::Connection.new('secret_api_token') do
  term = WebTranslateIt::Term.find(1234)
  term.delete
end


146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/web_translate_it/term.rb', line 146

def delete # rubocop:todo Metrics/MethodLength
  success = true
  tries ||= 3
  request = Net::HTTP::Delete.new("/api/projects/#{Connection.api_key}/terms/#{id}")
  WebTranslateIt::Util.add_fields(request)
  begin
    Util.handle_response(Connection.http_connection.request(request), true, true)
  rescue Timeout::Error
    puts 'Request timeout. Will retry in 5 seconds.'
    if (tries -= 1).positive?
      sleep(5)
      retry
    else
      success = false
    end
  end
  success
end

#saveObject

Update or create a Term to WebTranslateIt.com

Implementation Example:

WebTranslateIt::Connection.new('secret_api_token') do
  term = WebTranslateIt::Term.find(1234)
  term.text = "Hello"
  term.save
end


132
133
134
# File 'lib/web_translate_it/term.rb', line 132

def save
  new_record ? create : update
end

#translation_for(locale) ⇒ Object

Gets a Translation for a Term

Implementation Example:

WebTranslateIt::Connection.new('secret_api_token') do
  term = WebTranslateIt::Term.find(1234)
  puts term.translation_for("fr") #=> A TermTranslation object
end


175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# File 'lib/web_translate_it/term.rb', line 175

def translation_for(locale) # rubocop:todo Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
  success = true
  tries ||= 3
  translation = translations.detect { |t| t.locale == locale }
  return translation if translation
  return nil if new_record

  request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/terms/#{id}/locales/#{locale}/translations")
  WebTranslateIt::Util.add_fields(request)
  begin
    response = Util.handle_response(Connection.http_connection.request(request), true, true)
    array = JSON.parse(response)
    return nil if array.empty?

    translations = []
    array.each do |trans|
      term_translation = WebTranslateIt::TermTranslation.new(trans)
      translations.push(term_translation)
    end
    return translations
  rescue Timeout::Error
    puts 'Request timeout. Will retry in 5 seconds.'
    if (tries -= 1).positive?
      sleep(5)
      retry
    else
      success = false
    end
  end
  success
end