tr8n_core 4.0.7 → 4.0.9
Sign up to get free protection for your applications and to get access to all the features.
- 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,150 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Tr8n::RulesEngine::Evaluator do
|
6
|
-
describe "#evaluator" do
|
7
|
-
it "evaluates standard expressions" do
|
8
|
-
e = Tr8n::RulesEngine::Evaluator.new
|
9
|
-
e.evaluate(["label", "greeting", "hello world"])
|
10
|
-
expect(e.vars).to eq({"greeting"=>"hello world"})
|
11
|
-
|
12
|
-
expect(e.evaluate(["quote", [1,2,3]])).to eq([1,2,3])
|
13
|
-
expect(e.evaluate(["quote", ["a","b","c"]])).to eq(["a","b","c"])
|
14
|
-
|
15
|
-
expect(e.evaluate(["car", ["+", 1, 2]])).to eq(1)
|
16
|
-
expect(e.evaluate(["cdr", ["+", 1, 2]])).to eq([1, 2])
|
17
|
-
expect(e.evaluate(["cons", 1, ["quote", [2, 3]]])).to eq([1, 2, 3])
|
18
|
-
|
19
|
-
expect(e.evaluate(["eq", 1, 1])).to be_truthy
|
20
|
-
|
21
|
-
expect(e.evaluate(["atom", :a])).to be_truthy
|
22
|
-
expect(e.evaluate(["atom", "hello"])).to be_truthy
|
23
|
-
expect(e.evaluate(["atom", 1])).to be_truthy
|
24
|
-
expect(e.evaluate(["atom", 1.4])).to be_truthy
|
25
|
-
expect(e.evaluate(["atom", ["eq", 1, 1]])).to be_falsey
|
26
|
-
|
27
|
-
expect(e.evaluate(["cond", ["eq", 1, 1], 1, 0])).to eq(1)
|
28
|
-
expect(e.evaluate(["cond", ["eq", 1, 2], 1, 0])).to eq(0)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "evaluates rules" do
|
32
|
-
e = Tr8n::RulesEngine::Evaluator.new
|
33
|
-
expect(e.evaluate(["=", "1", "1"])).to be_truthy
|
34
|
-
expect(e.evaluate(["=", "1", "2"])).to be_falsey
|
35
|
-
|
36
|
-
expect(e.evaluate(["!=", "2", "1"])).to be_truthy
|
37
|
-
expect(e.evaluate(["!=", "2", "2"])).to be_falsey
|
38
|
-
|
39
|
-
expect(e.evaluate([">", "2", "1"])).to be_truthy
|
40
|
-
expect(e.evaluate([">", "1", "2"])).to be_falsey
|
41
|
-
|
42
|
-
expect(e.evaluate(["<", "2", "3"])).to be_truthy
|
43
|
-
expect(e.evaluate(["<", "3", "2"])).to be_falsey
|
44
|
-
|
45
|
-
expect(e.evaluate(["+", 1, 2])).to eq(3)
|
46
|
-
expect(e.evaluate(["+", -1, 2])).to eq(1)
|
47
|
-
|
48
|
-
expect(e.evaluate(["-", 2, 1])).to eq(1)
|
49
|
-
expect(e.evaluate(["*", 2, 10])).to eq(20)
|
50
|
-
expect(e.evaluate(["/", 20, 10])).to eq(2)
|
51
|
-
|
52
|
-
expect(e.evaluate(["!", ["=", "1", "2"]])).to be_truthy
|
53
|
-
|
54
|
-
expect(e.evaluate(["&&", ["=", "1", "1"], ["=", 10, ["/", 20, 2]]])).to be_truthy
|
55
|
-
expect(e.evaluate(["||", ["=", "2", "1"], ["=", 10, ["/", 20, 2]]])).to be_truthy
|
56
|
-
|
57
|
-
expect(e.evaluate(["if", ["=", 1, 2], 1, 0])).to eq(0)
|
58
|
-
|
59
|
-
e.evaluate(["let", "@n", 1])
|
60
|
-
expect(e.vars).to eq({"@n"=>1})
|
61
|
-
expect(e.evaluate(["=", 1, "@n"])).to be_truthy
|
62
|
-
|
63
|
-
e.evaluate(["let", "@n", 11])
|
64
|
-
expect(e.vars).to eq({"@n"=>11})
|
65
|
-
expect(e.evaluate(["=", 11, "@n"])).to be_truthy
|
66
|
-
|
67
|
-
expect(e.evaluate(["and", ["=", "1", "1"], ["=", 10, ["/", 20, 2]]])).to be_truthy
|
68
|
-
expect(e.evaluate(["or", ["=", "2", "1"], ["=", 10, ["/", 20, 2]]])).to be_truthy
|
69
|
-
|
70
|
-
expect(e.evaluate(["mod", 23, 10])).to eq(3)
|
71
|
-
expect(e.evaluate(["mod", 2.3, 10])).to eq(2.3)
|
72
|
-
|
73
|
-
expect(e.evaluate(["match", "/hello/", "hello world"])).to be_truthy
|
74
|
-
expect(e.evaluate(["match", "hello", "hello world"])).to be_truthy
|
75
|
-
expect(e.evaluate(["match", "/^h/", "hello world"])).to be_truthy
|
76
|
-
expect(e.evaluate(["match", "/^e/", "hello world"])).to be_falsey
|
77
|
-
expect(e.evaluate(["match", "/^h.*d$/", "hello world"])).to be_truthy
|
78
|
-
|
79
|
-
expect(e.evaluate(["in", "1,2", "1"])).to be_truthy
|
80
|
-
expect(e.evaluate(["in", "1,2", 1])).to be_truthy
|
81
|
-
expect(e.evaluate(["in", "a,b,c", "a"])).to be_truthy
|
82
|
-
expect(e.evaluate(["in", "a..c, d..z", "h"])).to be_truthy
|
83
|
-
|
84
|
-
expect(e.evaluate(["in", "1..5, 10..22", 21])).to be_truthy
|
85
|
-
expect(e.evaluate(["in", "1..5, 10..22", 22])).to be_truthy
|
86
|
-
expect(e.evaluate(["in", "1..5, 10..22", 1])).to be_truthy
|
87
|
-
expect(e.evaluate(["in", "1..5, 10..22", 23])).to be_falsey
|
88
|
-
expect(e.evaluate(["in", "1..5, 10..22", "9"])).to be_falsey
|
89
|
-
|
90
|
-
expect(e.evaluate(["within", "1..3", 2.3])).to be_truthy
|
91
|
-
expect(e.evaluate(["within", "1..3", 3.3])).to be_falsey
|
92
|
-
|
93
|
-
expect(e.evaluate(["replace", "/^hello/", "hi", "hello world"])).to eq("hi world")
|
94
|
-
expect(e.evaluate(["replace", "world", "hi", "hello world"])).to eq("hello hi")
|
95
|
-
expect(e.evaluate(["replace", "o", "a", "hello world"])).to eq("hella warld")
|
96
|
-
expect(e.evaluate(["replace", "/world$/", "moon", "hello moon"])).to eq("hello moon")
|
97
|
-
|
98
|
-
expect(e.evaluate(["append", "world", "hello "])).to eq("hello world")
|
99
|
-
expect(e.evaluate(["prepend", "hello ", "world"])).to eq("hello world")
|
100
|
-
|
101
|
-
expect(e.evaluate(["true"])).to be_truthy
|
102
|
-
expect(e.evaluate(["false"])).to be_falsey
|
103
|
-
|
104
|
-
expect(e.evaluate(["date", "2011-01-01"])).to eq(Date.new(2011, 1, 1))
|
105
|
-
expect(e.evaluate(["today"])).to eq(Date.today)
|
106
|
-
|
107
|
-
expect(e.evaluate(["time", "2011-01-01 10:9:8"])).to eq(Time.new(2011, 1, 1, 10, 9, 8))
|
108
|
-
|
109
|
-
expect(e.evaluate([">", ["date", "3014-01-01"], ["today"]])).to be_truthy
|
110
|
-
end
|
111
|
-
|
112
|
-
it "evaluates expressions" do
|
113
|
-
e = Tr8n::RulesEngine::Evaluator.new
|
114
|
-
|
115
|
-
e.evaluate(["let", "@n", 1])
|
116
|
-
expect(e.evaluate(["&&", ["=", 1, ["mod", "@n", 10]], ["!=", 11, ["mod", "@n", 100]]])).to be_truthy
|
117
|
-
expect(e.evaluate(["&&", ["in", "2..4", ["mod", "@n", 10]], ["not", ["in", "12..14", ["mod", "@n", 100]]]])).to be_falsey
|
118
|
-
expect(e.evaluate(["||", ["=", 0, ["mod", "@n", 10]], ["in", "5..9", ["mod", "@n", 10]], ["in", "11..14", ["mod", "@n", 100]]])).to be_falsey
|
119
|
-
|
120
|
-
e.evaluate(["let", "@n", 21])
|
121
|
-
expect(e.evaluate(["&&", ["=", 1, ["mod", "@n", 10]], ["!=", 11, ["mod", "@n", 100]]])).to be_truthy
|
122
|
-
expect(e.evaluate(["&&", ["in", "2..4", ["mod", "@n", 10]], ["not", ["in", "12..14", ["mod", "@n", 100]]]])).to be_falsey
|
123
|
-
expect(e.evaluate(["||", ["=", 0, ["mod", "@n", 10]], ["in", "5..9", ["mod", "@n", 10]], ["in", "11..14", ["mod", "@n", 100]]])).to be_falsey
|
124
|
-
|
125
|
-
e.evaluate(["let", "@n", 11])
|
126
|
-
expect(e.evaluate(["&&", ["=", 1, ["mod", "@n", 10]], ["!=", 11, ["mod", "@n", 100]]])).to be_falsey
|
127
|
-
expect(e.evaluate(["&&", ["in", "2..4", ["mod", "@n", 10]], ["not", ["in", "12..14", ["mod", "@n", 100]]]])).to be_falsey
|
128
|
-
expect(e.evaluate(["||", ["=", 0, ["mod", "@n", 10]], ["in", "5..9", ["mod", "@n", 10]], ["in", "11..14", ["mod", "@n", 100]]])).to be_truthy
|
129
|
-
|
130
|
-
rules = {
|
131
|
-
"one" => ["&&", ["=", 1, ["mod", "@n", 10]], ["!=", 11, ["mod", "@n", 100]]],
|
132
|
-
"few" => ["&&", ["in", "2..4", ["mod", "@n", 10]], ["not", ["in", "12..14", ["mod", "@n", 100]]]],
|
133
|
-
"many" => ["||", ["=", 0, ["mod", "@n", 10]], ["in", "5..9", ["mod", "@n", 10]], ["in", "11..14", ["mod", "@n", 100]]]
|
134
|
-
}
|
135
|
-
|
136
|
-
{
|
137
|
-
"one" => [1, 21, 31, 41, 51, 61],
|
138
|
-
"few" => [2,3,4, 22,23,24, 32,33,34],
|
139
|
-
"many" => [0, 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, 25,26,27,28,29,30, 35,36,37,38,39,40]
|
140
|
-
}.each do |key, values|
|
141
|
-
values.each do |value|
|
142
|
-
e.evaluate(["let", "@n", value])
|
143
|
-
expect(e.evaluate(rules[key])).to be_truthy
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
end
|
150
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Tr8n::RulesEngine::Parser do
|
6
|
-
describe "#parser" do
|
7
|
-
it "parses expressions" do
|
8
|
-
expect(Tr8n::RulesEngine::Parser.new("(= 1 (mod n 10))").tokens).to eq(
|
9
|
-
["(", "=", "1", "(", "mod", "n", "10", ")", ")"]
|
10
|
-
)
|
11
|
-
|
12
|
-
expect(Tr8n::RulesEngine::Parser.new("(&& (= 1 (mod @n 10)) (!= 11 (mod @n 100)))").tokens).to eq(
|
13
|
-
["(", "&&", "(", "=", "1", "(", "mod", "@n", "10", ")", ")", "(", "!=", "11", "(", "mod", "@n", "100", ")", ")", ")"]
|
14
|
-
)
|
15
|
-
|
16
|
-
{
|
17
|
-
"(= 1 1)" => ["=", 1, 1],
|
18
|
-
"(+ 1 1)" => ["+", 1, 1],
|
19
|
-
"(= 1 (mod n 10))" => ["=", 1, ["mod", "n", 10]],
|
20
|
-
"(&& 1 1)" => ["&&", 1, 1],
|
21
|
-
"(mod @n 10)" => ["mod", "@n", 10],
|
22
|
-
"(&& (= 1 (mod @n 10)) (!= 11 (mod @n 100)))" => ["&&", ["=", 1, ["mod", "@n", 10]], ["!=", 11, ["mod", "@n", 100]]],
|
23
|
-
"(&& (in '2..4' (mod @n 10)) (not (in '12..14' (mod @n 100))))" => ["&&", ["in", "2..4", ["mod", "@n", 10]], ["not", ["in", "12..14", ["mod", "@n", 100]]]],
|
24
|
-
"(|| (= 0 (mod @n 10)) (in '5..9' (mod @n 10)) (in '11..14' (mod @n 100)))" => ["||", ["=", 0, ["mod", "@n", 10]], ["in", "5..9", ["mod", "@n", 10]], ["in", "11..14", ["mod", "@n", 100]]]
|
25
|
-
}.each do |source, target|
|
26
|
-
expect(Tr8n::RulesEngine::Parser.new(source).parse).to eq(target)
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/spec/source_spec.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Tr8n::Source do
|
6
|
-
describe "#initialize" do
|
7
|
-
it "helper methods" do
|
8
|
-
expect(Tr8n::Source.normalize("https://travis-ci.org/tr8n/tr8n_ruby_core")).to eq("/tr8n/tr8n_ruby_core")
|
9
|
-
expect(Tr8n::Source.normalize("https://www.google.com/search?q=test&source=lnms")).to eq("/search")
|
10
|
-
expect(Tr8n::Source.cache_prefix).to eq('s@')
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,101 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'rspec'
|
4
|
-
require 'json'
|
5
|
-
|
6
|
-
require 'simplecov'
|
7
|
-
require 'coveralls'
|
8
|
-
|
9
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
10
|
-
SimpleCov::Formatter::HTMLFormatter,
|
11
|
-
Coveralls::SimpleCov::Formatter
|
12
|
-
]
|
13
|
-
SimpleCov.start
|
14
|
-
|
15
|
-
require 'tr8n_core'
|
16
|
-
|
17
|
-
RSpec.configure do |config|
|
18
|
-
config.raise_errors_for_deprecations!
|
19
|
-
config.mock_with :rspec do |c|
|
20
|
-
c.syntax = [:should, :expect]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
Tr8n.configure do |config|
|
25
|
-
config.format = :text
|
26
|
-
end
|
27
|
-
|
28
|
-
def fixtures_root
|
29
|
-
File.join(File.dirname(__FILE__), 'fixtures')
|
30
|
-
end
|
31
|
-
|
32
|
-
def load_json(file_path)
|
33
|
-
JSON.parse(File.read("#{fixtures_root}/#{file_path}"))
|
34
|
-
end
|
35
|
-
|
36
|
-
def load_translation_key_from_hash(app, hash)
|
37
|
-
app.cache_translation_key(Tr8n::TranslationKey.new(hash.merge(:application => app)))
|
38
|
-
end
|
39
|
-
|
40
|
-
def load_translation_key_from_array(app, arr)
|
41
|
-
arr.each do |tkey|
|
42
|
-
load_translation_key_from_hash(app, tkey)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def load_translation_keys_from_file(app, path)
|
47
|
-
load_translation_key_from_array(app, load_json(path))
|
48
|
-
end
|
49
|
-
|
50
|
-
def stub_object(attrs)
|
51
|
-
user = double()
|
52
|
-
attrs.each do |key, value|
|
53
|
-
user.stub(key) { value }
|
54
|
-
end
|
55
|
-
user
|
56
|
-
end
|
57
|
-
|
58
|
-
def init_application(locales = [], path = 'application.json')
|
59
|
-
locales = ['en-US', 'ru', 'es'] if locales.size == 0
|
60
|
-
app = Tr8n::Application.new(load_json(path))
|
61
|
-
locales.each do |locale|
|
62
|
-
app.add_language(Tr8n::Language.new(load_json("languages/#{locale}.json")))
|
63
|
-
end
|
64
|
-
Tr8n.session.application = app
|
65
|
-
Tr8n.session.current_language = app.language('en-US')
|
66
|
-
app
|
67
|
-
end
|
68
|
-
|
69
|
-
RSpec.configure do |config|
|
70
|
-
config.before do
|
71
|
-
ARGV.replace []
|
72
|
-
end
|
73
|
-
|
74
|
-
config.expect_with :rspec do |c|
|
75
|
-
c.syntax = :expect
|
76
|
-
end
|
77
|
-
|
78
|
-
def capture(stream)
|
79
|
-
begin
|
80
|
-
stream = stream.to_s
|
81
|
-
eval "$#{stream} = StringIO.new"
|
82
|
-
yield
|
83
|
-
result = eval("$#{stream}").string
|
84
|
-
ensure
|
85
|
-
eval("$#{stream} = #{stream.upcase}")
|
86
|
-
end
|
87
|
-
|
88
|
-
result
|
89
|
-
end
|
90
|
-
|
91
|
-
def source_root
|
92
|
-
fixtures_root
|
93
|
-
end
|
94
|
-
|
95
|
-
def destination_root
|
96
|
-
File.join(File.dirname(__FILE__), 'sandbox')
|
97
|
-
end
|
98
|
-
|
99
|
-
alias :silence :capture
|
100
|
-
end
|
101
|
-
|
data/spec/tokens/data_spec.rb
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Tr8n::Tokens::Data do
|
6
|
-
before do
|
7
|
-
@app = init_application
|
8
|
-
@english = @app.language('en-US')
|
9
|
-
@tkey = Tr8n::TranslationKey.new({
|
10
|
-
:label => "Hello {user}",
|
11
|
-
:application => @app,
|
12
|
-
:locale => 'en-US'
|
13
|
-
})
|
14
|
-
@token = @tkey.data_tokens.first
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "initialize" do
|
18
|
-
it "should parse data token" do
|
19
|
-
expect(@token.class.name).to eq("Tr8n::Tokens::Data")
|
20
|
-
expect(@token.context_keys).to eq([])
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "substitute" do
|
25
|
-
it "should substitute values" do
|
26
|
-
user = stub_object({:first_name => "Tom", :last_name => "Anderson", :gender => "Male", :to_s => "Tom Anderson"})
|
27
|
-
user.stub(:last_name_with_prefix) {|prefix| "#{prefix} #{user.last_name}"}
|
28
|
-
|
29
|
-
# tr("Hello {user}", "", {:user => current_user}}
|
30
|
-
expect(@token.token_value(user, @english)).to eq(user.to_s)
|
31
|
-
|
32
|
-
# tr("Hello {user}", "", {:user => [current_user, current_user.name]}}
|
33
|
-
expect(@token.token_value([user, user.first_name], @english)).to eq(user.first_name)
|
34
|
-
|
35
|
-
# tr("Hello {user}", "", {:user => [current_user, :name]}}
|
36
|
-
expect(@token.token_value([user, :first_name], @english)).to eq(user.first_name)
|
37
|
-
|
38
|
-
# tr("Hello {user}", "", {:user => {:object => current_user, :value => current_user.name}]}}
|
39
|
-
expect(@token.token_value({:object => user, :value => user.to_s}, @english)).to eq(user.to_s)
|
40
|
-
|
41
|
-
# tr("Hello {user}", "", {:user => {:object => current_user, :attribute => :first_name}]}}
|
42
|
-
expect(@token.token_value({:object => user, :attribute => :first_name}, @english)).to eq(user.first_name)
|
43
|
-
expect(@token.token_value({:object => {:first_name => "Michael"}, :attribute => :first_name}, @english)).to eq("Michael")
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should perform complete substitution" do
|
47
|
-
user = stub_object({:first_name => "Tom", :last_name => "Anderson", :gender => "Male", :to_s => "Tom Anderson"})
|
48
|
-
user.stub(:last_name_with_prefix) {|prefix| "#{prefix} #{user.last_name}"}
|
49
|
-
|
50
|
-
[
|
51
|
-
{:user => user}, "Hello Tom Anderson",
|
52
|
-
{:user => [user, user.first_name]}, "Hello Tom",
|
53
|
-
{:user => [user, :first_name]}, "Hello Tom",
|
54
|
-
{:user => {:object => user, :value => user.to_s}}, "Hello Tom Anderson",
|
55
|
-
{:user => {:object => user, :attribute => :first_name}}, "Hello Tom",
|
56
|
-
{:user => {:object => {:first_name => "Michael"}, :attribute => :first_name}}, "Hello Michael"
|
57
|
-
].each_slice(2).to_a.each do |pair|
|
58
|
-
expect(@token.substitute(@tkey.label, pair.first, @english)).to eq(pair.last)
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should substitute token with array values" do
|
64
|
-
tkey = Tr8n::TranslationKey.new({
|
65
|
-
:label => "Hello {users}",
|
66
|
-
:application => @app,
|
67
|
-
:locale => 'en-US'
|
68
|
-
})
|
69
|
-
token = tkey.data_tokens.first
|
70
|
-
|
71
|
-
users = []
|
72
|
-
1.upto(6) do |i|
|
73
|
-
users << stub_object({:first_name => "First name #{i}", :last_name => "Last name #{i}", :gender => "Male"})
|
74
|
-
end
|
75
|
-
|
76
|
-
Tr8n.session.with_block_options(:dry => true) do
|
77
|
-
expect(token.token_value([users, :first_name], @english)).to match("2 others")
|
78
|
-
|
79
|
-
expect(token.token_value([users, :first_name, {
|
80
|
-
:description => "List joiner",
|
81
|
-
:limit => 4,
|
82
|
-
:separator => ", ",
|
83
|
-
:joiner => 'and',
|
84
|
-
:less => '{laquo} less',
|
85
|
-
:expandable => false,
|
86
|
-
:collapsable => true
|
87
|
-
}], @english)).to eq("First name 1, First name 2, First name 3, First name 4 and 2 others")
|
88
|
-
|
89
|
-
expect(token.token_value([users, :first_name, {
|
90
|
-
:description => "List joiner",
|
91
|
-
:limit => 10,
|
92
|
-
:separator => ", ",
|
93
|
-
:joiner => 'and',
|
94
|
-
:less => '{laquo} less',
|
95
|
-
:expandable => false,
|
96
|
-
:collapsable => true
|
97
|
-
}], @english)).to eq("First name 1, First name 2, First name 3, First name 4, First name 5 and First name 6")
|
98
|
-
|
99
|
-
expect(token.token_value([users, :first_name, {
|
100
|
-
:joiner => 'or',
|
101
|
-
:expandable => false,
|
102
|
-
}], @english)).to eq("First name 1, First name 2, First name 3, First name 4 or 2 others")
|
103
|
-
|
104
|
-
expect(token.token_value([users, :first_name, {
|
105
|
-
:limit => 2,
|
106
|
-
:joiner => 'or',
|
107
|
-
:expandable => false,
|
108
|
-
}], @english)).to eq("First name 1, First name 2 or 4 others")
|
109
|
-
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Tr8n::Tokens::DataTokenizer do
|
6
|
-
before do
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "initialize" do
|
11
|
-
it "should parse the text correctly" do
|
12
|
-
dt = Tr8n::Tokens::DataTokenizer.new("Hello World")
|
13
|
-
expect(dt.tokens).to be_empty
|
14
|
-
|
15
|
-
dt = Tr8n::Tokens::DataTokenizer.new("Hello {world}")
|
16
|
-
expect(dt.tokens.count).to equal(1)
|
17
|
-
expect(dt.tokens.first.name).to eq("world")
|
18
|
-
expect(dt.tokens.first.name(:parens => true)).to eq("{world}")
|
19
|
-
|
20
|
-
dt = Tr8n::Tokens::DataTokenizer.new("Dear {user:gender}")
|
21
|
-
expect(dt.tokens.count).to equal(1)
|
22
|
-
expect(dt.tokens.first.name).to eq("user")
|
23
|
-
expect(dt.tokens.first.name(:parens => true)).to eq("{user}")
|
24
|
-
expect(dt.tokens.first.context_keys).to eq(['gender'])
|
25
|
-
expect(dt.tokens.first.name(:parens => true, :context_keys => true)).to eq("{user:gender}")
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Tr8n::Tokens::DecorationTokenizer do
|
6
|
-
|
7
|
-
describe "parse" do
|
8
|
-
it "should correctly parse tokens" do
|
9
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("Hello World")
|
10
|
-
expect(dt.fragments).to eq(["[tr8n]", "Hello World", "[/tr8n]"])
|
11
|
-
expect(dt.parse).to eq(["tr8n", "Hello World"])
|
12
|
-
|
13
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold: Hello World]")
|
14
|
-
expect(dt.fragments).to eq(["[tr8n]", "[bold:", " Hello World", "]", "[/tr8n]"])
|
15
|
-
expect(dt.parse).to eq(["tr8n", ["bold", "Hello World"]])
|
16
|
-
|
17
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold: Hello World")
|
18
|
-
expect(dt.fragments).to eq(["[tr8n]", "[bold:", " Hello World", "[/tr8n]"])
|
19
|
-
expect(dt.parse).to eq(["tr8n", ["bold", "Hello World"]])
|
20
|
-
|
21
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold: Hello [strong: World]]")
|
22
|
-
expect(dt.fragments).to eq(["[tr8n]", "[bold:", " Hello ", "[strong:", " World", "]", "]", "[/tr8n]"])
|
23
|
-
expect(dt.parse).to eq(["tr8n", ["bold", "Hello ", ["strong", "World"]]])
|
24
|
-
|
25
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold: Hello [strong: World]")
|
26
|
-
expect(dt.fragments).to eq(["[tr8n]", "[bold:", " Hello ", "[strong:", " World", "]", "[/tr8n]"])
|
27
|
-
expect(dt.parse).to eq(["tr8n", ["bold", "Hello ", ["strong", "World"]]])
|
28
|
-
|
29
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold1: Hello [strong22: World]]")
|
30
|
-
expect(dt.fragments).to eq(["[tr8n]", "[bold1:", " Hello ", "[strong22:", " World", "]", "]", "[/tr8n]"])
|
31
|
-
expect(dt.parse).to eq(["tr8n", ["bold1", "Hello ", ["strong22", "World"]]])
|
32
|
-
|
33
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold: Hello, [strong: how] [weak: are] you?]")
|
34
|
-
expect(dt.fragments).to eq(["[tr8n]", "[bold:", " Hello, ", "[strong:", " how", "]", " ", "[weak:", " are", "]", " you?", "]", "[/tr8n]"])
|
35
|
-
expect(dt.parse).to eq(["tr8n", ["bold", "Hello, ", ["strong", "how"], " ", ["weak", "are"], " you?"]])
|
36
|
-
|
37
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold: Hello, [strong: how [weak: are] you?]")
|
38
|
-
expect(dt.fragments).to eq(["[tr8n]", "[bold:", " Hello, ", "[strong:", " how ", "[weak:", " are", "]", " you?", "]", "[/tr8n]"])
|
39
|
-
expect(dt.parse).to eq(["tr8n", ["bold", "Hello, ", ["strong", "how ", ["weak", "are"], " you?"]]])
|
40
|
-
|
41
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[link: you have [italic: [bold: {count}] messages] [light: in your mailbox]]")
|
42
|
-
expect(dt.fragments).to eq(["[tr8n]", "[link:", " you have ", "[italic:", " ", "[bold:", " {count}", "]", " messages", "]", " ", "[light:", " in your mailbox", "]", "]", "[/tr8n]"])
|
43
|
-
expect(dt.parse).to eq(["tr8n", ["link", "you have ", ["italic", "", ["bold", "{count}"], " messages"], " ", ["light", "in your mailbox"]]])
|
44
|
-
|
45
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[link] you have [italic: [bold: {count}] messages] [light: in your mailbox] [/link]")
|
46
|
-
expect(dt.fragments).to eq(["[tr8n]", "[link]", " you have ", "[italic:", " ", "[bold:", " {count}", "]", " messages", "]", " ", "[light:", " in your mailbox", "]", " ", "[/link]", "[/tr8n]"])
|
47
|
-
expect(dt.parse).to eq( ["tr8n", ["link", " you have ", ["italic", "", ["bold", "{count}"], " messages"], " ", ["light", "in your mailbox"], " "]])
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "substitute" do
|
52
|
-
it "should correctly substitute tokens" do
|
53
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold: Hello World]")
|
54
|
-
expect(dt.substitute).to eq("<strong>Hello World</strong>")
|
55
|
-
|
56
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold]Hello World[/bold]")
|
57
|
-
expect(dt.substitute).to eq("<strong>Hello World</strong>")
|
58
|
-
|
59
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[bold] Hello World [/bold]")
|
60
|
-
expect(dt.substitute).to eq("<strong> Hello World </strong>")
|
61
|
-
|
62
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[p: Hello World]", :p => '<p>{$0}</p>')
|
63
|
-
expect(dt.substitute).to eq("<p>Hello World</p>")
|
64
|
-
|
65
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[p: Hello World]", :p => lambda{|text| "<p>#{text}</p>"})
|
66
|
-
expect(dt.substitute).to eq("<p>Hello World</p>")
|
67
|
-
|
68
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[p]Hello World[/p]", :p => lambda{|text| "<p>#{text}</p>"})
|
69
|
-
expect(dt.substitute).to eq("<p>Hello World</p>")
|
70
|
-
|
71
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[link: you have 5 messages]", "link" => '<a href="http://mail.google.com">{$0}</a>')
|
72
|
-
expect(dt.substitute).to eq("<a href=\"http://mail.google.com\">you have 5 messages</a>")
|
73
|
-
|
74
|
-
dt = Tr8n::Tokens::DecorationTokenizer.new("[link: you have {clount} messages]", "link" => '<a href="http://mail.google.com">{$0}</a>')
|
75
|
-
expect(dt.substitute).to eq("<a href=\"http://mail.google.com\">you have {clount} messages</a>")
|
76
|
-
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
data/spec/tokens/hidden_spec.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Tr8n::Tokens::Hidden do
|
6
|
-
before do
|
7
|
-
@app = init_application
|
8
|
-
@english = @app.language('en-US')
|
9
|
-
@tkey = Tr8n::TranslationKey.new({
|
10
|
-
:label => "{_he_she}",
|
11
|
-
:application => @app,
|
12
|
-
:locale => 'en-US'
|
13
|
-
})
|
14
|
-
@token = @tkey.data_tokens.first
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "initialize" do
|
18
|
-
it "should parse data token" do
|
19
|
-
expect(@token.class.name).to eq("Tr8n::Tokens::Hidden")
|
20
|
-
expect(@token.context_keys).to eq([])
|
21
|
-
expect(@token.allowed_in_translation?).to be_falsey
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
data/spec/tokens/method_spec.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Tr8n::Tokens::Method do
|
6
|
-
#before do
|
7
|
-
# @app = init_application
|
8
|
-
# @english = @app.language('en-US')
|
9
|
-
# @tkey = Tr8n::TranslationKey.new({
|
10
|
-
# :label => "Hello {user.first_name}",
|
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::Method")
|
21
|
-
# expect(token.original_label).to eq(@tlabel.label)
|
22
|
-
# expect(token.full_name).to eq("{user.first_name}")
|
23
|
-
# expect(token.declared_name).to eq("user.first_name")
|
24
|
-
# expect(token.name).to eq("user.first_name")
|
25
|
-
# expect(token.sanitized_name).to eq("{user.first_name}")
|
26
|
-
# expect(token.name_key).to eq(:"user.first_name")
|
27
|
-
# expect(token.pipeless_name).to eq("user.first_name")
|
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("user.first_name")
|
32
|
-
#
|
33
|
-
# expect(token.types).to be_nil
|
34
|
-
# expect(token.has_types?).to be_falsey
|
35
|
-
# expect(token.associated_rule_types).to eq([:value])
|
36
|
-
# expect(token.language_rule_classes).to eq([Tr8n::Rules::Value])
|
37
|
-
# expect(token.transformable_language_rule_classes).to eq([])
|
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
|
-
# user = stub_object({:first_name => "Tom", :last_name => "Anderson", :gender => "Male", :to_s => "Tom Anderson"})
|
47
|
-
#
|
48
|
-
# # tr("Hello {user}", "", {:user => current_user}}
|
49
|
-
# expect(token.token_value(user, {}, @english)).to eq(user.to_s)
|
50
|
-
#
|
51
|
-
# # tr("Hello {user}", "", {:user => [current_user]}}
|
52
|
-
# expect(token.token_value([user], {}, @english)).to eq(user.to_s)
|
53
|
-
#
|
54
|
-
# # tr("Hello {user}", "", {:user => [current_user, current_user.name]}}
|
55
|
-
# expect(token.token_value([user, user.first_name], {}, @english)).to eq(user.first_name)
|
56
|
-
#
|
57
|
-
# # tr("Hello {user}", "", {:user => [current_user, "{$0} {$1}", "param1"]}}
|
58
|
-
# expect(token.token_value([user, "{$0} {$1}", "param1"], {}, @english)).to eq(user.to_s + " param1")
|
59
|
-
# expect(token.token_value([user, "{$0} {$1} {$2}", "param1", "param2"], {}, @english)).to eq(user.to_s + " param1 param2")
|
60
|
-
#
|
61
|
-
# # tr("Hello {user}", "", {:user => [current_user, :name]}}
|
62
|
-
# expect(token.token_value([user, :first_name], {}, @english)).to eq(user.first_name)
|
63
|
-
#
|
64
|
-
# # tr("Hello {user}", "", {:user => [current_user, :method_name, "param1"]}}
|
65
|
-
# user.stub(:last_name_with_prefix) {|prefix| "#{prefix} #{user.last_name}"}
|
66
|
-
# expect(token.token_value([user, :last_name_with_prefix, 'Mr.'], {}, @english)).to eq("Mr. Anderson")
|
67
|
-
#
|
68
|
-
# # tr("Hello {user}", "", {:user => [current_user, lambda{|user| user.name}]}}
|
69
|
-
# expect(token.token_value([user, lambda{|user| user.to_s}], {}, @english)).to eq(user.to_s)
|
70
|
-
#
|
71
|
-
# # tr("Hello {user}", "", {:user => [current_user, lambda{|user, param1| user.name}, "param1"]}}
|
72
|
-
# expect(token.token_value([user, lambda{|user, param1| user.to_s + " " + param1}, "extra_param1"], {}, @english)).to eq(user.to_s + " extra_param1")
|
73
|
-
#
|
74
|
-
# # tr("Hello {user}", "", {:user => {:object => current_user, :value => current_user.name}]}}
|
75
|
-
# expect(token.token_value({:object => user, :value => user.to_s}, {}, @english)).to eq(user.to_s)
|
76
|
-
#
|
77
|
-
# # tr("Hello {user}", "", {:user => {:object => current_user, :attribute => :first_name}]}}
|
78
|
-
# expect(token.token_value({:object => user, :attribute => :first_name}, {}, @english)).to eq(user.first_name)
|
79
|
-
# expect(token.token_value({:object => {:first_name => "Michael"}, :attribute => :first_name}, {}, @english)).to eq("Michael")
|
80
|
-
# end
|
81
|
-
#end
|
82
|
-
|
83
|
-
|
84
|
-
end
|