twine 1.0.2 → 1.1
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 +5 -5
- data/README.md +45 -6
- data/lib/twine/cli.rb +24 -2
- data/lib/twine/formatters/abstract.rb +10 -3
- data/lib/twine/formatters/android.rb +21 -12
- data/lib/twine/formatters/apple.rb +1 -1
- data/lib/twine/formatters/django.rb +7 -16
- data/lib/twine/formatters/flash.rb +0 -5
- data/lib/twine/formatters/gettext.rb +4 -14
- data/lib/twine/formatters/jquery.rb +5 -10
- data/lib/twine/placeholders.rb +7 -1
- data/lib/twine/plugin.rb +2 -1
- data/lib/twine/runner.rb +33 -14
- data/lib/twine/twine_file.rb +1 -1
- data/lib/twine/version.rb +1 -1
- data/test/fixtures/consume_localization_archive.zip +0 -0
- data/test/fixtures/formatter_django.po +5 -6
- data/test/fixtures/formatter_gettext.po +2 -2
- data/test/fixtures/formatter_gettext_quotes.po +10 -0
- data/test/test_cli.rb +27 -3
- data/test/test_consume_localization_archive.rb +13 -7
- data/test/test_formatters.rb +203 -11
- data/test/test_generate_all_localization_files.rb +24 -14
- data/test/test_generate_localization_archive.rb +9 -4
- data/test/test_placeholders.rb +21 -0
- data/test/test_validate_twine_file.rb +8 -0
- data/test/twine_test.rb +2 -2
- metadata +17 -17
@@ -24,10 +24,6 @@ class TestGenerateAllLocalizationFiles < CommandTest
|
|
24
24
|
def setup
|
25
25
|
super
|
26
26
|
Dir.mkdir File.join @output_dir, 'values-en'
|
27
|
-
|
28
|
-
# both Android and Tizen can handle folders containing `values-en`
|
29
|
-
android_formatter = prepare_mock_formatter(Twine::Formatters::Android)
|
30
|
-
tizen_formatter = prepare_mock_formatter(Twine::Formatters::Tizen, false)
|
31
27
|
end
|
32
28
|
|
33
29
|
def new_runner(options = {})
|
@@ -47,8 +43,8 @@ class TestGenerateAllLocalizationFiles < CommandTest
|
|
47
43
|
end
|
48
44
|
|
49
45
|
class TestDoNotCreateFolders < TestGenerateAllLocalizationFiles
|
50
|
-
def new_runner(twine_file = nil)
|
51
|
-
super(false, twine_file)
|
46
|
+
def new_runner(twine_file = nil, options = {})
|
47
|
+
super(false, twine_file, options)
|
52
48
|
end
|
53
49
|
|
54
50
|
def test_fails_if_output_folder_does_not_exist
|
@@ -60,39 +56,53 @@ class TestGenerateAllLocalizationFiles < CommandTest
|
|
60
56
|
def test_does_not_create_language_folders
|
61
57
|
Dir.mkdir File.join @output_dir, 'en.lproj'
|
62
58
|
new_runner.generate_all_localization_files
|
63
|
-
refute File.
|
59
|
+
refute File.exist?(File.join(@output_dir, 'es.lproj')), "language folder should not be created"
|
64
60
|
end
|
65
61
|
|
66
62
|
def test_prints_empty_file_warnings
|
67
63
|
Dir.mkdir File.join @output_dir, 'en.lproj'
|
68
64
|
empty_twine_file = build_twine_file('en') {}
|
69
65
|
new_runner(empty_twine_file).generate_all_localization_files
|
70
|
-
assert_match "Skipping file at path", Twine::
|
66
|
+
assert_match "Skipping file at path", Twine::stdout.string
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_does_not_print_empty_file_warnings_if_quite
|
70
|
+
Dir.mkdir File.join @output_dir, 'en.lproj'
|
71
|
+
empty_twine_file = build_twine_file('en') {}
|
72
|
+
new_runner(empty_twine_file, quite: true).generate_all_localization_files
|
73
|
+
refute_match "Skipping file at path", Twine::stdout.string
|
71
74
|
end
|
72
75
|
end
|
73
76
|
|
74
77
|
class TestCreateFolders < TestGenerateAllLocalizationFiles
|
75
|
-
def new_runner(twine_file = nil)
|
76
|
-
super(true, twine_file)
|
78
|
+
def new_runner(twine_file = nil, options = {})
|
79
|
+
super(true, twine_file, options)
|
77
80
|
end
|
78
81
|
|
79
82
|
def test_creates_output_folder
|
80
83
|
FileUtils.remove_entry_secure @output_dir
|
81
84
|
new_runner.generate_all_localization_files
|
82
|
-
assert File.
|
85
|
+
assert File.exist? @output_dir
|
83
86
|
end
|
84
87
|
|
85
88
|
def test_creates_language_folders
|
86
89
|
new_runner.generate_all_localization_files
|
87
|
-
assert File.
|
88
|
-
assert File.
|
90
|
+
assert File.exist?(File.join(@output_dir, 'en.lproj')), "language folder 'en.lproj' should be created"
|
91
|
+
assert File.exist?(File.join(@output_dir, 'es.lproj')), "language folder 'es.lproj' should be created"
|
89
92
|
end
|
90
93
|
|
91
94
|
def test_prints_empty_file_warnings
|
92
95
|
empty_twine_file = build_twine_file('en') {}
|
93
96
|
new_runner(empty_twine_file).generate_all_localization_files
|
94
97
|
|
95
|
-
assert_match "Skipping file at path", Twine::
|
98
|
+
assert_match "Skipping file at path", Twine::stdout.string
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_does_not_print_empty_file_warnings_if_quite
|
102
|
+
empty_twine_file = build_twine_file('en') {}
|
103
|
+
new_runner(empty_twine_file, quite: true).generate_all_localization_files
|
104
|
+
|
105
|
+
refute_match "Skipping file at path", Twine::stdout.string
|
96
106
|
end
|
97
107
|
end
|
98
108
|
|
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'command_test'
|
2
2
|
|
3
3
|
class TestGenerateLocalizationArchive < CommandTest
|
4
|
-
def new_runner(twine_file = nil)
|
5
|
-
options = {}
|
4
|
+
def new_runner(twine_file = nil, options = {})
|
6
5
|
options[:output_path] = @output_path
|
7
6
|
options[:format] = 'apple'
|
8
7
|
|
@@ -20,7 +19,7 @@ class TestGenerateLocalizationArchive < CommandTest
|
|
20
19
|
def test_generates_zip_file
|
21
20
|
new_runner.generate_localization_archive
|
22
21
|
|
23
|
-
assert File.
|
22
|
+
assert File.exist?(@output_path), "zip file should exist"
|
24
23
|
end
|
25
24
|
|
26
25
|
def test_zip_file_structure
|
@@ -45,7 +44,13 @@ class TestGenerateLocalizationArchive < CommandTest
|
|
45
44
|
def test_prints_empty_file_warnings
|
46
45
|
empty_twine_file = build_twine_file('en') {}
|
47
46
|
new_runner(empty_twine_file).generate_localization_archive
|
48
|
-
assert_match "Skipping file", Twine::
|
47
|
+
assert_match "Skipping file", Twine::stdout.string
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_does_not_print_empty_file_warnings_if_quite
|
51
|
+
empty_twine_file = build_twine_file('en') {}
|
52
|
+
new_runner(empty_twine_file, quite: true).generate_localization_archive
|
53
|
+
refute_match "Skipping file", Twine::stdout.string
|
49
54
|
end
|
50
55
|
|
51
56
|
class TestValidate < CommandTest
|
data/test/test_placeholders.rb
CHANGED
@@ -79,6 +79,10 @@ class PlaceholderTest < TwineTest
|
|
79
79
|
to_android("some %d second %2$f")
|
80
80
|
end
|
81
81
|
end
|
82
|
+
|
83
|
+
def test_complicated_float_placeholders
|
84
|
+
assert_equal "%1$.0f%2$s (apparent: %3$.0f)", to_android("%.0f%@ (apparent: %.0f)")
|
85
|
+
end
|
82
86
|
end
|
83
87
|
|
84
88
|
class FromAndroid < PlaceholderTest
|
@@ -118,4 +122,21 @@ class PlaceholderTest < TwineTest
|
|
118
122
|
assert_equal "some %@ more %@ text %@", from_flash("some {0} more {1} text {2}")
|
119
123
|
end
|
120
124
|
end
|
125
|
+
|
126
|
+
class PythonPlaceholder < PlaceholderTest
|
127
|
+
def test_negative_for_regular_placeholders
|
128
|
+
assert_equal false, Twine::Placeholders.contains_python_specific_placeholder(placeholder)
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_positive_for_named_placeholders
|
132
|
+
inputs = [
|
133
|
+
"%(language)s has",
|
134
|
+
"For %(number)03d quotes",
|
135
|
+
"bought on %(app_name)s"
|
136
|
+
]
|
137
|
+
inputs.each do |input|
|
138
|
+
assert_equal true, Twine::Placeholders.contains_python_specific_placeholder(input)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
121
142
|
end
|
@@ -58,4 +58,12 @@ class TestValidateTwineFile < CommandTest
|
|
58
58
|
Twine::Runner.new(@options.merge(pedantic: true), @twine_file).validate_twine_file
|
59
59
|
end
|
60
60
|
end
|
61
|
+
|
62
|
+
def test_reports_python_specific_placeholders
|
63
|
+
random_definition.translations["en"] = "%(python_only)s"
|
64
|
+
|
65
|
+
assert_raises Twine::Error do
|
66
|
+
Twine::Runner.new(@options, @twine_file).validate_twine_file
|
67
|
+
end
|
68
|
+
end
|
61
69
|
end
|
data/test/twine_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'erb'
|
2
2
|
require 'minitest/autorun'
|
3
|
-
require "mocha/
|
3
|
+
require "mocha/minitest"
|
4
4
|
require 'securerandom'
|
5
5
|
require 'stringio'
|
6
6
|
require 'twine'
|
@@ -23,7 +23,7 @@ class TwineTest < Minitest::Test
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def teardown
|
26
|
-
FileUtils.remove_entry_secure @output_dir if File.
|
26
|
+
FileUtils.remove_entry_secure @output_dir if File.exist? @output_dir
|
27
27
|
Twine::Formatters.formatters.clear
|
28
28
|
Twine::Formatters.formatters.concat @formatters
|
29
29
|
super
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Celis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: safe_yaml
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '13.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '13.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: minitest
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- test/fixtures/formatter_django.po
|
139
139
|
- test/fixtures/formatter_flash.properties
|
140
140
|
- test/fixtures/formatter_gettext.po
|
141
|
+
- test/fixtures/formatter_gettext_quotes.po
|
141
142
|
- test/fixtures/formatter_jquery.json
|
142
143
|
- test/fixtures/formatter_tizen.xml
|
143
144
|
- test/fixtures/gettext_multiline.po
|
@@ -157,7 +158,7 @@ files:
|
|
157
158
|
- test/test_validate_twine_file.rb
|
158
159
|
- test/twine_file_dsl.rb
|
159
160
|
- test/twine_test.rb
|
160
|
-
homepage: https://github.com/
|
161
|
+
homepage: https://github.com/scelis/twine
|
161
162
|
licenses:
|
162
163
|
- BSD-3-Clause
|
163
164
|
metadata: {}
|
@@ -169,29 +170,28 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
170
|
requirements:
|
170
171
|
- - ">="
|
171
172
|
- !ruby/object:Gem::Version
|
172
|
-
version: '2.
|
173
|
+
version: '2.4'
|
173
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
175
|
requirements:
|
175
176
|
- - ">="
|
176
177
|
- !ruby/object:Gem::Version
|
177
178
|
version: '0'
|
178
179
|
requirements: []
|
179
|
-
|
180
|
-
rubygems_version: 2.5.2
|
180
|
+
rubygems_version: 3.1.2
|
181
181
|
signing_key:
|
182
182
|
specification_version: 4
|
183
183
|
summary: Manage strings and their translations for your iOS, Android and other projects.
|
184
184
|
test_files:
|
185
|
+
- test/test_formatters.rb
|
186
|
+
- test/test_output_processor.rb
|
187
|
+
- test/test_consume_localization_file.rb
|
188
|
+
- test/test_consume_localization_archive.rb
|
185
189
|
- test/test_abstract_formatter.rb
|
186
190
|
- test/test_cli.rb
|
187
|
-
- test/
|
188
|
-
- test/
|
189
|
-
- test/test_formatters.rb
|
191
|
+
- test/test_twine_file.rb
|
192
|
+
- test/test_generate_localization_file.rb
|
190
193
|
- test/test_generate_all_localization_files.rb
|
191
194
|
- test/test_generate_localization_archive.rb
|
192
|
-
- test/test_generate_localization_file.rb
|
193
|
-
- test/test_output_processor.rb
|
194
|
-
- test/test_placeholders.rb
|
195
195
|
- test/test_twine_definition.rb
|
196
|
-
- test/
|
196
|
+
- test/test_placeholders.rb
|
197
197
|
- test/test_validate_twine_file.rb
|