lingohub 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/lingohub/client.rb +2 -1
- data/lib/lingohub/command.rb +30 -31
- data/lib/lingohub/commands/auth.rb +15 -4
- data/lib/lingohub/commands/help.rb +1 -1
- data/lib/lingohub/commands/project.rb +4 -3
- data/lib/lingohub/commands/translation.rb +2 -2
- data/lib/lingohub/models/project.rb +13 -9
- data/lib/lingohub/version.rb +1 -1
- metadata +29 -73
data/lib/lingohub/client.rb
CHANGED
@@ -71,9 +71,10 @@ class Lingohub::Client
|
|
71
71
|
|
72
72
|
def process(method, uri, extra_headers={ }, payload=nil)
|
73
73
|
headers = lingohub_headers.merge(extra_headers)
|
74
|
-
# payload = auth_params.merge(payload)
|
75
74
|
args = [method, payload, headers].compact
|
75
|
+
# puts "---- URI --- #{uri} - #{args}"
|
76
76
|
response = resource(uri, credentials).send(*args)
|
77
|
+
#puts response
|
77
78
|
|
78
79
|
response
|
79
80
|
end
|
data/lib/lingohub/command.rb
CHANGED
@@ -27,11 +27,10 @@ module Lingohub
|
|
27
27
|
# end
|
28
28
|
# rescue RestClient::ResourceNotFound => e
|
29
29
|
# error extract_not_found(e.http_body)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
# error "API request timed out. Please try again, or contact team@lingohub.com if this issue persists."
|
30
|
+
rescue RestClient::RequestFailed => e
|
31
|
+
error extract_error(e.http_body) unless e.http_code == 402
|
32
|
+
rescue RestClient::RequestTimeout
|
33
|
+
error "API request timed out. Please try again, or contact team@lingohub.com if this issue persists."
|
35
34
|
rescue CommandFailed => e
|
36
35
|
error e.message
|
37
36
|
rescue Interrupt => e
|
@@ -67,32 +66,32 @@ module Lingohub
|
|
67
66
|
end
|
68
67
|
end
|
69
68
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
69
|
+
def extract_not_found(body)
|
70
|
+
body =~ /^[\w\s]+ not found$/ ? body : "Resource not found"
|
71
|
+
end
|
72
|
+
|
73
|
+
def extract_error(body)
|
74
|
+
msg = parse_error_xml(body) || parse_error_json(body) || parse_error_plain(body) || 'Internal server error'
|
75
|
+
msg.split("\n").map { |line| ' ! ' + line }.join("\n")
|
76
|
+
end
|
77
|
+
|
78
|
+
def parse_error_xml(body)
|
79
|
+
xml_errors = REXML::Document.new(body).elements.to_a("//errors/error")
|
80
|
+
msg = xml_errors.map { |a| a.text }.join(" / ")
|
81
|
+
return msg unless msg.empty?
|
82
|
+
rescue Exception
|
83
|
+
end
|
84
|
+
|
85
|
+
def parse_error_json(body)
|
86
|
+
json = OkJson.decode(body.to_s)
|
87
|
+
json['error'] || json.to_s
|
88
|
+
rescue OkJson::ParserError
|
89
|
+
end
|
90
|
+
|
91
|
+
def parse_error_plain(body)
|
92
|
+
return unless body.respond_to?(:headers) && body.headers[:content_type].include?("text/plain")
|
93
|
+
body.to_s
|
94
|
+
end
|
96
95
|
end
|
97
96
|
end
|
98
97
|
end
|
@@ -67,16 +67,27 @@ module Lingohub::Command
|
|
67
67
|
print "Email: "
|
68
68
|
user = ask
|
69
69
|
|
70
|
-
|
70
|
+
|
71
|
+
print "Password (please leave blank if you want to use your API token): "
|
71
72
|
password = running_on_windows? ? ask_for_password_on_windows : ask_for_password
|
72
|
-
|
73
|
+
|
74
|
+
if password.empty?
|
75
|
+
print "API key: "
|
76
|
+
api_key = ask
|
77
|
+
else
|
78
|
+
api_key = retrieve_api_key(password, user)
|
79
|
+
end
|
73
80
|
|
74
81
|
[user, api_key]
|
75
82
|
end
|
76
83
|
|
84
|
+
def retrieve_api_key(password, user)
|
85
|
+
Lingohub::Client.auth(:username => user, :password => password, :host => host)['api_key']
|
86
|
+
end
|
87
|
+
|
77
88
|
def ask_for_password_on_windows
|
78
89
|
require "Win32API"
|
79
|
-
char
|
90
|
+
char = nil
|
80
91
|
password = ''
|
81
92
|
|
82
93
|
while char = Win32API.new("crtdll", "_getch", [], "L").Call do
|
@@ -108,7 +119,7 @@ module Lingohub::Command
|
|
108
119
|
rescue ::RestClient::Unauthorized, ::RestClient::ResourceNotFound => e
|
109
120
|
puts "EXCEPTION #{e}"
|
110
121
|
delete_credentials
|
111
|
-
@client
|
122
|
+
@client = nil
|
112
123
|
@credentials = nil
|
113
124
|
display "Authentication failed."
|
114
125
|
retry if retry_login?
|
@@ -46,7 +46,7 @@ module Lingohub::Command
|
|
46
46
|
group.command 'project:info --project <name>', 'show project info, like web url and number of translations'
|
47
47
|
group.command 'project:open --project <name>', 'open the project in a web browser'
|
48
48
|
group.command 'project:rename <oldname> <newname>', 'rename the project'
|
49
|
-
group.command 'project:
|
49
|
+
group.command 'project:archive --project <name>', 'archive the project'
|
50
50
|
group.space
|
51
51
|
end
|
52
52
|
|
@@ -25,7 +25,6 @@ module Lingohub::Command
|
|
25
25
|
|
26
26
|
def create
|
27
27
|
title = args.shift.strip rescue nil
|
28
|
-
title ||= extract_from_dir_name
|
29
28
|
lingohub.projects.create title
|
30
29
|
display("Created #{title}")
|
31
30
|
end
|
@@ -42,14 +41,16 @@ module Lingohub::Command
|
|
42
41
|
display "=== #{project.title}"
|
43
42
|
display "Web URL: #{project.weburl}"
|
44
43
|
display "Owner: #{project.owner}"
|
45
|
-
display "
|
44
|
+
display "Opensource: #{project.opensource}"
|
45
|
+
display "Locales: #{project.project_locales}"
|
46
|
+
display "Description: #{project.description}"
|
46
47
|
end
|
47
48
|
|
48
49
|
def open
|
49
50
|
Launchy.open project.weburl
|
50
51
|
end
|
51
52
|
|
52
|
-
def
|
53
|
+
def archive
|
53
54
|
display "=== #{project.title}"
|
54
55
|
display "Web URL: #{project.weburl}"
|
55
56
|
display "Owner: #{project.owner}"
|
@@ -77,7 +77,7 @@ module Lingohub::Command
|
|
77
77
|
project.pull_resource(directory, file_name)
|
78
78
|
display("#{file_name} downloaded")
|
79
79
|
rescue
|
80
|
-
display "Error downloading #{file_name}. Response: #{$!.
|
80
|
+
display "Error downloading #{file_name}. Response: #{$!.message || $!.response}"
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
@@ -89,7 +89,7 @@ module Lingohub::Command
|
|
89
89
|
project.push_resource(path, extract_locale_from_args)
|
90
90
|
display("#{file_name} uploaded")
|
91
91
|
rescue
|
92
|
-
display "Error uploading #{file_name}. Response: #{$!.
|
92
|
+
display "Error uploading #{file_name}. Response: #{$!.message || $!.response}"
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
@@ -18,14 +18,16 @@ module Lingohub
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
|
22
|
+
lazy_attr_accessor(:title, :link, :weburl, :resources_url, :collaborators_url, :invitations_url,
|
23
|
+
:translations_url, :search_url, :owner, :description, :opensource, :project_locales)
|
22
24
|
|
23
25
|
def initialize(client, link)
|
24
26
|
@client = client
|
25
27
|
@link = link
|
26
28
|
end
|
27
29
|
|
28
|
-
def create!(attributes={})
|
30
|
+
def create!(attributes={ })
|
29
31
|
self.title = attributes[:title]
|
30
32
|
end
|
31
33
|
|
@@ -33,17 +35,17 @@ module Lingohub
|
|
33
35
|
@client.delete self.link
|
34
36
|
end
|
35
37
|
|
36
|
-
def update(attributes={})
|
37
|
-
@client.put self.link, {:project => attributes}
|
38
|
+
def update(attributes={ })
|
39
|
+
@client.put self.link, { :project => attributes }
|
38
40
|
end
|
39
41
|
|
40
42
|
def invite_collaborator(email)
|
41
|
-
@client.post(self.invitations_url, :invitation => {:email => email})
|
43
|
+
@client.post(self.invitations_url, :invitation => { :email => email })
|
42
44
|
end
|
43
45
|
|
44
46
|
def resources
|
45
47
|
unless defined? @resources
|
46
|
-
@resources = {}
|
48
|
+
@resources = { }
|
47
49
|
response = @client.get(self.resources_url)
|
48
50
|
resource_hash = JSON.parse(response)
|
49
51
|
members = resource_hash["members"]
|
@@ -85,8 +87,8 @@ module Lingohub
|
|
85
87
|
end
|
86
88
|
|
87
89
|
def pull_search_results(directory, filename, query, locale = nil)
|
88
|
-
parameters = {:filename => filename, :query => query}
|
89
|
-
parameters.merge!({:iso2_slug => locale}) unless locale.nil? or locale.strip.empty?
|
90
|
+
parameters = { :filename => filename, :query => query }
|
91
|
+
parameters.merge!({ :iso2_slug => locale }) unless locale.nil? or locale.strip.empty?
|
90
92
|
|
91
93
|
content = @client.get(search_url, parameters)
|
92
94
|
save_to_file(File.join(directory, filename), content)
|
@@ -106,8 +108,10 @@ module Lingohub
|
|
106
108
|
collaborators_url = links[4]["href"]
|
107
109
|
invitations_url = links[5]["href"]
|
108
110
|
search_url = links[6]["href"]
|
111
|
+
|
109
112
|
init_attributes :title => project_hash["title"], :link => link, :weburl => weburl,
|
110
|
-
:owner => project_hash["owner_email"], :
|
113
|
+
:owner => project_hash["owner_email"], :description => project_hash["description"],
|
114
|
+
:opensource => project_hash["opensource"], :project_locales => project_hash["project_locales"],
|
111
115
|
:translations_url => translations_url, :resources_url => resources_url,
|
112
116
|
:collaborators_url => collaborators_url, :invitations_url => invitations_url,
|
113
117
|
:search_url => search_url
|
data/lib/lingohub/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lingohub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70361082811120 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.6.7
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 1.6.7
|
24
|
+
version_requirements: *70361082811120
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: launchy
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70361082810620 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ~>
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: 2.0.5
|
38
33
|
type: :runtime
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 2.0.5
|
35
|
+
version_requirements: *70361082810620
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: stringex
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70361082810160 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ~>
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: 1.3.2
|
54
44
|
type: :runtime
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.3.2
|
46
|
+
version_requirements: *70361082810160
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: rake
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70361082809700 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ~>
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: 0.9.2
|
70
55
|
type: :development
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 0.9.2
|
57
|
+
version_requirements: *70361082809700
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: rspec
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70361082809240 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ~>
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: 2.8.0
|
86
66
|
type: :development
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: 2.8.0
|
68
|
+
version_requirements: *70361082809240
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: fakefs
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &70361082808780 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ~>
|
@@ -101,15 +76,10 @@ dependencies:
|
|
101
76
|
version: 0.4.0
|
102
77
|
type: :development
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 0.4.0
|
79
|
+
version_requirements: *70361082808780
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: taps
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirement: &70361082808320 !ruby/object:Gem::Requirement
|
113
83
|
none: false
|
114
84
|
requirements:
|
115
85
|
- - ~>
|
@@ -117,15 +87,10 @@ dependencies:
|
|
117
87
|
version: 0.3.23
|
118
88
|
type: :development
|
119
89
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 0.3.23
|
90
|
+
version_requirements: *70361082808320
|
126
91
|
- !ruby/object:Gem::Dependency
|
127
92
|
name: webmock
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirement: &70361082807860 !ruby/object:Gem::Requirement
|
129
94
|
none: false
|
130
95
|
requirements:
|
131
96
|
- - ~>
|
@@ -133,15 +98,10 @@ dependencies:
|
|
133
98
|
version: 1.8.0
|
134
99
|
type: :development
|
135
100
|
prerelease: false
|
136
|
-
version_requirements:
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: 1.8.0
|
101
|
+
version_requirements: *70361082807860
|
142
102
|
- !ruby/object:Gem::Dependency
|
143
103
|
name: i18n
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirement: &70361082807400 !ruby/object:Gem::Requirement
|
145
105
|
none: false
|
146
106
|
requirements:
|
147
107
|
- - ~>
|
@@ -149,15 +109,10 @@ dependencies:
|
|
149
109
|
version: 0.6.0
|
150
110
|
type: :development
|
151
111
|
prerelease: false
|
152
|
-
version_requirements:
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ~>
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: 0.6.0
|
112
|
+
version_requirements: *70361082807400
|
158
113
|
- !ruby/object:Gem::Dependency
|
159
114
|
name: vcr
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirement: &70361082806940 !ruby/object:Gem::Requirement
|
161
116
|
none: false
|
162
117
|
requirements:
|
163
118
|
- - ~>
|
@@ -165,12 +120,7 @@ dependencies:
|
|
165
120
|
version: 2.0.0
|
166
121
|
type: :development
|
167
122
|
prerelease: false
|
168
|
-
version_requirements:
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ~>
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: 2.0.0
|
123
|
+
version_requirements: *70361082806940
|
174
124
|
description: Client library and command-line tool to translate Ruby based apps with
|
175
125
|
lingohub.
|
176
126
|
email:
|
@@ -218,15 +168,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
218
168
|
- - ! '>='
|
219
169
|
- !ruby/object:Gem::Version
|
220
170
|
version: '0'
|
171
|
+
segments:
|
172
|
+
- 0
|
173
|
+
hash: 3497422470760374720
|
221
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
175
|
none: false
|
223
176
|
requirements:
|
224
177
|
- - ! '>='
|
225
178
|
- !ruby/object:Gem::Version
|
226
179
|
version: '0'
|
180
|
+
segments:
|
181
|
+
- 0
|
182
|
+
hash: 3497422470760374720
|
227
183
|
requirements: []
|
228
184
|
rubyforge_project:
|
229
|
-
rubygems_version: 1.8.
|
185
|
+
rubygems_version: 1.8.17
|
230
186
|
signing_key:
|
231
187
|
specification_version: 3
|
232
188
|
summary: Client library and command-line tool to translate Ruby based apps with lingohub.
|