web_translate_it 2.0.0.rc2 → 2.0.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/wti +11 -25
- data/history.md +7 -1
- data/lib/web_translate_it.rb +2 -1
- data/lib/web_translate_it/command_line.rb +31 -41
- data/lib/web_translate_it/configuration.rb +2 -1
- data/lib/web_translate_it/connection.rb +62 -0
- data/lib/web_translate_it/project.rb +14 -18
- data/lib/web_translate_it/string.rb +42 -58
- data/lib/web_translate_it/term.rb +41 -52
- data/lib/web_translate_it/term_translation.rb +14 -22
- data/lib/web_translate_it/translation.rb +9 -12
- data/lib/web_translate_it/util.rb +1 -39
- data/spec/web_translate_it/string_spec.rb +57 -58
- data/spec/web_translate_it/term_spec.rb +53 -54
- data/version +1 -1
- metadata +3 -2
data/bin/wti
CHANGED
@@ -6,32 +6,29 @@ require 'trollop'
|
|
6
6
|
require 'web_translate_it'
|
7
7
|
|
8
8
|
show_commands = <<-EOS
|
9
|
-
A CLI for syncing files with WebTranslateIt.com
|
10
|
-
|
11
9
|
Usage: wti <command> [options]+ <filename>
|
12
10
|
|
13
11
|
The most commonly used wti commands are:
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
init Configure your project to sync
|
12
|
+
pull Pull target language file(s)
|
13
|
+
push Push master language file(s)
|
14
|
+
match Display matching of local files with File Manager
|
15
|
+
add Create and push a new master language file
|
16
|
+
rm Delete a master language file from a project
|
17
|
+
addlocale Add a new locale to the project
|
18
|
+
rmlocale Delete a locale from a project
|
19
|
+
status Fetch and display project statistics
|
20
|
+
init Configure your project to sync
|
24
21
|
|
25
22
|
See `wti <command> --help` for more information on a specific command.
|
26
23
|
|
27
24
|
[options] are:
|
28
25
|
EOS
|
29
26
|
|
30
|
-
SUB_COMMANDS = %w(pull push match add addlocale
|
27
|
+
SUB_COMMANDS = %w(pull push match add addlocale status st init)
|
31
28
|
global_options = Trollop::options do
|
32
29
|
stop_on SUB_COMMANDS
|
33
30
|
banner show_commands
|
34
|
-
version "
|
31
|
+
version "wti version #{WebTranslateIt::Util.version}"
|
35
32
|
end
|
36
33
|
|
37
34
|
command = ARGV.shift # get the subcommand
|
@@ -84,17 +81,6 @@ EOS
|
|
84
81
|
banner "Delete a locale from the project"
|
85
82
|
opt :config, "Path to a translation.yml file", :short => "-c", :default => ".wti"
|
86
83
|
end
|
87
|
-
when "server"
|
88
|
-
Trollop::options do
|
89
|
-
banner <<-EOS
|
90
|
-
Deprecated, used to start a synchronisation server.
|
91
|
-
`gem install web_translate_it_server` and run `wti-server` instead.
|
92
|
-
[options] are:
|
93
|
-
EOS
|
94
|
-
opt :port, "Run server on a specific port", :default => 4000, :short => "-p"
|
95
|
-
opt :host, "Run server on a specific host", :default => "0.0.0.0", :short => "-h"
|
96
|
-
opt :config, "Path to a translation.yml file", :short => "-c", :default => ".wti"
|
97
|
-
end
|
98
84
|
when "status"
|
99
85
|
Trollop::options do
|
100
86
|
banner "Fetch and display project statistics"
|
data/history.md
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
##
|
1
|
+
## Version 2.0.0.rc3 / 2012-04-19
|
2
|
+
|
3
|
+
* Remove deprecated `wti server`.
|
4
|
+
* Reword command help and output.
|
5
|
+
* Rework String, Translation, Term and TermTranslation refactoring. Now using a connection persisted as a class instance. See connection.rb. This makes for a nicer syntax.
|
6
|
+
|
7
|
+
## Version 2.0.0.rc2 / 2012-04-16
|
2
8
|
|
3
9
|
* Backport of compatibility fix for ruby 1.8.7 from 1.x serie.
|
4
10
|
* Fix issue with new version system, which broke the gem. #86
|
data/lib/web_translate_it.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
require 'web_translate_it/connection'
|
3
4
|
require 'web_translate_it/util'
|
4
5
|
require 'web_translate_it/util/array_util'
|
5
6
|
require 'web_translate_it/util/string_util'
|
@@ -21,7 +22,7 @@ module WebTranslateIt
|
|
21
22
|
locale = I18n.locale.to_s
|
22
23
|
return if config.ignore_locales.include?(locale)
|
23
24
|
config.logger.debug { "➔ Fetching #{locale.upcase} language file(s) from Web Translate It…" } if config.logger
|
24
|
-
WebTranslateIt::
|
25
|
+
WebTranslateIt::Connection.new(config.api_key) do |http|
|
25
26
|
config.files.find_all{ |file| file.locale == locale }.each do |file|
|
26
27
|
response = file.fetch(http)
|
27
28
|
config.logger.debug { "➔ Web Translate It response: #{response}" } if config.logger
|
@@ -13,12 +13,10 @@ module WebTranslateIt
|
|
13
13
|
end
|
14
14
|
self.send(command)
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def pull
|
18
18
|
STDOUT.sync = true
|
19
19
|
`#{configuration.before_pull}` if configuration.before_pull
|
20
|
-
puts StringUtil.titleize("Pulling files")
|
21
|
-
|
22
20
|
# Selecting files to pull
|
23
21
|
files = []
|
24
22
|
fetch_locales_to_pull.each do |locale|
|
@@ -28,14 +26,14 @@ module WebTranslateIt
|
|
28
26
|
puts "No files to pull."
|
29
27
|
else
|
30
28
|
# Now actually pulling files
|
29
|
+
puts "# Pulling files"
|
31
30
|
time = Time.now
|
32
31
|
threads = []
|
33
32
|
n_threads = (files.count.to_f/3).ceil >= 20 ? 20 : (files.count.to_f/3).ceil
|
34
|
-
puts "Using up to #{n_threads} threads"
|
35
33
|
ArrayUtil.chunk(files, n_threads).each do |file_array|
|
36
34
|
unless file_array.empty?
|
37
35
|
threads << Thread.new(file_array) do |file_array|
|
38
|
-
WebTranslateIt::
|
36
|
+
WebTranslateIt::Connection.new(configuration.api_key) do |http|
|
39
37
|
file_array.each do |file|
|
40
38
|
file.fetch(http, command_options.force)
|
41
39
|
end
|
@@ -45,7 +43,7 @@ module WebTranslateIt
|
|
45
43
|
end
|
46
44
|
threads.each { |thread| thread.join }
|
47
45
|
time = Time.now - time
|
48
|
-
puts "Pulled #{files.count} files at #{(files.count/time).round} files/sec."
|
46
|
+
puts "Pulled #{files.count} files at #{(files.count/time).round} files/sec, using #{n_threads} threads."
|
49
47
|
`#{configuration.after_pull}` if configuration.after_pull
|
50
48
|
end
|
51
49
|
end
|
@@ -53,8 +51,8 @@ module WebTranslateIt
|
|
53
51
|
def push
|
54
52
|
STDOUT.sync = true
|
55
53
|
`#{configuration.before_push}` if configuration.before_push
|
56
|
-
puts
|
57
|
-
WebTranslateIt::
|
54
|
+
puts "# Pushing files"
|
55
|
+
WebTranslateIt::Connection.new(configuration.api_key) do |http|
|
58
56
|
fetch_locales_to_push(configuration).each do |locale|
|
59
57
|
configuration.files.find_all{ |file| file.locale == locale }.sort{|a,b| a.file_path <=> b.file_path} .each do |file|
|
60
58
|
file.upload(http, command_options[:merge], command_options.ignore_missing, command_options.label, command_options.low_priority, command_options[:minor], command_options.force)
|
@@ -67,11 +65,11 @@ module WebTranslateIt
|
|
67
65
|
def add
|
68
66
|
STDOUT.sync = true
|
69
67
|
if parameters == []
|
70
|
-
puts StringUtil.failure("
|
71
|
-
puts "Usage: wti add master_file_1 master_file_2 ..."
|
68
|
+
puts StringUtil.failure("Error: You must provide the path to the master file to add.")
|
69
|
+
puts "Usage: wti add path/to/master_file_1 path/to/master_file_2 ..."
|
72
70
|
exit
|
73
71
|
end
|
74
|
-
WebTranslateIt::
|
72
|
+
WebTranslateIt::Connection.new(configuration.api_key) do |http|
|
75
73
|
added = configuration.files.find_all{ |file| file.locale == configuration.source_locale}.collect {|file| File.expand_path(file.file_path) }.to_set
|
76
74
|
parameters.reject{ |param| added.include?(File.expand_path(param))}.each do |param|
|
77
75
|
file = TranslationFile.new(nil, param, nil, configuration.api_key)
|
@@ -84,13 +82,13 @@ module WebTranslateIt
|
|
84
82
|
def rm
|
85
83
|
STDOUT.sync = true
|
86
84
|
if parameters == []
|
87
|
-
puts StringUtil.failure("
|
88
|
-
puts "Usage: wti rm master_file_1 master_file_2 ..."
|
85
|
+
puts StringUtil.failure("Error: You must provide the path to the master file to remove.")
|
86
|
+
puts "Usage: wti path/to/rm master_file_1 path/to/master_file_2 ..."
|
89
87
|
exit
|
90
88
|
end
|
91
|
-
WebTranslateIt::
|
89
|
+
WebTranslateIt::Connection.new(configuration.api_key) do |http|
|
92
90
|
parameters.each do |param|
|
93
|
-
if Util.ask_yes_no("Are you
|
91
|
+
if Util.ask_yes_no("Are you sure you want to delete the master file #{param}?\nThis will also delete its target files and translations.", false)
|
94
92
|
configuration.files.find_all{ |file| file.file_path == param }.each do |master_file|
|
95
93
|
master_file.delete(http)
|
96
94
|
# delete files
|
@@ -108,31 +106,35 @@ module WebTranslateIt
|
|
108
106
|
def addlocale
|
109
107
|
STDOUT.sync = true
|
110
108
|
if parameters == []
|
111
|
-
puts StringUtil.failure("
|
112
|
-
puts "Usage: wti addlocale
|
109
|
+
puts StringUtil.failure("Locale code missing.")
|
110
|
+
puts "Usage: wti addlocale fr es ..."
|
113
111
|
exit
|
114
112
|
end
|
115
113
|
parameters.each do |param|
|
116
|
-
print StringUtil.success("Adding locale #{param}... ")
|
117
|
-
|
114
|
+
print StringUtil.success("Adding locale #{param.upcase}... ")
|
115
|
+
WebTranslateIt::Connection.new(configuration.api_key) do
|
116
|
+
puts WebTranslateIt::Project.create_locale(param)
|
117
|
+
end
|
118
|
+
puts "Done."
|
118
119
|
end
|
119
|
-
puts "Done!"
|
120
120
|
end
|
121
121
|
|
122
122
|
def rmlocale
|
123
123
|
STDOUT.sync = true
|
124
124
|
if parameters == []
|
125
|
-
puts StringUtil.failure("
|
126
|
-
puts "Usage: wti rmlocale
|
125
|
+
puts StringUtil.failure("Error: You must provide the locale code to remove.")
|
126
|
+
puts "Usage: wti rmlocale fr es ..."
|
127
127
|
exit
|
128
128
|
end
|
129
129
|
parameters.each do |param|
|
130
|
-
if Util.ask_yes_no("Are you certain you want to delete the locale #{param}
|
131
|
-
print StringUtil.success("Deleting locale #{param}... ")
|
132
|
-
|
130
|
+
if Util.ask_yes_no("Are you certain you want to delete the locale #{param.upcase}?\nThis will also delete its files and translations.", false)
|
131
|
+
print StringUtil.success("Deleting locale #{param.upcase}... ")
|
132
|
+
WebTranslateIt::Connection.new(configuration.api_key) do |http|
|
133
|
+
puts WebTranslateIt::Project.delete_locale(param)
|
134
|
+
end
|
135
|
+
puts "Done."
|
133
136
|
end
|
134
137
|
end
|
135
|
-
puts "Done!"
|
136
138
|
end
|
137
139
|
|
138
140
|
def init
|
@@ -147,12 +149,11 @@ module WebTranslateIt
|
|
147
149
|
end
|
148
150
|
File.open(path, 'w'){ |file| file << generate_configuration(api_key, project_info) }
|
149
151
|
puts ""
|
150
|
-
puts "
|
152
|
+
puts "Your project was successfully setup. You can now use `wti` to push and pull your language files."
|
151
153
|
puts "Check `wti --help` for help."
|
152
154
|
end
|
153
155
|
|
154
156
|
def match
|
155
|
-
puts StringUtil.titleize("Matching local files with File Manager")
|
156
157
|
configuration.files.find_all{ |mf| mf.locale == configuration.source_locale }.each do |master_file|
|
157
158
|
if !File.exists?(master_file.file_path)
|
158
159
|
puts StringUtil.failure(master_file.file_path) + " (#{master_file.locale})"
|
@@ -179,21 +180,10 @@ module WebTranslateIt
|
|
179
180
|
stale = true if values['stale']
|
180
181
|
end
|
181
182
|
if stale
|
182
|
-
self.status if Util.ask_yes_no("Some of these stats are
|
183
|
+
self.status if Util.ask_yes_no("Some of these stats are outdated. Would you like to refresh?", true)
|
183
184
|
end
|
184
185
|
end
|
185
|
-
|
186
|
-
def server
|
187
|
-
puts "This feature is deprecated and was extracted to a separate gem,"
|
188
|
-
puts " `web_translate_it_server`."
|
189
|
-
puts "To use it, run `gem install web_translate_it_server`"
|
190
|
-
puts "and run the server with `wti-server`."
|
191
|
-
end
|
192
|
-
|
193
|
-
def method_missing(m, *args, &block)
|
194
|
-
puts "wti: '#{m}' is not a wti command. See 'wti --help'."
|
195
|
-
end
|
196
|
-
|
186
|
+
|
197
187
|
def fetch_locales_to_pull
|
198
188
|
if command_options.locale
|
199
189
|
locales = command_options.locale.split
|
@@ -10,7 +10,8 @@ module WebTranslateIt
|
|
10
10
|
class Configuration
|
11
11
|
require 'yaml'
|
12
12
|
require 'fileutils'
|
13
|
-
attr_accessor :path, :api_key, :source_locale, :target_locales, :files, :ignore_locales
|
13
|
+
attr_accessor :path, :api_key, :source_locale, :target_locales, :files, :ignore_locales
|
14
|
+
attr_accessor :logger, :before_pull, :after_pull, :before_push, :after_push
|
14
15
|
|
15
16
|
# Load configuration file from the path.
|
16
17
|
def initialize(root_path = Rails.root, path_to_config_file = ".wti")
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module WebTranslateIt
|
3
|
+
class Connection
|
4
|
+
require 'net/http'
|
5
|
+
require 'net/https'
|
6
|
+
require 'uri'
|
7
|
+
require 'ostruct'
|
8
|
+
|
9
|
+
@@api_key = nil
|
10
|
+
@@http_connection = nil
|
11
|
+
|
12
|
+
#
|
13
|
+
# Initialize and yield a HTTPS Keep-Alive connection to WebTranslateIt.com
|
14
|
+
#
|
15
|
+
# Usage:
|
16
|
+
#
|
17
|
+
# WebTranslateIt::Connection.new(api_key) do
|
18
|
+
# # do something with Connection.api_key and Connection.http_connection
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# Or:
|
22
|
+
#
|
23
|
+
# WebTranslateIt::Connection.new(api_key) do |http_connection|
|
24
|
+
# http_connection.request(request)
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
def initialize(api_key)
|
28
|
+
@@api_key = api_key
|
29
|
+
proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new
|
30
|
+
http = Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password).new('webtranslateit.com', 443)
|
31
|
+
http.use_ssl = true
|
32
|
+
http.open_timeout = http.read_timeout = 30
|
33
|
+
begin
|
34
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
35
|
+
if File.exists?('/etc/ssl/certs') # Ubuntu
|
36
|
+
http.ca_path = '/etc/ssl/certs'
|
37
|
+
else
|
38
|
+
http.ca_file = File.expand_path('cacert.pem', __FILE__)
|
39
|
+
end
|
40
|
+
@@http_connection = http.start
|
41
|
+
yield @@http_connection if block_given?
|
42
|
+
rescue OpenSSL::SSL::SSLError
|
43
|
+
puts "Unable to verify SSL certificate."
|
44
|
+
http = Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password).new('webtranslateit.com', 443)
|
45
|
+
http.use_ssl = true
|
46
|
+
http.open_timeout = http.read_timeout = 30
|
47
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
48
|
+
@@http_connection = http.start
|
49
|
+
yield @@http_connection if block_given?
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.http_connection
|
54
|
+
@@http_connection
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.api_key
|
58
|
+
@@api_key
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
@@ -4,7 +4,7 @@ module WebTranslateIt
|
|
4
4
|
|
5
5
|
def self.fetch_info(api_key)
|
6
6
|
begin
|
7
|
-
WebTranslateIt::
|
7
|
+
WebTranslateIt::Connection.new(api_key) do |http|
|
8
8
|
request = Net::HTTP::Get.new("/api/projects/#{api_key}.yaml")
|
9
9
|
request.add_field("X-Client-Name", "web_translate_it")
|
10
10
|
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
@@ -26,11 +26,11 @@ module WebTranslateIt
|
|
26
26
|
|
27
27
|
def self.fetch_stats(api_key)
|
28
28
|
begin
|
29
|
-
WebTranslateIt::
|
29
|
+
WebTranslateIt::Connection.new(api_key) do |http|
|
30
30
|
request = Net::HTTP::Get.new("/api/projects/#{api_key}/stats.yaml")
|
31
31
|
request.add_field("X-Client-Name", "web_translate_it")
|
32
32
|
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
33
|
-
Util.handle_response(http.request(request), true)
|
33
|
+
return Util.handle_response(http.request(request), true)
|
34
34
|
end
|
35
35
|
rescue Timeout::Error
|
36
36
|
puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
|
@@ -39,15 +39,13 @@ module WebTranslateIt
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
def self.create_locale(
|
42
|
+
def self.create_locale(locale_code)
|
43
43
|
begin
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
Util.handle_response(http.request(request), true)
|
50
|
-
end
|
44
|
+
request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/locales")
|
45
|
+
request.add_field("X-Client-Name", "web_translate_it")
|
46
|
+
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
47
|
+
request.set_form_data({ 'id' => locale_code }, ';')
|
48
|
+
Util.handle_response(Connection.http_connection.request(request), true)
|
51
49
|
rescue Timeout::Error
|
52
50
|
puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
|
53
51
|
sleep(5)
|
@@ -55,14 +53,12 @@ module WebTranslateIt
|
|
55
53
|
end
|
56
54
|
end
|
57
55
|
|
58
|
-
def self.delete_locale(
|
56
|
+
def self.delete_locale(locale_code)
|
59
57
|
begin
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
Util.handle_response(http.request(request), true)
|
65
|
-
end
|
58
|
+
request = Net::HTTP::Delete.new("/api/projects/#{Connection.api_key}/locales/#{locale_code}")
|
59
|
+
request.add_field("X-Client-Name", "web_translate_it")
|
60
|
+
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
61
|
+
Util.handle_response(Connection.http_connection.request(request), true)
|
66
62
|
rescue Timeout::Error
|
67
63
|
puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
|
68
64
|
sleep(5)
|
@@ -1,29 +1,26 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module WebTranslateIt
|
3
3
|
class String
|
4
|
-
require 'net/https'
|
5
4
|
require 'json'
|
6
5
|
|
7
|
-
attr_accessor :
|
6
|
+
attr_accessor :id, :key, :plural, :type, :dev_comment, :word_count, :status, :category, :label, :file,
|
8
7
|
:created_at, :updated_at, :translations, :new_record
|
9
8
|
|
10
9
|
# Initialize a new WebTranslateIt::String
|
11
|
-
# The only mandatory parameter is `api_key`
|
12
10
|
#
|
13
11
|
# Implementation Example:
|
14
12
|
#
|
15
|
-
# WebTranslateIt::String.new(
|
13
|
+
# WebTranslateIt::String.new({ "key" => "product_name_123" })
|
16
14
|
#
|
17
15
|
# to instantiate a new String without any text.
|
18
16
|
#
|
19
17
|
# translation_en = WebTranslateIt::Translation.new({ "locale" => "en", "text" => "Hello" })
|
20
18
|
# translation_fr = WebTranslateIt::Translation.new({ "locale" => "fr", "text" => "Bonjour" })
|
21
|
-
# WebTranslateIt::String.new(
|
19
|
+
# WebTranslateIt::String.new({ "key" => "product_name_123", "translations" => [translation_en, translation_fr]})
|
22
20
|
#
|
23
21
|
# to instantiate a new String with a source and target translation.
|
24
22
|
|
25
|
-
def initialize(
|
26
|
-
self.api_key = api_key
|
23
|
+
def initialize(params = {})
|
27
24
|
self.id = params["id"] || nil
|
28
25
|
self.key = params["key"] || nil
|
29
26
|
self.plural = params["plural"] || nil
|
@@ -41,12 +38,11 @@ module WebTranslateIt
|
|
41
38
|
end
|
42
39
|
|
43
40
|
# Find a String based on filters
|
44
|
-
# Needs a HTTPS Connection
|
45
41
|
#
|
46
42
|
# Implementation Example:
|
47
43
|
#
|
48
|
-
# WebTranslateIt::
|
49
|
-
# strings = WebTranslateIt::String.find_all(
|
44
|
+
# WebTranslateIt::Connection.new('secret_api_token') do
|
45
|
+
# strings = WebTranslateIt::String.find_all({ "key" => "product_name_123" })
|
50
46
|
# end
|
51
47
|
#
|
52
48
|
# puts strings.inspect #=> An array of WebTranslateIt::String objects
|
@@ -55,8 +51,8 @@ module WebTranslateIt
|
|
55
51
|
#
|
56
52
|
# TODO: Implement pagination
|
57
53
|
|
58
|
-
def self.find_all(
|
59
|
-
url = "/api/projects/#{api_key}/strings.yaml"
|
54
|
+
def self.find_all(params = {})
|
55
|
+
url = "/api/projects/#{Connection.api_key}/strings.yaml"
|
60
56
|
url += '?' + HashUtil.to_params("filters" => params) unless params.empty?
|
61
57
|
|
62
58
|
request = Net::HTTP::Get.new(url)
|
@@ -64,10 +60,10 @@ module WebTranslateIt
|
|
64
60
|
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
65
61
|
|
66
62
|
begin
|
67
|
-
response = Util.handle_response(http_connection.request(request), true)
|
63
|
+
response = Util.handle_response(Connection.http_connection.request(request), true)
|
68
64
|
strings = []
|
69
65
|
YAML.load(response).each do |string_response|
|
70
|
-
string = WebTranslateIt::String.new(
|
66
|
+
string = WebTranslateIt::String.new(string_response)
|
71
67
|
string.new_record = false
|
72
68
|
strings.push(string)
|
73
69
|
end
|
@@ -80,12 +76,11 @@ module WebTranslateIt
|
|
80
76
|
end
|
81
77
|
|
82
78
|
# Find a String based on its ID
|
83
|
-
# Needs a HTTPS Connection
|
84
79
|
#
|
85
80
|
# Implementation Example:
|
86
81
|
#
|
87
|
-
# WebTranslateIt::
|
88
|
-
# string = WebTranslateIt::String.find(
|
82
|
+
# WebTranslateIt::Connection.new('secret_api_token') do
|
83
|
+
# string = WebTranslateIt::String.find(1234)
|
89
84
|
# end
|
90
85
|
#
|
91
86
|
# puts string.inspect #=> A WebTranslateIt::String object
|
@@ -93,15 +88,15 @@ module WebTranslateIt
|
|
93
88
|
# to find and instantiate the String which ID is `1234`.
|
94
89
|
#
|
95
90
|
|
96
|
-
def self.find(
|
97
|
-
request = Net::HTTP::Get.new("/api/projects/#{api_key}/strings/#{id}.yaml")
|
91
|
+
def self.find(id)
|
92
|
+
request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/strings/#{id}.yaml")
|
98
93
|
request.add_field("X-Client-Name", "web_translate_it")
|
99
94
|
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
100
95
|
|
101
96
|
begin
|
102
|
-
response = http_connection.request(request)
|
97
|
+
response = Connection.http_connection.request(request)
|
103
98
|
return nil if response.code.to_i == 404
|
104
|
-
string = WebTranslateIt::String.new(
|
99
|
+
string = WebTranslateIt::String.new(YAML.load(response.body))
|
105
100
|
string.new_record = false
|
106
101
|
return string
|
107
102
|
rescue Timeout::Error
|
@@ -112,43 +107,37 @@ module WebTranslateIt
|
|
112
107
|
end
|
113
108
|
|
114
109
|
# Update or create a String to WebTranslateIt.com
|
115
|
-
# Needs a HTTPS Connection
|
116
110
|
#
|
117
111
|
# Implementation Example:
|
118
112
|
#
|
119
|
-
# WebTranslateIt::
|
120
|
-
# string = WebTranslateIt::String.find(
|
113
|
+
# WebTranslateIt::Connection.new('secret_api_token') do
|
114
|
+
# string = WebTranslateIt::String.find(1234)
|
121
115
|
# string.status = "status_obsolete"
|
122
|
-
# string.save
|
116
|
+
# string.save
|
123
117
|
# end
|
124
118
|
#
|
125
119
|
|
126
|
-
def save
|
127
|
-
|
128
|
-
self.create(http_connection)
|
129
|
-
else
|
130
|
-
self.update(http_connection)
|
131
|
-
end
|
120
|
+
def save
|
121
|
+
self.new_record ? self.create : self.update
|
132
122
|
end
|
133
123
|
|
134
124
|
# Delete a String on WebTranslateIt.com
|
135
|
-
# Needs a HTTPS Connection
|
136
125
|
#
|
137
126
|
# Implementation Example:
|
138
127
|
#
|
139
|
-
# WebTranslateIt::
|
140
|
-
# string = WebTranslateIt::String.find(
|
141
|
-
# string.delete
|
128
|
+
# WebTranslateIt::Connection.new('secret_api_token') do
|
129
|
+
# string = WebTranslateIt::String.find(1234)
|
130
|
+
# string.delete
|
142
131
|
# end
|
143
132
|
#
|
144
133
|
|
145
|
-
def delete
|
146
|
-
request = Net::HTTP::Delete.new("/api/projects/#{
|
134
|
+
def delete
|
135
|
+
request = Net::HTTP::Delete.new("/api/projects/#{Connection.api_key}/strings/#{self.id}")
|
147
136
|
request.add_field("X-Client-Name", "web_translate_it")
|
148
137
|
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
149
138
|
|
150
139
|
begin
|
151
|
-
Util.handle_response(http_connection.request(request), true)
|
140
|
+
Util.handle_response(Connection.http_connection.request(request), true)
|
152
141
|
rescue Timeout::Error
|
153
142
|
puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
|
154
143
|
sleep(5)
|
@@ -157,27 +146,26 @@ module WebTranslateIt
|
|
157
146
|
end
|
158
147
|
|
159
148
|
# Gets a Translation for a String
|
160
|
-
# Needs a HTTPS Connection
|
161
149
|
#
|
162
150
|
# Implementation Example:
|
163
151
|
#
|
164
|
-
# WebTranslateIt::
|
165
|
-
# string = WebTranslateIt::String.find(
|
166
|
-
# puts string.translation_for(
|
152
|
+
# WebTranslateIt::Connection.new('secret_api_token') do
|
153
|
+
# string = WebTranslateIt::String.find(1234)
|
154
|
+
# puts string.translation_for("fr") #=> A Translation object
|
167
155
|
# end
|
168
156
|
#
|
169
157
|
|
170
|
-
def translation_for(
|
158
|
+
def translation_for(locale)
|
171
159
|
return self.translations unless self.translations == []
|
172
|
-
request = Net::HTTP::Get.new("/api/projects/#{
|
160
|
+
request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/strings/#{self.id}/locales/#{locale}/translations.yaml")
|
173
161
|
request.add_field("X-Client-Name", "web_translate_it")
|
174
162
|
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
175
163
|
|
176
164
|
begin
|
177
|
-
response = Util.handle_response(http_connection.request(request), true)
|
165
|
+
response = Util.handle_response(Connection.http_connection.request(request), true)
|
178
166
|
hash = YAML.load(response)
|
179
167
|
return nil if hash.empty?
|
180
|
-
translation = WebTranslateIt::Translation.new(
|
168
|
+
translation = WebTranslateIt::Translation.new(hash)
|
181
169
|
return translation
|
182
170
|
|
183
171
|
rescue Timeout::Error
|
@@ -190,11 +178,10 @@ module WebTranslateIt
|
|
190
178
|
protected
|
191
179
|
|
192
180
|
# Save the changes made to a String to WebTranslateIt.com
|
193
|
-
# Needs a HTTPS Connection
|
194
181
|
#
|
195
182
|
|
196
|
-
def update
|
197
|
-
request = Net::HTTP::Put.new("/api/projects/#{
|
183
|
+
def update
|
184
|
+
request = Net::HTTP::Put.new("/api/projects/#{Connection.api_key}/strings/#{self.id}.yaml")
|
198
185
|
request.add_field("X-Client-Name", "web_translate_it")
|
199
186
|
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
200
187
|
request.add_field("Content-Type", "application/json")
|
@@ -202,11 +189,11 @@ module WebTranslateIt
|
|
202
189
|
|
203
190
|
self.translations.each do |translation|
|
204
191
|
translation.string_id = self.id
|
205
|
-
translation.save
|
192
|
+
translation.save
|
206
193
|
end
|
207
194
|
|
208
195
|
begin
|
209
|
-
Util.handle_response(http_connection.request(request), true)
|
196
|
+
Util.handle_response(Connection.http_connection.request(request), true)
|
210
197
|
rescue Timeout::Error
|
211
198
|
puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
|
212
199
|
sleep(5)
|
@@ -215,18 +202,17 @@ module WebTranslateIt
|
|
215
202
|
end
|
216
203
|
|
217
204
|
# Create a new String to WebTranslateIt.com
|
218
|
-
# Needs a HTTPS Connection
|
219
205
|
#
|
220
206
|
|
221
|
-
def create
|
222
|
-
request = Net::HTTP::Post.new("/api/projects/#{
|
207
|
+
def create
|
208
|
+
request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/strings")
|
223
209
|
request.add_field("X-Client-Name", "web_translate_it")
|
224
210
|
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
225
211
|
request.add_field("Content-Type", "application/json")
|
226
212
|
request.body = self.to_json(true)
|
227
213
|
|
228
214
|
begin
|
229
|
-
response = YAML.load(Util.handle_response(http_connection.request(request), true))
|
215
|
+
response = YAML.load(Util.handle_response(Connection.http_connection.request(request), true))
|
230
216
|
self.id = response["id"]
|
231
217
|
self.new_record = false
|
232
218
|
return true
|
@@ -247,9 +233,7 @@ module WebTranslateIt
|
|
247
233
|
"status" => status,
|
248
234
|
"label" => label,
|
249
235
|
"category" => category,
|
250
|
-
"file" =>
|
251
|
-
"id" => file
|
252
|
-
}
|
236
|
+
"file" => file
|
253
237
|
}
|
254
238
|
if self.translations.any? && with_translations
|
255
239
|
hash.update({ "translations" => [] })
|