tr8n_core 4.0.7 → 4.0.9
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/README.md +3 -3
- data/lib/tr8n/api_client.rb +28 -18
- data/lib/tr8n/application.rb +37 -64
- data/lib/tr8n/cache.rb +8 -41
- data/lib/tr8n/cache_adapters/file.rb +1 -2
- data/lib/tr8n/cache_adapters/memcache.rb +2 -2
- data/lib/tr8n/cache_adapters/redis.rb +2 -2
- data/lib/tr8n/config.rb +48 -13
- data/lib/tr8n/decorators/html.rb +3 -10
- data/lib/tr8n/language.rb +25 -112
- data/lib/tr8n/language_case.rb +1 -1
- data/lib/tr8n/session.rb +2 -9
- data/lib/tr8n/source.rb +12 -44
- data/lib/tr8n/{tokens/data_tokenizer.rb → tokenizers/data.rb} +4 -3
- data/lib/tr8n/{tokens/decoration_tokenizer.rb → tokenizers/decoration.rb} +6 -5
- data/lib/tr8n/tokenizers/dom.rb +346 -0
- data/lib/tr8n/tokens/data.rb +15 -22
- data/lib/tr8n/tokens/transform.rb +24 -12
- data/lib/tr8n/translation_key.rb +6 -29
- data/lib/tr8n/utils.rb +5 -0
- data/lib/tr8n_core/version.rb +1 -1
- data/lib/tr8n_core.rb +7 -26
- metadata +30 -100
- data/lib/tr8n/cache_adapters/cdb.rb +0 -87
- data/lib/tr8n/tokens/hidden.rb +0 -57
- data/spec/application_spec.rb +0 -52
- data/spec/base_spec.rb +0 -19
- data/spec/cache/adapters/file_spec.rb +0 -32
- data/spec/cache/adapters/memcache_spec.rb +0 -15
- data/spec/cache/generators/file_generator_spec.rb +0 -30
- data/spec/config_spec.rb +0 -32
- data/spec/decorator_spec.rb +0 -12
- data/spec/decorators/base_spec.rb +0 -14
- data/spec/decorators/default_spec.rb +0 -12
- data/spec/decorators/html_spec.rb +0 -50
- data/spec/ext/array_spec.rb +0 -12
- data/spec/ext/hash_spec.rb +0 -15
- data/spec/ext/string_spec.rb +0 -10
- data/spec/fixtures/application.json +0 -112
- data/spec/fixtures/languages/en-US.json +0 -1424
- data/spec/fixtures/languages/es.json +0 -291
- data/spec/fixtures/languages/ru.json +0 -582
- data/spec/fixtures/translations/ru/basic.json +0 -56
- data/spec/fixtures/translations/ru/counters.json +0 -43
- data/spec/fixtures/translations/ru/genders.json +0 -171
- data/spec/fixtures/translations/ru/last_names.txt +0 -200
- data/spec/fixtures/translations/ru/names.json +0 -1
- data/spec/fixtures/translations/ru/names.txt +0 -458
- data/spec/language_case_rule_spec.rb +0 -57
- data/spec/language_case_spec.rb +0 -58
- data/spec/language_context_rule_spec.rb +0 -75
- data/spec/language_context_spec.rb +0 -333
- data/spec/language_spec.rb +0 -615
- data/spec/logger_spec.rb +0 -15
- data/spec/rules_engine/evaluator_spec.rb +0 -150
- data/spec/rules_engine/parser_spec.rb +0 -31
- data/spec/source_spec.rb +0 -13
- data/spec/spec_helper.rb +0 -101
- data/spec/tokens/data_spec.rb +0 -114
- data/spec/tokens/data_tokenizer_spec.rb +0 -29
- data/spec/tokens/decoration_tokenizer_spec.rb +0 -81
- data/spec/tokens/hidden_spec.rb +0 -24
- data/spec/tokens/method_spec.rb +0 -84
- data/spec/tokens/transform_spec.rb +0 -50
- data/spec/translation_key_spec.rb +0 -96
- data/spec/translation_spec.rb +0 -24
- data/spec/utils_spec.rb +0 -62
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
|
|
5
|
-
describe Tr8n::Tokens::Transform do
|
|
6
|
-
#before do
|
|
7
|
-
# @app = init_application
|
|
8
|
-
# @english = @app.language('en-US')
|
|
9
|
-
# @tkey = Tr8n::TranslationKey.new({
|
|
10
|
-
# :label => "You have {count||message}",
|
|
11
|
-
# :application => @app,
|
|
12
|
-
# :locale => 'en-US'
|
|
13
|
-
# })
|
|
14
|
-
# @tlabel = @tkey.tokenized_label
|
|
15
|
-
#end
|
|
16
|
-
#
|
|
17
|
-
#describe "initialize" do
|
|
18
|
-
# it "should parse token info" do
|
|
19
|
-
# token = @tlabel.tokens.first
|
|
20
|
-
# expect(token.class.name).to eq("Tr8n::Tokens::Transform")
|
|
21
|
-
# expect(token.original_label).to eq(@tlabel.label)
|
|
22
|
-
# expect(token.full_name).to eq("{count||message}")
|
|
23
|
-
# expect(token.declared_name).to eq("count||message")
|
|
24
|
-
# expect(token.name).to eq("count")
|
|
25
|
-
# expect(token.sanitized_name).to eq("{count}")
|
|
26
|
-
# expect(token.name_key).to eq(:count)
|
|
27
|
-
# expect(token.pipeless_name).to eq("count")
|
|
28
|
-
# expect(token.case_key).to be_nil
|
|
29
|
-
# expect(token.supports_cases?).to be_truthy
|
|
30
|
-
# expect(token.has_case_key?).to be_falsey
|
|
31
|
-
# expect(token.caseless_name).to eq("count")
|
|
32
|
-
#
|
|
33
|
-
# expect(token.types).to be_nil
|
|
34
|
-
# expect(token.has_types?).to be_falsey
|
|
35
|
-
# expect(token.associated_rule_types).to eq([:number, :value])
|
|
36
|
-
# expect(token.language_rule_classes).to eq([Tr8n::Rules::Number, Tr8n::Rules::Value])
|
|
37
|
-
# expect(token.transformable_language_rule_classes).to eq([Tr8n::Rules::Number])
|
|
38
|
-
# expect(token.decoration?).to be_falsey
|
|
39
|
-
# end
|
|
40
|
-
#end
|
|
41
|
-
#
|
|
42
|
-
#describe "substitute" do
|
|
43
|
-
# it "should substitute values" do
|
|
44
|
-
# token = @tlabel.tokens.first
|
|
45
|
-
#
|
|
46
|
-
# end
|
|
47
|
-
#end
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
end
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
|
|
5
|
-
describe Tr8n::TranslationKey do
|
|
6
|
-
describe "#initialize" do
|
|
7
|
-
before do
|
|
8
|
-
@app = init_application
|
|
9
|
-
@english = @app.language('en-US')
|
|
10
|
-
@russian = @app.language('ru')
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "sets attributes" do
|
|
14
|
-
expect(Tr8n::TranslationKey.attributes).to eq([:application, :language, :id, :key, :label, :description, :locale, :level, :locked, :translations])
|
|
15
|
-
|
|
16
|
-
tkey = Tr8n::TranslationKey.new({
|
|
17
|
-
:label => "Hello World",
|
|
18
|
-
:application => @app
|
|
19
|
-
})
|
|
20
|
-
expect(tkey.locale).to eq("en-US")
|
|
21
|
-
expect(tkey.language.locale).to eq("en-US")
|
|
22
|
-
|
|
23
|
-
tkey = Tr8n::TranslationKey.new({
|
|
24
|
-
:label => "Hello World",
|
|
25
|
-
:application => @app,
|
|
26
|
-
:locale => 'en-US'
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
expect(tkey.id).to be_nil
|
|
30
|
-
expect(tkey.label).to eq("Hello World")
|
|
31
|
-
expect(tkey.description).to be_nil
|
|
32
|
-
expect(tkey.key).to eq("d541c79af1be6a05b1f16fca8b5730de")
|
|
33
|
-
expect(tkey.locale).to eq("en-US")
|
|
34
|
-
expect(tkey.language.locale).to eq("en-US")
|
|
35
|
-
expect(tkey.has_translations_for_language?(@russian)).to be_falsey
|
|
36
|
-
expect(tkey.translations_for_language(@russian)).to eq([])
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "translates labels correctly into default language" do
|
|
40
|
-
tkey = Tr8n::TranslationKey.new(:label => "Hello World", :application => @app)
|
|
41
|
-
expect(tkey.substitute_tokens("Hello World", {}, @english)).to eq("Hello World")
|
|
42
|
-
|
|
43
|
-
tkey = Tr8n::TranslationKey.new(:label => "Hello {user}", :application => @app)
|
|
44
|
-
expect(tkey.substitute_tokens("Hello {user1}", {:user => "Michael"}, @english)).to eq("Hello {user1}")
|
|
45
|
-
|
|
46
|
-
tkey = Tr8n::TranslationKey.new(:label => "Hello {user}", :application => @app)
|
|
47
|
-
expect(tkey.substitute_tokens("Hello {user}", {:user => "Michael"}, @english)).to eq("Hello Michael")
|
|
48
|
-
|
|
49
|
-
tkey = Tr8n::TranslationKey.new(:label => "Hello {user1} and {user2}", :application => @app)
|
|
50
|
-
expect(tkey.substitute_tokens("Hello {user1} and {user2}", {:user1 => "Michael" , :user2 => "Tom"}, @english)).to eq("Hello Michael and Tom")
|
|
51
|
-
|
|
52
|
-
tkey = Tr8n::TranslationKey.new(:label => "Hello {user}", :application => @app)
|
|
53
|
-
expect(tkey.substitute_tokens("Hello {user}", {:user => {:object => {:name => "Michael"}, :value => "Michael"}}, @english)).to eq("Hello Michael")
|
|
54
|
-
|
|
55
|
-
tkey = Tr8n::TranslationKey.new(:label => "Hello {user}", :application => @app)
|
|
56
|
-
expect(tkey.substitute_tokens("Hello {user}", {:user => {:object => {:name => "Michael"}, :attribute => "name"}}, @english)).to eq("Hello Michael")
|
|
57
|
-
|
|
58
|
-
tkey = Tr8n::TranslationKey.new(:label => "Hello {user}", :application => @app)
|
|
59
|
-
expect(tkey.substitute_tokens("Hello {user}", {:user => {:object => double(:name => "Michael"), :attribute => "name"}}, @english)).to eq("Hello Michael")
|
|
60
|
-
|
|
61
|
-
tkey = Tr8n::TranslationKey.new(:label => "Hello {user1} [bold: and] {user2}", :application => @app)
|
|
62
|
-
expect(tkey.substitute_tokens("Hello {user1} [bold: and] {user2}", {:user1 => "Michael" , :user2 => "Tom"}, @english)).to eq("Hello Michael <strong>and</strong> Tom")
|
|
63
|
-
|
|
64
|
-
tkey = Tr8n::TranslationKey.new(:label => "You have [link: [bold: {count}] messages]", :application => @app)
|
|
65
|
-
expect(tkey.substitute_tokens("You have [link: [bold: {count}] messages]", {:count => 5, :link => {:href => "www.google.com"}}, @english)).to eq("You have <a href='www.google.com'><strong>5</strong> messages</a>")
|
|
66
|
-
|
|
67
|
-
tkey = Tr8n::TranslationKey.new(:label => "You have [link][bold: {count}] messages[/link]", :application => @app)
|
|
68
|
-
expect(tkey.substitute_tokens("You have [link][bold: {count}] messages[/link]", {:count => 5, :link => {:href => "www.google.com"}}, @english)).to eq("You have <a href='www.google.com'><strong>5</strong> messages</a>")
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
context "labels with numeric rules" do
|
|
72
|
-
it "should return correct translations" do
|
|
73
|
-
key = Tr8n::TranslationKey.new(:label => "You have {count||message}.", :application => @app)
|
|
74
|
-
key.set_language_translations(@russian, [
|
|
75
|
-
Tr8n::Translation.new(:label => "U vas est {count} soobshenie.", :context => {"count" => {"number" => "one"}}),
|
|
76
|
-
Tr8n::Translation.new(:label => "U vas est {count} soobsheniya.", :context => {"count" => {"number" => "few"}}),
|
|
77
|
-
Tr8n::Translation.new(:label => "U vas est {count} soobshenii.", :context => {"count" => {"number" => "many"}}),
|
|
78
|
-
])
|
|
79
|
-
|
|
80
|
-
expect(key.translate(@russian, {:count => 1})).to eq("U vas est 1 soobshenie.")
|
|
81
|
-
expect(key.translate(@russian, {:count => 101})).to eq("U vas est 101 soobshenie.")
|
|
82
|
-
expect(key.translate(@russian, {:count => 11})).to eq("U vas est 11 soobshenii.")
|
|
83
|
-
expect(key.translate(@russian, {:count => 111})).to eq("U vas est 111 soobshenii.")
|
|
84
|
-
|
|
85
|
-
expect(key.translate(@russian, {:count => 5})).to eq("U vas est 5 soobshenii.")
|
|
86
|
-
expect(key.translate(@russian, {:count => 26})).to eq("U vas est 26 soobshenii.")
|
|
87
|
-
expect(key.translate(@russian, {:count => 106})).to eq("U vas est 106 soobshenii.")
|
|
88
|
-
|
|
89
|
-
expect(key.translate(@russian, {:count => 3})).to eq("U vas est 3 soobsheniya.")
|
|
90
|
-
expect(key.translate(@russian, {:count => 13})).to eq("U vas est 13 soobshenii.")
|
|
91
|
-
expect(key.translate(@russian, {:count => 23})).to eq("U vas est 23 soobsheniya.")
|
|
92
|
-
expect(key.translate(@russian, {:count => 103})).to eq("U vas est 103 soobsheniya.")
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
end
|
data/spec/translation_spec.rb
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
|
|
5
|
-
describe Tr8n::Translation do
|
|
6
|
-
describe "initialize" do
|
|
7
|
-
before do
|
|
8
|
-
@app = init_application
|
|
9
|
-
@english = @app.language('en-US')
|
|
10
|
-
@russian = @app.language('ru')
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "sets attributes" do
|
|
14
|
-
expect(Tr8n::Translation.attributes).to eq([:translation_key, :language, :locale, :label, :context, :precedence])
|
|
15
|
-
|
|
16
|
-
t = Tr8n::Translation.new(:label => "You have {count||message}", :context => {"count" => {"number" => "one"}}, :language => @russian)
|
|
17
|
-
|
|
18
|
-
[1, 101, 1001].each do |count|
|
|
19
|
-
expect(t.matches_rules?(:count => count)).to be_truthy
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
data/spec/utils_spec.rb
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
|
|
5
|
-
describe Tr8n::Utils do
|
|
6
|
-
describe "helper methods" do
|
|
7
|
-
it "should return correct values" do
|
|
8
|
-
|
|
9
|
-
expect(
|
|
10
|
-
Tr8n::Utils.normalize_tr_params("Hello {user}", "Sample label", {:user => "Michael"}, {})
|
|
11
|
-
).to eq(
|
|
12
|
-
{:label=>"Hello {user}", :description=>"Sample label", :tokens=>{:user=>"Michael"}, :options=>{}}
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
expect(
|
|
16
|
-
Tr8n::Utils.normalize_tr_params("Hello {user}", {:user => "Michael"}, nil, nil)
|
|
17
|
-
).to eq(
|
|
18
|
-
{:label=>"Hello {user}", :description=>nil, :tokens=>{:user=>"Michael"}, :options=>nil}
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
expect(
|
|
22
|
-
Tr8n::Utils.normalize_tr_params("Hello {user}", {:user => "Michael"}, {:skip_decoration => true}, nil)
|
|
23
|
-
).to eq(
|
|
24
|
-
{:label=>"Hello {user}", :description=>nil, :tokens=>{:user=>"Michael"}, :options=>{:skip_decoration=>true}}
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
expect(
|
|
28
|
-
Tr8n::Utils.normalize_tr_params({:label=>"Hello {user}", :description=>"Sample label", :tokens=>{:user=>"Michael"}, :options=>{}}, nil, nil, nil)
|
|
29
|
-
).to eq(
|
|
30
|
-
{:label=>"Hello {user}", :description=>"Sample label", :tokens=>{:user=>"Michael"}, :options=>{}}
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
expect(Tr8n::Utils.guid.class).to be(String)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "should correctly split by sentence" do
|
|
37
|
-
|
|
38
|
-
expect(
|
|
39
|
-
Tr8n::Utils.split_by_sentence("Hello World")
|
|
40
|
-
).to eq(
|
|
41
|
-
["Hello World"]
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
expect(
|
|
45
|
-
Tr8n::Utils.split_by_sentence("This is the first sentence. Followed by the second one.")
|
|
46
|
-
).to eq(
|
|
47
|
-
["This is the first sentence.", "Followed by the second one."]
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should correctly sign and verify signature" do
|
|
53
|
-
data = {"name" => "Michael"}
|
|
54
|
-
key = "abc"
|
|
55
|
-
|
|
56
|
-
request = Tr8n::Utils.sign_and_encode_params(data, key)
|
|
57
|
-
result = Tr8n::Utils.decode_and_verify_params(request, key)
|
|
58
|
-
expect(result["name"]).to eq(data["name"])
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
62
|
-
end
|