slang 0.34.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 +7 -0
- data/.gitignore +6 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +28 -0
- data/LICENSE.md +20 -0
- data/README.md +242 -0
- data/Rakefile +12 -0
- data/lib/slang.rb +144 -0
- data/lib/slang/internal.rb +139 -0
- data/lib/slang/railtie.rb +16 -0
- data/lib/slang/snapshot.rb +131 -0
- data/lib/slang/snapshot/locale.rb +35 -0
- data/lib/slang/snapshot/rules.rb +239 -0
- data/lib/slang/snapshot/template.rb +58 -0
- data/lib/slang/snapshot/translation.rb +135 -0
- data/lib/slang/snapshot/warnings.rb +102 -0
- data/lib/slang/updater/abstract.rb +74 -0
- data/lib/slang/updater/development.rb +88 -0
- data/lib/slang/updater/http_helpers.rb +49 -0
- data/lib/slang/updater/key_reporter.rb +92 -0
- data/lib/slang/updater/production.rb +218 -0
- data/lib/slang/updater/shared_state.rb +59 -0
- data/lib/slang/updater/squelchable.rb +45 -0
- data/lib/slang/version.rb +3 -0
- data/slang.gemspec +20 -0
- data/test/data/snapshot.json +64 -0
- data/test/helper.rb +4 -0
- data/test/test_locale.rb +47 -0
- data/test/test_rules.rb +133 -0
- data/test/test_snapshot.rb +132 -0
- data/test/test_template.rb +49 -0
- data/test/test_translation.rb +94 -0
- data/test/test_warnings.rb +123 -0
- metadata +99 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
# TODO: test KEY_REGEX
|
2
|
+
require "helper"
|
3
|
+
|
4
|
+
module Slang
|
5
|
+
class TestTranslation < Minitest::Test
|
6
|
+
Locale = Snapshot::Locale
|
7
|
+
Translation = Snapshot::Translation
|
8
|
+
|
9
|
+
parallelize_me!
|
10
|
+
|
11
|
+
def setup
|
12
|
+
simple_key = [ "simple_key", "",
|
13
|
+
"lang0",
|
14
|
+
"lang1",
|
15
|
+
"" # missing template
|
16
|
+
]
|
17
|
+
rule_key = [ "rule_key", "gender=G",
|
18
|
+
[ "female", "Hey girl", "male", "Hey guy", "unknown", "Hey there" ],
|
19
|
+
[ "female", "Yo girl", "male", "Yo guy", "unknown", "Yo there" ],
|
20
|
+
[] # missing rule templates
|
21
|
+
]
|
22
|
+
multi_rule_key = [ "apples_bananas", "apples=N:bananas=N",
|
23
|
+
[
|
24
|
+
"one:one", "I'll eat one apple and one banana.",
|
25
|
+
"one:other", "I'll eat one apple, and then I'll eat {bananas} bananas.",
|
26
|
+
"one:zero", "I'll eat one apple, but no bananas.",
|
27
|
+
"other:one", "I'll eat {apples} apples, but just one banana.",
|
28
|
+
"other:other", "I'll eat {apples} apples and {bananas} bananas.",
|
29
|
+
"other:zero", "I'll eat {apples} apples, but no bananas.",
|
30
|
+
"zero:one", "I don't like apples, but I'll eat a banana.",
|
31
|
+
"zero:other", "I don't like apples, but I'll eat {bananas} bananas.",
|
32
|
+
"zero:zero", "I don't like to eat apples nor bananas."
|
33
|
+
],
|
34
|
+
[], # missing
|
35
|
+
[] # missing
|
36
|
+
]
|
37
|
+
interpolated_key = [ "interpolated_key", "", "Hi {a}", "Yo {a}", "", "" ]
|
38
|
+
unknown_rule_key = [ "unknown_rule", "foo=X", [], [] ]
|
39
|
+
|
40
|
+
@simple = Translation.new(simple_key)
|
41
|
+
@rule = Translation.new(rule_key)
|
42
|
+
@multi = Translation.new(multi_rule_key)
|
43
|
+
@interpolated = Translation.new(interpolated_key)
|
44
|
+
@unknown_rule = Translation.new(unknown_rule_key)
|
45
|
+
|
46
|
+
@locale0 = Locale.new(["en",nil,"one_other",true], 0)
|
47
|
+
@locale1 = Locale.new(["en",nil,"one_other",true], 1)
|
48
|
+
@locale2 = Locale.new(["en",nil,"one_other",true], 2)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_initialize
|
52
|
+
assert_equal("simple_key", @simple.key)
|
53
|
+
assert_empty(@simple.rule_pattern)
|
54
|
+
assert_empty(@simple.rules)
|
55
|
+
|
56
|
+
assert_equal("rule_key", @rule.key)
|
57
|
+
assert_equal("gender=G", @rule.rule_pattern)
|
58
|
+
assert_equal([[ "gender", :gender ]], @rule.rules)
|
59
|
+
|
60
|
+
assert_equal("apples_bananas", @multi.key)
|
61
|
+
assert_equal("apples=N:bananas=N", @multi.rule_pattern)
|
62
|
+
assert_equal([[ "apples", :pluralization ], [ "bananas", :pluralization ]], @multi.rules)
|
63
|
+
|
64
|
+
assert_equal("interpolated_key", @interpolated.key)
|
65
|
+
assert_empty(@interpolated.rule_pattern)
|
66
|
+
assert_empty(@interpolated.rules)
|
67
|
+
|
68
|
+
assert_nil(@unknown_rule.rules)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_evaluate
|
72
|
+
assert_equal([:success, "lang1"], @simple.evaluate(@locale1, {}))
|
73
|
+
assert_equal([:success, "Yo girl"], @rule.evaluate(@locale1, { "gender" => :female }))
|
74
|
+
assert_equal([:success, "Yo dog"], @interpolated.evaluate(@locale1, { "a" => "dog" }))
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_evaluate_missing_template
|
78
|
+
assert_equal([:missing_template], @simple.evaluate(@locale2, {}))
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_evaluate_missing_interpolation_variables
|
82
|
+
assert_equal([:missing_interpolation_variables, "Yo {a}", [ "a" ], nil], @interpolated.evaluate(@locale1, {}))
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_evaluate_missing_rule_variables
|
86
|
+
assert_equal([:missing_rule_variables, "{{en:rule_key:<gender>}}", [ "gender" ]], @rule.evaluate(@locale1, {}))
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_evaluate_missing_rule_templates
|
90
|
+
assert_equal([:missing_rule_templates, "{{en:rule_key:[female]}}", [ "female" ]], @rule.evaluate(@locale2, { "gender" => :female }))
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Slang
|
4
|
+
class TestWarnings < Minitest::Test
|
5
|
+
Locale = Snapshot::Locale
|
6
|
+
parallelize_me!
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@warnings = Snapshot.from_json(Snapshot::EMPTY_SNAPSHOT_JSON)
|
10
|
+
@locale = Locale.new(["de", "en", "one_other", true, "german"], 0)
|
11
|
+
def Slang.logger; Logger.new(StringIO.new); end # ignore logging
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_no_warnings
|
15
|
+
assert_empty(@warnings.warnings)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_missing_key
|
19
|
+
Time.stub :now, Time.at(1406578476) do
|
20
|
+
@warnings.missing_key!(@locale, "foo", a: "a")
|
21
|
+
end
|
22
|
+
h = @warnings.warnings["1:de:foo"]
|
23
|
+
refute_nil(h)
|
24
|
+
assert_equal(1, h[:warning])
|
25
|
+
assert_equal(:de, h[:locale])
|
26
|
+
assert_equal("foo", h[:key])
|
27
|
+
assert_equal([:a], h[:passed_variables])
|
28
|
+
assert_equal(1406578476, h[:timestamp])
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_missing_key_ignore_duplicate
|
32
|
+
Time.stub :now, Time.at(1406578476) do
|
33
|
+
@warnings.missing_key!(@locale, "foo", a: "a")
|
34
|
+
end
|
35
|
+
Time.stub :now, Time.at(0) do
|
36
|
+
@warnings.missing_key!(@locale, "foo", a: "a")
|
37
|
+
end
|
38
|
+
h = @warnings.warnings["1:de:foo"]
|
39
|
+
refute_nil(h)
|
40
|
+
assert_equal(1406578476, h[:timestamp])
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_missing_interpolation_variables
|
44
|
+
Time.stub :now, Time.at(1406578476) do
|
45
|
+
@warnings.missing_interpolation_variables!(@locale, "foo", "selector", %w(var1 var2), a: "a")
|
46
|
+
end
|
47
|
+
h = @warnings.warnings["2:de:foo:selector:var1,var2"]
|
48
|
+
refute_nil(h)
|
49
|
+
assert_equal(2, h[:warning])
|
50
|
+
assert_equal(:de, h[:locale])
|
51
|
+
assert_equal("foo", h[:key])
|
52
|
+
assert_equal("selector", h[:selector])
|
53
|
+
assert_equal(["var1", "var2"], h[:missing_variables])
|
54
|
+
assert_equal([:a], h[:passed_variables])
|
55
|
+
assert_equal(1406578476, h[:timestamp])
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_missing_interpolation_variables_ignore_duplicate
|
59
|
+
Time.stub :now, Time.at(1406578476) do
|
60
|
+
@warnings.missing_interpolation_variables!(@locale, "foo", "selector", %w(var1 var2), a: "a")
|
61
|
+
end
|
62
|
+
Time.stub :now, Time.at(0) do
|
63
|
+
@warnings.missing_interpolation_variables!(@locale, "foo", "selector", %w(var1 var2), a: "a")
|
64
|
+
end
|
65
|
+
h = @warnings.warnings["2:de:foo:selector:var1,var2"]
|
66
|
+
refute_nil(h)
|
67
|
+
assert_equal(1406578476, h[:timestamp])
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_missing_rule_variables
|
71
|
+
Time.stub :now, Time.at(1406578476) do
|
72
|
+
@warnings.missing_rule_variables!(@locale, "foo", %w(var1 var2), a: "a")
|
73
|
+
end
|
74
|
+
h = @warnings.warnings["3:de:foo:var1,var2"]
|
75
|
+
refute_nil(h)
|
76
|
+
assert_equal(3, h[:warning])
|
77
|
+
assert_equal(:de, h[:locale])
|
78
|
+
assert_equal("foo", h[:key])
|
79
|
+
assert_equal(["var1", "var2"], h[:missing_variables])
|
80
|
+
assert_equal([:a], h[:passed_variables])
|
81
|
+
assert_equal(1406578476, h[:timestamp])
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_missing_rule_variables_ignore_duplicate
|
85
|
+
Time.stub :now, Time.at(1406578476) do
|
86
|
+
@warnings.missing_rule_variables!(@locale, "foo", %w(var1 var2), a: "a")
|
87
|
+
end
|
88
|
+
Time.stub :now, Time.at(0) do
|
89
|
+
@warnings.missing_rule_variables!(@locale, "foo", %w(var1 var2), a: "a")
|
90
|
+
end
|
91
|
+
h = @warnings.warnings["3:de:foo:var1,var2"]
|
92
|
+
refute_nil(h)
|
93
|
+
assert_equal(1406578476, h[:timestamp])
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_missing_rule_templates
|
97
|
+
Time.stub :now, Time.at(1406578476) do
|
98
|
+
@warnings.missing_rule_templates!(@locale, "foo", %w(zero other), a: "a")
|
99
|
+
end
|
100
|
+
h = @warnings.warnings["4:de:foo:zero,other"]
|
101
|
+
refute_nil(h)
|
102
|
+
assert_equal(4, h[:warning])
|
103
|
+
assert_equal(:de, h[:locale])
|
104
|
+
assert_equal("foo", h[:key])
|
105
|
+
assert_equal(%w(zero other), h[:missing_templates])
|
106
|
+
assert_equal([:a], h[:passed_variables])
|
107
|
+
assert_equal(1406578476, h[:timestamp])
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_missing_rule_templates_ignore_duplicate
|
111
|
+
Time.stub :now, Time.at(1406578476) do
|
112
|
+
@warnings.missing_rule_templates!(@locale, "foo", %w(zero other), a: "a")
|
113
|
+
end
|
114
|
+
Time.stub :now, Time.at(0) do
|
115
|
+
@warnings.missing_rule_templates!(@locale, "foo", %w(zero other), a: "a")
|
116
|
+
end
|
117
|
+
h = @warnings.warnings["4:de:foo:zero,other"]
|
118
|
+
refute_nil(h)
|
119
|
+
assert_equal(1406578476, h[:timestamp])
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: slang
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.34.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adrian B. Danieli
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: oj
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.12'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.12'
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
- support@getslang.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".gitignore"
|
35
|
+
- CHANGELOG.md
|
36
|
+
- Gemfile
|
37
|
+
- Gemfile.lock
|
38
|
+
- LICENSE.md
|
39
|
+
- README.md
|
40
|
+
- Rakefile
|
41
|
+
- lib/slang.rb
|
42
|
+
- lib/slang/internal.rb
|
43
|
+
- lib/slang/railtie.rb
|
44
|
+
- lib/slang/snapshot.rb
|
45
|
+
- lib/slang/snapshot/locale.rb
|
46
|
+
- lib/slang/snapshot/rules.rb
|
47
|
+
- lib/slang/snapshot/template.rb
|
48
|
+
- lib/slang/snapshot/translation.rb
|
49
|
+
- lib/slang/snapshot/warnings.rb
|
50
|
+
- lib/slang/updater/abstract.rb
|
51
|
+
- lib/slang/updater/development.rb
|
52
|
+
- lib/slang/updater/http_helpers.rb
|
53
|
+
- lib/slang/updater/key_reporter.rb
|
54
|
+
- lib/slang/updater/production.rb
|
55
|
+
- lib/slang/updater/shared_state.rb
|
56
|
+
- lib/slang/updater/squelchable.rb
|
57
|
+
- lib/slang/version.rb
|
58
|
+
- slang.gemspec
|
59
|
+
- test/data/snapshot.json
|
60
|
+
- test/helper.rb
|
61
|
+
- test/test_locale.rb
|
62
|
+
- test/test_rules.rb
|
63
|
+
- test/test_snapshot.rb
|
64
|
+
- test/test_template.rb
|
65
|
+
- test/test_translation.rb
|
66
|
+
- test/test_warnings.rb
|
67
|
+
homepage: https://getslang.com/
|
68
|
+
licenses: []
|
69
|
+
metadata: {}
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 2.0.0
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 2.4.5
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Slang Ruby Client
|
90
|
+
test_files:
|
91
|
+
- test/data/snapshot.json
|
92
|
+
- test/helper.rb
|
93
|
+
- test/test_locale.rb
|
94
|
+
- test/test_rules.rb
|
95
|
+
- test/test_snapshot.rb
|
96
|
+
- test/test_template.rb
|
97
|
+
- test/test_translation.rb
|
98
|
+
- test/test_warnings.rb
|
99
|
+
has_rdoc:
|