lingohub 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
- # rescue RestClient::RequestFailed => e
31
- # error extract_error(e.http_body) unless e.http_code == 402
32
- # retry if run_internal('account:confirm_billing', args.dup)
33
- # rescue RestClient::RequestTimeout
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
- # def extract_not_found(body)
71
- # body =~ /^[\w\s]+ not found$/ ? body : "Resource not found"
72
- # end
73
- #
74
- # def extract_error(body)
75
- # msg = parse_error_xml(body) || parse_error_json(body) || parse_error_plain(body) || 'Internal server error'
76
- # msg.split("\n").map { |line| ' ! ' + line }.join("\n")
77
- # end
78
- #
79
- # def parse_error_xml(body)
80
- # xml_errors = REXML::Document.new(body).elements.to_a("//errors/error")
81
- # msg = xml_errors.map { |a| a.text }.join(" / ")
82
- # return msg unless msg.empty?
83
- # rescue Exception
84
- # end
85
- #
86
- # def parse_error_json(body)
87
- # json = OkJson.decode(body.to_s)
88
- # json['error']
89
- # rescue OkJson::ParserError
90
- # end
91
- #
92
- # def parse_error_plain(body)
93
- # return unless body.respond_to?(:headers) && body.headers[:content_type].include?("text/plain")
94
- # body.to_s
95
- # end
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
- print "Password: "
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
- api_key = Lingohub::Client.auth(:username => user, :password => password, :host => host)['api_key']
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 = nil
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 = nil
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:destroy --project <name>', 'destroy the project permanently'
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 "Number of translation: #{project.translations_count}"
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 destroy
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: #{$!.response || $!.message}"
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: #{$!.response || $!.message}"
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
- lazy_attr_accessor(:title, :link, :weburl, :resources_url, :collaborators_url, :invitations_url, :translations_url, :search_url, :translations_count, :owner)
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"], :translations_count => project_hash["translations_count"],
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
@@ -1,4 +1,4 @@
1
1
  module Lingohub
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  API_VERSION = 'v1'
4
4
  end
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
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-06-20 00:00:00.000000000 Z
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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.24
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.