localeapp 0.6.6 → 0.6.7
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/CHANGELOG.md +4 -0
- data/bin/localeapp +27 -0
- data/features/mv.feature +15 -0
- data/features/rm.feature +14 -0
- data/features/step_definitions/cli_steps.rb +7 -0
- data/lib/localeapp/cli/remove.rb +26 -0
- data/lib/localeapp/cli/rename.rb +27 -0
- data/lib/localeapp/routes.rb +38 -0
- data/lib/localeapp/version.rb +1 -1
- data/lib/localeapp.rb +2 -0
- data/localeapp.gemspec +1 -0
- data/spec/localeapp/cli/rename_spec.rb +26 -0
- data/spec/localeapp/routes_spec.rb +36 -0
- metadata +36 -14
data/CHANGELOG.md
CHANGED
data/bin/localeapp
CHANGED
@@ -72,6 +72,33 @@ command :add do |c|
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
desc "removes a key from the project"
|
76
|
+
arg_name "<key>"
|
77
|
+
command :rm do |c|
|
78
|
+
c.action do |global_options, options, args|
|
79
|
+
key = args.shift
|
80
|
+
if key.nil?
|
81
|
+
exit_now! "localeapp rm requires a key name", 1
|
82
|
+
else
|
83
|
+
Localeapp::CLI::Remove.new(global_options).execute(key, *args)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
desc "renames a key in the project"
|
89
|
+
arg_name "<current key name> <new key name>"
|
90
|
+
command :mv do |c|
|
91
|
+
c.action do |global_options, options, args|
|
92
|
+
current_name = args.shift
|
93
|
+
new_name = args.shift
|
94
|
+
if current_name.nil? || new_name.nil?
|
95
|
+
exit_now! "localeapp mv requires a current key name and a new key name", 1
|
96
|
+
else
|
97
|
+
Localeapp::CLI::Rename.new(global_options).execute(current_name, new_name, *args)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
75
102
|
desc "Pulls all translations from localeapp.com"
|
76
103
|
command :pull do |c|
|
77
104
|
c.action do |global_options, options, args|
|
data/features/mv.feature
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Feature: Renaming a translation from the command line
|
2
|
+
|
3
|
+
Scenario: Running mv
|
4
|
+
In order to rename an existing key
|
5
|
+
When I have a valid project on localeapp.com with api key "MYAPIKEY" and the translation key "foo.bar"
|
6
|
+
And an initializer file
|
7
|
+
When I run `localeapp mv foo.bar foo.baz`
|
8
|
+
Then the output should contain:
|
9
|
+
"""
|
10
|
+
Localeapp mv
|
11
|
+
|
12
|
+
Renaming key: foo.bar to foo.baz
|
13
|
+
Success!
|
14
|
+
"""
|
15
|
+
|
data/features/rm.feature
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: Removing a translation from the command line
|
2
|
+
|
3
|
+
Scenario: Running rm
|
4
|
+
In order to remove an existing key
|
5
|
+
When I have a valid project on localeapp.com with api key "MYAPIKEY" and the translation key "foo.bar"
|
6
|
+
And an initializer file
|
7
|
+
When I run `localeapp rm foo.bar`
|
8
|
+
Then the output should contain:
|
9
|
+
"""
|
10
|
+
Localeapp rm
|
11
|
+
|
12
|
+
Remove key: foo.bar
|
13
|
+
Success!
|
14
|
+
"""
|
@@ -27,6 +27,13 @@ When /^new translations for the api key "([^"]*)" since "([^"]*)" with time "([^
|
|
27
27
|
add_fake_web_uri(:get, uri, ['200', 'OK'], body, 'date' => Time.at(new_time.to_i).httpdate)
|
28
28
|
end
|
29
29
|
|
30
|
+
|
31
|
+
When /^I have a valid project on localeapp\.com with api key "([^"]*)" and the translation key "([^"]*)"/ do |api_key, key_name|
|
32
|
+
uri = "https://api.localeapp.com/v1/projects/#{api_key}/translations/#{key_name.gsub(/\./, '%2E')}"
|
33
|
+
add_fake_web_uri(:delete, uri, ['200', 'OK'], '')
|
34
|
+
add_fake_web_uri(:post, uri + '/rename', ['200', 'OK'], '')
|
35
|
+
end
|
36
|
+
|
30
37
|
When /^an initializer file$/ do
|
31
38
|
steps %Q{
|
32
39
|
And a file named "config/initializers/localeapp.rb" with:
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Localeapp
|
2
|
+
module CLI
|
3
|
+
class Remove < Command
|
4
|
+
include ::Localeapp::ApiCall
|
5
|
+
|
6
|
+
def execute(key, *rest)
|
7
|
+
@output.puts "Localeapp rm"
|
8
|
+
@output.puts ""
|
9
|
+
@output.puts "Remove key: #{key}"
|
10
|
+
api_call :remove,
|
11
|
+
:url_options => { :key => key },
|
12
|
+
:success => :report_success,
|
13
|
+
:failure => :report_failure,
|
14
|
+
:max_connection_attempts => 3
|
15
|
+
end
|
16
|
+
|
17
|
+
def report_success(response)
|
18
|
+
@output.puts "Success!"
|
19
|
+
end
|
20
|
+
|
21
|
+
def report_failure(response)
|
22
|
+
@output.puts "Failed!"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Localeapp
|
2
|
+
module CLI
|
3
|
+
class Rename < Command
|
4
|
+
include ::Localeapp::ApiCall
|
5
|
+
|
6
|
+
def execute(current_name, new_name, *rest)
|
7
|
+
@output.puts "Localeapp mv"
|
8
|
+
@output.puts ""
|
9
|
+
@output.puts "Renaming key: #{current_name} to #{new_name}"
|
10
|
+
api_call :rename,
|
11
|
+
:url_options => { :current_name => current_name },
|
12
|
+
:payload => { :new_name => new_name },
|
13
|
+
:success => :report_success,
|
14
|
+
:failure => :report_failure,
|
15
|
+
:max_connection_attempts => 3
|
16
|
+
end
|
17
|
+
|
18
|
+
def report_success(response)
|
19
|
+
@output.puts "Success!"
|
20
|
+
end
|
21
|
+
|
22
|
+
def report_failure(response)
|
23
|
+
@output.puts "Failed!"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/localeapp/routes.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'rack/utils'
|
2
|
+
|
1
3
|
module Localeapp
|
2
4
|
module Routes
|
3
5
|
VERSION = 'v1'
|
@@ -30,6 +32,24 @@ module Localeapp
|
|
30
32
|
[:get, export_url(options)]
|
31
33
|
end
|
32
34
|
|
35
|
+
def remove_endpoint(options = {})
|
36
|
+
[:delete, remove_url(options)]
|
37
|
+
end
|
38
|
+
|
39
|
+
def remove_url(options = {})
|
40
|
+
url = http_scheme.build(base_options.merge(:path => remove_path(options[:key], options[:format])))
|
41
|
+
url.to_s
|
42
|
+
end
|
43
|
+
|
44
|
+
def rename_endpoint(options = {})
|
45
|
+
[:post, rename_url(options)]
|
46
|
+
end
|
47
|
+
|
48
|
+
def rename_url(options = {})
|
49
|
+
url = http_scheme.build(base_options.merge(:path => rename_path(options[:current_name], options[:format])))
|
50
|
+
url.to_s
|
51
|
+
end
|
52
|
+
|
33
53
|
def export_url(options = {})
|
34
54
|
options[:format] ||= 'yml'
|
35
55
|
url = http_scheme.build(base_options.merge(:path => export_path(options[:format])))
|
@@ -85,6 +105,24 @@ module Localeapp
|
|
85
105
|
path
|
86
106
|
end
|
87
107
|
|
108
|
+
def remove_path(key, format = nil)
|
109
|
+
raise "remove_path requires a key" if key.nil?
|
110
|
+
path = translations_path << "/#{escape_key(key)}"
|
111
|
+
path << ".#{format}" if format
|
112
|
+
path
|
113
|
+
end
|
114
|
+
|
115
|
+
def rename_path(current_name, format = nil)
|
116
|
+
raise "rename_path requires current name" if current_name.nil?
|
117
|
+
path = translations_path << "/#{escape_key(current_name)}" << '/rename'
|
118
|
+
path << ".#{format}" if format
|
119
|
+
path
|
120
|
+
end
|
121
|
+
|
122
|
+
def escape_key(key)
|
123
|
+
Rack::Utils.escape(key).gsub(/\./, '%2E')
|
124
|
+
end
|
125
|
+
|
88
126
|
def export_path(format = nil)
|
89
127
|
path = project_path << '/translations/all'
|
90
128
|
path << ".#{format}" if format
|
data/lib/localeapp/version.rb
CHANGED
data/lib/localeapp.rb
CHANGED
@@ -41,6 +41,8 @@ require 'localeapp/cli/pull'
|
|
41
41
|
require 'localeapp/cli/push'
|
42
42
|
require 'localeapp/cli/update'
|
43
43
|
require 'localeapp/cli/add'
|
44
|
+
require 'localeapp/cli/remove'
|
45
|
+
require 'localeapp/cli/rename'
|
44
46
|
require 'localeapp/cli/daemon'
|
45
47
|
|
46
48
|
# AUDIT: Will this work on ruby 1.9.x
|
data/localeapp.gemspec
CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.add_dependency('gli')
|
27
27
|
|
28
28
|
s.add_development_dependency('rake')
|
29
|
+
s.add_development_dependency('rack')
|
29
30
|
s.add_development_dependency('rspec', '2.11.0')
|
30
31
|
s.add_development_dependency('yard', '0.6.7')
|
31
32
|
s.add_development_dependency('RedCloth', '4.2.9')
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Localeapp::CLI::Add, "#execute(current_name, new_name, *rest)" do
|
4
|
+
def do_action(current_name = 'test.key', new_name = 'test.new_name')
|
5
|
+
@command.execute(current_name, new_name)
|
6
|
+
end
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
@output = StringIO.new
|
10
|
+
@command = Localeapp::CLI::Rename.new(:output => @output)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "makes the api call to the translations endpoint with the new name as the post body" do
|
14
|
+
with_configuration do
|
15
|
+
@command.should_receive(:api_call).with(
|
16
|
+
:rename,
|
17
|
+
:url_options => { :current_name => 'test.key' },
|
18
|
+
:payload => { :new_name => 'test.new_name' },
|
19
|
+
:success => :report_success,
|
20
|
+
:failure => :report_failure,
|
21
|
+
:max_connection_attempts => 3
|
22
|
+
)
|
23
|
+
do_action
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -82,6 +82,42 @@ describe Localeapp::Routes do
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
+
describe "#remove_endpoint(options = {})" do
|
86
|
+
it "returns :delete and the remove url for the options" do
|
87
|
+
with_configuration(@config) do
|
88
|
+
options = { :key => 'foo.bar' }
|
89
|
+
@routes.should_receive(:remove_url).with(options).and_return('url')
|
90
|
+
@routes.remove_endpoint(options).should == [:delete, 'url']
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "#remove_url(options = {})" do
|
96
|
+
it "it extends the project_url and includes the escaped key name" do
|
97
|
+
with_configuration(@config) do
|
98
|
+
@routes.remove_url(:key => 'test.key').should == "https://test.host/v1/projects/API_KEY/translations/test%2Ekey"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "#rename_endpoint(options = {})" do
|
104
|
+
it "returns :post and the rename url for the options" do
|
105
|
+
with_configuration(@config) do
|
106
|
+
options = { :current_name => 'foo.bar' }
|
107
|
+
@routes.should_receive(:rename_url).with(options).and_return('url')
|
108
|
+
@routes.rename_endpoint(options).should == [:post, 'url']
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "#rename_url(options = {})" do
|
114
|
+
it "it extends the project_url and includes the escaped key name" do
|
115
|
+
with_configuration(@config) do
|
116
|
+
@routes.rename_url(:current_name => 'test.key').should == "https://test.host/v1/projects/API_KEY/translations/test%2Ekey/rename"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
85
121
|
describe "#export_url" do
|
86
122
|
it "it extends the project_url and defaults to yml" do
|
87
123
|
with_configuration(@config) do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: localeapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 7
|
10
|
+
version: 0.6.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Christopher Dell
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-11-
|
19
|
+
date: 2012-11-12 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: i18n
|
@@ -103,9 +103,23 @@ dependencies:
|
|
103
103
|
type: :development
|
104
104
|
version_requirements: *id006
|
105
105
|
- !ruby/object:Gem::Dependency
|
106
|
-
name:
|
106
|
+
name: rack
|
107
107
|
prerelease: false
|
108
108
|
requirement: &id007 !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
hash: 3
|
114
|
+
segments:
|
115
|
+
- 0
|
116
|
+
version: "0"
|
117
|
+
type: :development
|
118
|
+
version_requirements: *id007
|
119
|
+
- !ruby/object:Gem::Dependency
|
120
|
+
name: rspec
|
121
|
+
prerelease: false
|
122
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
109
123
|
none: false
|
110
124
|
requirements:
|
111
125
|
- - "="
|
@@ -117,11 +131,11 @@ dependencies:
|
|
117
131
|
- 0
|
118
132
|
version: 2.11.0
|
119
133
|
type: :development
|
120
|
-
version_requirements: *
|
134
|
+
version_requirements: *id008
|
121
135
|
- !ruby/object:Gem::Dependency
|
122
136
|
name: yard
|
123
137
|
prerelease: false
|
124
|
-
requirement: &
|
138
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
125
139
|
none: false
|
126
140
|
requirements:
|
127
141
|
- - "="
|
@@ -133,11 +147,11 @@ dependencies:
|
|
133
147
|
- 7
|
134
148
|
version: 0.6.7
|
135
149
|
type: :development
|
136
|
-
version_requirements: *
|
150
|
+
version_requirements: *id009
|
137
151
|
- !ruby/object:Gem::Dependency
|
138
152
|
name: RedCloth
|
139
153
|
prerelease: false
|
140
|
-
requirement: &
|
154
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
141
155
|
none: false
|
142
156
|
requirements:
|
143
157
|
- - "="
|
@@ -149,11 +163,11 @@ dependencies:
|
|
149
163
|
- 9
|
150
164
|
version: 4.2.9
|
151
165
|
type: :development
|
152
|
-
version_requirements: *
|
166
|
+
version_requirements: *id010
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: aruba
|
155
169
|
prerelease: false
|
156
|
-
requirement: &
|
170
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
157
171
|
none: false
|
158
172
|
requirements:
|
159
173
|
- - "="
|
@@ -165,11 +179,11 @@ dependencies:
|
|
165
179
|
- 11
|
166
180
|
version: 0.4.11
|
167
181
|
type: :development
|
168
|
-
version_requirements: *
|
182
|
+
version_requirements: *id011
|
169
183
|
- !ruby/object:Gem::Dependency
|
170
184
|
name: fakeweb
|
171
185
|
prerelease: false
|
172
|
-
requirement: &
|
186
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
173
187
|
none: false
|
174
188
|
requirements:
|
175
189
|
- - "="
|
@@ -181,7 +195,7 @@ dependencies:
|
|
181
195
|
- 0
|
182
196
|
version: 1.3.0
|
183
197
|
type: :development
|
184
|
-
version_requirements: *
|
198
|
+
version_requirements: *id012
|
185
199
|
description: Synchronizes i18n translation keys and content with localeapp.com so you don't have to manage translations by hand.
|
186
200
|
email:
|
187
201
|
- chris@tigrish.com
|
@@ -212,8 +226,10 @@ files:
|
|
212
226
|
- features/bad_command.feature
|
213
227
|
- features/help.feature
|
214
228
|
- features/install.feature
|
229
|
+
- features/mv.feature
|
215
230
|
- features/pull.feature
|
216
231
|
- features/push.feature
|
232
|
+
- features/rm.feature
|
217
233
|
- features/step_definitions/cli_steps.rb
|
218
234
|
- features/support/env.rb
|
219
235
|
- features/support/hooks.rb
|
@@ -228,6 +244,8 @@ files:
|
|
228
244
|
- lib/localeapp/cli/install.rb
|
229
245
|
- lib/localeapp/cli/pull.rb
|
230
246
|
- lib/localeapp/cli/push.rb
|
247
|
+
- lib/localeapp/cli/remove.rb
|
248
|
+
- lib/localeapp/cli/rename.rb
|
231
249
|
- lib/localeapp/cli/update.rb
|
232
250
|
- lib/localeapp/configuration.rb
|
233
251
|
- lib/localeapp/default_value_handler.rb
|
@@ -256,6 +274,7 @@ files:
|
|
256
274
|
- spec/localeapp/cli/install_spec.rb
|
257
275
|
- spec/localeapp/cli/pull_spec.rb
|
258
276
|
- spec/localeapp/cli/push_spec.rb
|
277
|
+
- spec/localeapp/cli/rename_spec.rb
|
259
278
|
- spec/localeapp/cli/update_spec.rb
|
260
279
|
- spec/localeapp/configuration_spec.rb
|
261
280
|
- spec/localeapp/default_value_handler_spec.rb
|
@@ -309,8 +328,10 @@ test_files:
|
|
309
328
|
- features/bad_command.feature
|
310
329
|
- features/help.feature
|
311
330
|
- features/install.feature
|
331
|
+
- features/mv.feature
|
312
332
|
- features/pull.feature
|
313
333
|
- features/push.feature
|
334
|
+
- features/rm.feature
|
314
335
|
- features/step_definitions/cli_steps.rb
|
315
336
|
- features/support/env.rb
|
316
337
|
- features/support/hooks.rb
|
@@ -325,6 +346,7 @@ test_files:
|
|
325
346
|
- spec/localeapp/cli/install_spec.rb
|
326
347
|
- spec/localeapp/cli/pull_spec.rb
|
327
348
|
- spec/localeapp/cli/push_spec.rb
|
349
|
+
- spec/localeapp/cli/rename_spec.rb
|
328
350
|
- spec/localeapp/cli/update_spec.rb
|
329
351
|
- spec/localeapp/configuration_spec.rb
|
330
352
|
- spec/localeapp/default_value_handler_spec.rb
|