lingohub 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|