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.
@@ -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: