localeapp 2.1.1 → 2.2.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -3
- data/CHANGELOG.md +12 -0
- data/README.md +9 -0
- data/bin/localeapp +141 -119
- data/features/add.feature +15 -49
- data/features/bad_command.feature +4 -3
- data/features/env_file.feature +7 -0
- data/features/environment.feature +7 -0
- data/features/help.feature +3 -4
- data/features/install.feature +19 -33
- data/features/install/write_env_file.feature +26 -0
- data/features/mv.feature +9 -5
- data/features/options/api_key.feature +6 -0
- data/features/pull.feature +15 -27
- data/features/push.feature +15 -28
- data/features/rm.feature +10 -5
- data/features/step_definitions/cli_steps.rb +13 -10
- data/features/step_definitions/execution_steps.rb +3 -0
- data/features/step_definitions/filesystem_steps.rb +12 -0
- data/features/step_definitions/output_steps.rb +10 -0
- data/features/support/env.rb +2 -2
- data/features/update.feature +20 -29
- data/lib/localeapp.rb +7 -0
- data/lib/localeapp/cli/install.rb +28 -15
- data/lib/localeapp/cli/pull.rb +2 -1
- data/lib/localeapp/cli/push.rb +2 -1
- data/lib/localeapp/cli/remove.rb +2 -1
- data/lib/localeapp/cli/rename.rb +2 -1
- data/lib/localeapp/configuration.rb +1 -1
- data/lib/localeapp/poller.rb +4 -1
- data/lib/localeapp/sender.rb +1 -0
- data/lib/localeapp/version.rb +1 -1
- data/spec/localeapp/cli/install_spec.rb +103 -63
- data/spec/localeapp/cli/pull_spec.rb +1 -1
- data/spec/localeapp/cli/push_spec.rb +1 -1
- data/spec/localeapp/cli/rename_spec.rb +1 -1
- metadata +10 -6
- data/.autotest +0 -4
- data/.rvmrc +0 -1
- data/init.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 778186a71665c8f24e361206ffa3b65ac2cee621
|
4
|
+
data.tar.gz: 60bfaf8940fd301c0854e2c1d41d4a2d4862cab8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '06567599ed2fa7388bdcbd49b448d426ebfa581566128af299520eac8e56c1b4c993e0fa48ae6eb34eabd4ea87e7803d228e8c693381dab6809ad754c2a4ab0b'
|
7
|
+
data.tar.gz: 69ea7fb872f3f4524d448c31f968373a70e8db445b03328cb3392856d3e4e103363376cba9e51209c128adc9c907695cd0d033e17b385385121d16af1cea5c6f
|
data/.travis.yml
CHANGED
@@ -3,12 +3,13 @@ dist: trusty
|
|
3
3
|
before_install:
|
4
4
|
- gem install bundler
|
5
5
|
rvm:
|
6
|
-
- 2.4.
|
7
|
-
- 2.3.
|
8
|
-
- 2.2.
|
6
|
+
- 2.4.1
|
7
|
+
- 2.3.4
|
8
|
+
- 2.2.7
|
9
9
|
- 2.1.10
|
10
10
|
- jruby
|
11
11
|
gemfile:
|
12
|
+
- Gemfile
|
12
13
|
- gemfiles/i18n_0.4.gemfile
|
13
14
|
- gemfiles/i18n_0.5.gemfile
|
14
15
|
- gemfiles/i18n_0.6.gemfile
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
# master
|
2
2
|
|
3
|
+
# Version 2.2.0
|
4
|
+
|
5
|
+
* Read API key from environment in generated config files, instead of
|
6
|
+
writing the API key directly in those files
|
7
|
+
* Fix handling of HTTP errors when querying API
|
8
|
+
* Stop checking project and app default locale at install
|
9
|
+
|
10
|
+
# Version 2.1.1
|
11
|
+
|
3
12
|
* Support ruby 2.4
|
13
|
+
|
14
|
+
# Version 2.1.0
|
15
|
+
|
4
16
|
* Drop ruby 1.9 and ruby 2.0 support
|
5
17
|
|
6
18
|
# Version 2.0.0
|
data/README.md
CHANGED
@@ -14,6 +14,15 @@ Though the i18n gem uses YAML as it's default file format it doesn't require ser
|
|
14
14
|
|
15
15
|
## Installation
|
16
16
|
|
17
|
+
Note that the API key is actually never written to configuration files
|
18
|
+
generated by the gem, but is expected to be set in the environment as
|
19
|
+
`LOCALEAPP_API_KEY`.
|
20
|
+
|
21
|
+
For convenience, the `install` command accepts a `-e` or
|
22
|
+
`--write-env-file` option that will append the API key to `.env` file,
|
23
|
+
so that you can use `foreman` or other tools supporting this
|
24
|
+
convention.
|
25
|
+
|
17
26
|
### Rails 3+
|
18
27
|
|
19
28
|
Add the localeapp gem to your `Gemfile` and install it:
|
data/bin/localeapp
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'gli'
|
4
|
+
|
3
5
|
require 'localeapp'
|
4
6
|
|
5
7
|
# Don't connect to the net if we're running under cucumber for testing
|
@@ -11,157 +13,177 @@ if ENV['FAKE_WEB_DURING_CUCUMBER_RUN']
|
|
11
13
|
end
|
12
14
|
FakeWeb.allow_net_connect = false
|
13
15
|
if fake_data_as_json = ENV['FAKE_WEB_FAKES']
|
14
|
-
fakes =
|
16
|
+
fakes = YAML.load(fake_data_as_json)
|
15
17
|
fakes.each do |fake|
|
16
18
|
FakeWeb.register_uri fake['method'].to_sym, fake['uri'], { :body => fake['body'], :status => fake['status'] }.merge(fake['headers'])
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
|
-
|
22
|
-
gli2 = GLI::VERSION >= '2.0.0'
|
23
|
-
|
24
|
-
|
25
|
-
include GLI::App
|
26
|
-
else
|
27
|
-
include GLI
|
28
|
-
end
|
29
|
-
|
30
|
-
pre do |global_options, command, options, args|
|
31
|
-
global_options[:k] = if global_options[:k]
|
32
|
-
global_options[:k]
|
33
|
-
elsif ENV['LOCALEAPP_API_KEY']
|
34
|
-
ENV['LOCALEAPP_API_KEY']
|
35
|
-
elsif File.exist?('.env') && IO.read('.env') =~ /^LOCALEAPP_API_KEY=(\w+)$/
|
36
|
-
$1
|
23
|
+
module LocaleappGLIWrapper
|
24
|
+
gli2 = GLI::VERSION >= '2.0.0'
|
25
|
+
if gli2
|
26
|
+
include GLI::App
|
37
27
|
else
|
38
|
-
|
28
|
+
include GLI
|
39
29
|
end
|
30
|
+
extend self
|
31
|
+
|
32
|
+
pre do |global_options, command, options, args|
|
33
|
+
global_options[:k] = if global_options[:k]
|
34
|
+
global_options[:k]
|
35
|
+
elsif ENV['LOCALEAPP_API_KEY']
|
36
|
+
ENV['LOCALEAPP_API_KEY']
|
37
|
+
elsif File.exist?('.env') && IO.read('.env') =~ /^LOCALEAPP_API_KEY=(\w+)$/
|
38
|
+
$1
|
39
|
+
else
|
40
|
+
nil
|
41
|
+
end
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
if Localeapp.has_config_file? || !global_options[:k].nil?
|
44
|
+
true
|
45
|
+
else
|
46
|
+
puts "Could not load config file and no key specified"
|
47
|
+
exit 1
|
48
|
+
end
|
46
49
|
end
|
47
|
-
end
|
48
50
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
command :install do |c|
|
58
|
-
c.desc "install configuration files in .localeapp/"
|
59
|
-
c.switch [:s, 'standalone']
|
60
|
-
|
61
|
-
c.desc "create configuration when using localeapp via a heroku addon (PRE ALPHA)"
|
62
|
-
c.switch [:h, 'heroku']
|
63
|
-
|
64
|
-
c.desc "install a skeleton project suitable for Github (warning: README.md will be overwritten)"
|
65
|
-
c.switch [:g, 'github']
|
66
|
-
|
67
|
-
c.action do |global_options, options, args|
|
68
|
-
key = args.first
|
69
|
-
installer = Localeapp::CLI::Install.new
|
70
|
-
installer.config_type = :standalone if options[:standalone]
|
71
|
-
installer.config_type = :heroku if options[:heroku]
|
72
|
-
installer.config_type = :github if options[:github]
|
73
|
-
installer.config_type ||= :rails
|
74
|
-
unless installer.execute(key)
|
75
|
-
exit_now! "", 1
|
51
|
+
on_error do |ex|
|
52
|
+
case ex
|
53
|
+
when Localeapp::APIResponseError
|
54
|
+
$stderr.puts "ERROR: #{ex}"
|
55
|
+
exit 70
|
56
|
+
false
|
57
|
+
else
|
58
|
+
true
|
76
59
|
end
|
77
60
|
end
|
78
|
-
end
|
79
61
|
|
80
|
-
desc "
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
62
|
+
desc "API Key (for when there is no configuration file)"
|
63
|
+
flag [:k, 'api-key']
|
64
|
+
|
65
|
+
version Localeapp::VERSION
|
66
|
+
|
67
|
+
desc "Creates new configuration files and confirms key works"
|
68
|
+
skips_pre
|
69
|
+
arg_name "<api_key>"
|
70
|
+
command :install do |c|
|
71
|
+
c.desc "install configuration files in .localeapp/"
|
72
|
+
c.switch [:s, 'standalone']
|
73
|
+
|
74
|
+
c.desc "create configuration when using localeapp via a heroku addon (PRE ALPHA)"
|
75
|
+
c.switch [:h, 'heroku']
|
76
|
+
|
77
|
+
c.desc "install a skeleton project suitable for Github " \
|
78
|
+
"(warning: will write to .gitignore and README.md"
|
79
|
+
c.switch [:g, 'github']
|
80
|
+
|
81
|
+
c.desc "write API key to `#{Localeapp.env_file_path}'"
|
82
|
+
c.switch [:e, "write-env-file"]
|
83
|
+
|
84
|
+
c.action do |global_options, options, args|
|
85
|
+
install_opts = {}
|
86
|
+
if options[:"write-env-file"]
|
87
|
+
install_opts[:write_env_file] = Localeapp.env_file_path
|
88
|
+
end
|
89
|
+
key = args.first
|
90
|
+
installer = Localeapp::CLI::Install.new
|
91
|
+
installer.config_type = :standalone if options[:standalone]
|
92
|
+
installer.config_type = :heroku if options[:heroku]
|
93
|
+
installer.config_type = :github if options[:github]
|
94
|
+
installer.config_type ||= :rails
|
95
|
+
unless installer.execute(key, install_opts)
|
96
|
+
exit_now! "", 1
|
97
|
+
end
|
89
98
|
end
|
90
99
|
end
|
91
|
-
end
|
92
100
|
|
93
|
-
desc "
|
94
|
-
arg_name "<key>"
|
95
|
-
command :
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
101
|
+
desc "Sends the key and content to localeapp.com"
|
102
|
+
arg_name "<key> <locale:content> (<locale:content> ...)"
|
103
|
+
command :add do |c|
|
104
|
+
c.action do |global_options, options, args|
|
105
|
+
key = args.shift
|
106
|
+
if key.nil? || args.size.zero?
|
107
|
+
exit_now! "localeapp add requires a key name and at least one translation", 1
|
108
|
+
else
|
109
|
+
Localeapp::CLI::Add.new(global_options).execute(key, *args)
|
110
|
+
end
|
102
111
|
end
|
103
112
|
end
|
104
|
-
end
|
105
113
|
|
106
|
-
desc "
|
107
|
-
arg_name "<
|
108
|
-
command :
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
114
|
+
desc "removes a key from the project"
|
115
|
+
arg_name "<key>"
|
116
|
+
command :rm do |c|
|
117
|
+
c.action do |global_options, options, args|
|
118
|
+
key = args.shift
|
119
|
+
if key.nil?
|
120
|
+
exit_now! "localeapp rm requires a key name", 1
|
121
|
+
else
|
122
|
+
Localeapp::CLI::Remove.new(global_options).execute(key, *args)
|
123
|
+
end
|
116
124
|
end
|
117
125
|
end
|
118
|
-
end
|
119
126
|
|
120
|
-
desc "
|
121
|
-
|
122
|
-
|
123
|
-
|
127
|
+
desc "renames a key in the project"
|
128
|
+
arg_name "<current key name> <new key name>"
|
129
|
+
command :mv do |c|
|
130
|
+
c.action do |global_options, options, args|
|
131
|
+
current_name = args.shift
|
132
|
+
new_name = args.shift
|
133
|
+
if current_name.nil? || new_name.nil?
|
134
|
+
exit_now! "localeapp mv requires a current key name and a new key name", 1
|
135
|
+
else
|
136
|
+
Localeapp::CLI::Rename.new(global_options).execute(current_name, new_name, *args)
|
137
|
+
end
|
138
|
+
end
|
124
139
|
end
|
125
|
-
end
|
126
140
|
|
127
|
-
desc "
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
141
|
+
desc "Pulls all translations from localeapp.com"
|
142
|
+
command :pull do |c|
|
143
|
+
c.action do |global_options, options, args|
|
144
|
+
Localeapp::CLI::Pull.new(global_options).execute
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
desc "Pushes a translation file or directory to localeapp.com"
|
149
|
+
arg_name "<file>"
|
150
|
+
command :push do |c|
|
151
|
+
c.action do |global_options, options, args|
|
152
|
+
if args.empty?
|
153
|
+
exit_now! "localeapp push requires a file or directory to push", 1
|
154
|
+
else
|
155
|
+
path = args.first
|
156
|
+
pusher = Localeapp::CLI::Push.new(global_options)
|
157
|
+
pusher.execute(path)
|
158
|
+
end
|
137
159
|
end
|
138
160
|
end
|
139
|
-
end
|
140
161
|
|
141
|
-
desc "Gets any changes since the last poll and updates the yml"
|
142
|
-
command :update do |c|
|
143
|
-
|
144
|
-
|
162
|
+
desc "Gets any changes since the last poll and updates the yml"
|
163
|
+
command :update do |c|
|
164
|
+
c.action do |global_options, options, args|
|
165
|
+
Localeapp::CLI::Update.new(global_options).execute
|
166
|
+
end
|
145
167
|
end
|
146
|
-
end
|
147
168
|
|
148
|
-
desc "Simple daemon (checks for new translations in the background)"
|
149
|
-
command :daemon do |c|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
169
|
+
desc "Simple daemon (checks for new translations in the background)"
|
170
|
+
command :daemon do |c|
|
171
|
+
c.desc "Interval to wait between checks"
|
172
|
+
c.arg_name 'interval'
|
173
|
+
c.default_value 5
|
174
|
+
c.flag [:i, :interval]
|
154
175
|
|
155
|
-
|
156
|
-
|
176
|
+
c.desc "run the daemon in the background"
|
177
|
+
c.switch [:b, 'background']
|
157
178
|
|
158
|
-
|
159
|
-
|
179
|
+
c.action do |global_options, options, args|
|
180
|
+
Localeapp::CLI::Daemon.new(global_options).execute(options)
|
181
|
+
end
|
160
182
|
end
|
161
|
-
end
|
162
183
|
|
163
|
-
if gli2
|
164
|
-
|
165
|
-
else
|
166
|
-
|
184
|
+
if gli2
|
185
|
+
exit run(ARGV)
|
186
|
+
else
|
187
|
+
exit GLI.run(ARGV)
|
188
|
+
end
|
167
189
|
end
|
data/features/add.feature
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: `add' command
|
2
2
|
|
3
|
-
Scenario:
|
4
|
-
In order to add a key and translation content
|
3
|
+
Scenario: Adds the given translation
|
5
4
|
Given I have a valid project on localeapp.com with api key "MYAPIKEY"
|
6
|
-
|
7
|
-
When I run `localeapp add foo.baz en:"test en content" es:"test es content"`
|
5
|
+
And an initializer file
|
6
|
+
When I successfully run `localeapp add foo.baz en:"test en content" es:"test es content"`
|
8
7
|
Then the output should contain:
|
9
8
|
"""
|
10
9
|
Localeapp Add
|
@@ -13,60 +12,27 @@ Feature: Adding a translation from the command line
|
|
13
12
|
Success!
|
14
13
|
"""
|
15
14
|
|
16
|
-
Scenario:
|
17
|
-
In order to add a key and translation content
|
15
|
+
Scenario: Reports an error when no translation is given
|
18
16
|
Given I have a valid project on localeapp.com with api key "MYAPIKEY"
|
19
|
-
|
17
|
+
And an initializer file
|
20
18
|
When I run `localeapp add`
|
21
|
-
Then the
|
19
|
+
Then the exit status must be 1
|
20
|
+
And the output should contain:
|
22
21
|
"""
|
23
22
|
localeapp add requires a key name and at least one translation
|
24
23
|
"""
|
25
24
|
|
26
|
-
Scenario:
|
27
|
-
In order to add a key and translation content
|
25
|
+
Scenario: Reports an error when given a translation without description
|
28
26
|
Given I have a valid project on localeapp.com with api key "MYAPIKEY"
|
29
|
-
|
27
|
+
And an initializer file
|
30
28
|
When I run `localeapp add foo.bar`
|
31
29
|
Then the output should contain:
|
32
30
|
"""
|
33
31
|
localeapp add requires a key name and at least one translation
|
34
32
|
"""
|
35
33
|
|
36
|
-
Scenario:
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
"""
|
42
|
-
Localeapp Add
|
43
|
-
|
44
|
-
Sending key: foo.baz
|
45
|
-
Success!
|
46
|
-
"""
|
47
|
-
|
48
|
-
Scenario: Running add with no initializer file, passing the key via an ENV variable
|
49
|
-
In order to add a key and translation content
|
50
|
-
Given I have a valid project on localeapp.com with api key "MYAPIKEY"
|
51
|
-
And I have a LOCALEAPP_API_KEY env variable set to "MYAPIKEY"
|
52
|
-
When I run `localeapp add foo.baz en:"test en content"`
|
53
|
-
Then the output should contain:
|
54
|
-
"""
|
55
|
-
Localeapp Add
|
56
|
-
|
57
|
-
Sending key: foo.baz
|
58
|
-
Success!
|
59
|
-
"""
|
60
|
-
|
61
|
-
Scenario: Running add with no initializer file, passing the key via a .env file
|
62
|
-
In order to add a key and translation content
|
63
|
-
Given I have a valid project on localeapp.com with api key "MYAPIKEY"
|
64
|
-
And I have a .env file containing the api key "MYAPIKEY"
|
65
|
-
When I run `localeapp add foo.baz en:"test en content"`
|
66
|
-
Then the output should contain:
|
67
|
-
"""
|
68
|
-
Localeapp Add
|
69
|
-
|
70
|
-
Sending key: foo.baz
|
71
|
-
Success!
|
72
|
-
"""
|
34
|
+
Scenario: Reports an error when the given API key is incorrect
|
35
|
+
Given no project exist on localeapp.com with API key "MYAPIKEY"
|
36
|
+
When I run `localeapp -k MYAPIKEY add foo en:bar`
|
37
|
+
Then the exit status must be 70
|
38
|
+
And the output must match /error.+404/i
|