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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/lib/tr8n/api_client.rb +28 -18
  4. data/lib/tr8n/application.rb +37 -64
  5. data/lib/tr8n/cache.rb +8 -41
  6. data/lib/tr8n/cache_adapters/file.rb +1 -2
  7. data/lib/tr8n/cache_adapters/memcache.rb +2 -2
  8. data/lib/tr8n/cache_adapters/redis.rb +2 -2
  9. data/lib/tr8n/config.rb +48 -13
  10. data/lib/tr8n/decorators/html.rb +3 -10
  11. data/lib/tr8n/language.rb +25 -112
  12. data/lib/tr8n/language_case.rb +1 -1
  13. data/lib/tr8n/session.rb +2 -9
  14. data/lib/tr8n/source.rb +12 -44
  15. data/lib/tr8n/{tokens/data_tokenizer.rb → tokenizers/data.rb} +4 -3
  16. data/lib/tr8n/{tokens/decoration_tokenizer.rb → tokenizers/decoration.rb} +6 -5
  17. data/lib/tr8n/tokenizers/dom.rb +346 -0
  18. data/lib/tr8n/tokens/data.rb +15 -22
  19. data/lib/tr8n/tokens/transform.rb +24 -12
  20. data/lib/tr8n/translation_key.rb +6 -29
  21. data/lib/tr8n/utils.rb +5 -0
  22. data/lib/tr8n_core/version.rb +1 -1
  23. data/lib/tr8n_core.rb +7 -26
  24. metadata +30 -100
  25. data/lib/tr8n/cache_adapters/cdb.rb +0 -87
  26. data/lib/tr8n/tokens/hidden.rb +0 -57
  27. data/spec/application_spec.rb +0 -52
  28. data/spec/base_spec.rb +0 -19
  29. data/spec/cache/adapters/file_spec.rb +0 -32
  30. data/spec/cache/adapters/memcache_spec.rb +0 -15
  31. data/spec/cache/generators/file_generator_spec.rb +0 -30
  32. data/spec/config_spec.rb +0 -32
  33. data/spec/decorator_spec.rb +0 -12
  34. data/spec/decorators/base_spec.rb +0 -14
  35. data/spec/decorators/default_spec.rb +0 -12
  36. data/spec/decorators/html_spec.rb +0 -50
  37. data/spec/ext/array_spec.rb +0 -12
  38. data/spec/ext/hash_spec.rb +0 -15
  39. data/spec/ext/string_spec.rb +0 -10
  40. data/spec/fixtures/application.json +0 -112
  41. data/spec/fixtures/languages/en-US.json +0 -1424
  42. data/spec/fixtures/languages/es.json +0 -291
  43. data/spec/fixtures/languages/ru.json +0 -582
  44. data/spec/fixtures/translations/ru/basic.json +0 -56
  45. data/spec/fixtures/translations/ru/counters.json +0 -43
  46. data/spec/fixtures/translations/ru/genders.json +0 -171
  47. data/spec/fixtures/translations/ru/last_names.txt +0 -200
  48. data/spec/fixtures/translations/ru/names.json +0 -1
  49. data/spec/fixtures/translations/ru/names.txt +0 -458
  50. data/spec/language_case_rule_spec.rb +0 -57
  51. data/spec/language_case_spec.rb +0 -58
  52. data/spec/language_context_rule_spec.rb +0 -75
  53. data/spec/language_context_spec.rb +0 -333
  54. data/spec/language_spec.rb +0 -615
  55. data/spec/logger_spec.rb +0 -15
  56. data/spec/rules_engine/evaluator_spec.rb +0 -150
  57. data/spec/rules_engine/parser_spec.rb +0 -31
  58. data/spec/source_spec.rb +0 -13
  59. data/spec/spec_helper.rb +0 -101
  60. data/spec/tokens/data_spec.rb +0 -114
  61. data/spec/tokens/data_tokenizer_spec.rb +0 -29
  62. data/spec/tokens/decoration_tokenizer_spec.rb +0 -81
  63. data/spec/tokens/hidden_spec.rb +0 -24
  64. data/spec/tokens/method_spec.rb +0 -84
  65. data/spec/tokens/transform_spec.rb +0 -50
  66. data/spec/translation_key_spec.rb +0 -96
  67. data/spec/translation_spec.rb +0 -24
  68. data/spec/utils_spec.rb +0 -62
@@ -1,458 +0,0 @@
1
- Авдотья
2
-
3
- Аким
4
-
5
- Аксинья
6
-
7
- Алевтина
8
-
9
- Александр
10
-
11
- Александра
12
-
13
- Алексей
14
-
15
- Алена
16
-
17
- Алина
18
-
19
- Алла
20
-
21
- Анастасия
22
-
23
- Анатолий
24
-
25
- Ангелина
26
-
27
- Андрей
28
-
29
- Анисья
30
-
31
- Анна
32
-
33
- Антон
34
-
35
- Антонина
36
-
37
- Анфим
38
-
39
- Анфиса
40
-
41
- Аполлинария
42
-
43
- Арина
44
-
45
- Аркадий
46
-
47
- Арсений
48
-
49
- Артем
50
-
51
- Артемий
52
-
53
- Богдан
54
-
55
- Богдана
56
-
57
- Борис
58
-
59
- Борислав
60
-
61
- Вадим
62
-
63
- Валентин
64
-
65
- Валентина
66
-
67
- Валерий
68
-
69
- Валерия
70
-
71
- Варвара
72
-
73
- Василий
74
-
75
- Василиса
76
-
77
- Венера
78
-
79
- Вера
80
-
81
- Вета
82
-
83
- Виктор
84
-
85
- Викторина
86
-
87
- Виктория
88
-
89
- Вилена
90
-
91
- Виолетта
92
-
93
- Виталий
94
-
95
- Виталина
96
- Виталия
97
-
98
- Влада
99
-
100
- Владана
101
-
102
- Владимир
103
-
104
- Владислав
105
-
106
- Владислава
107
-
108
- Владлен
109
-
110
- Всеволод
111
-
112
- Вячеслав
113
-
114
- Галина
115
-
116
- Геннадий
117
-
118
- Георгий
119
-
120
- Герасим
121
-
122
- Глеб
123
-
124
- Гордей
125
-
126
- Григорий
127
-
128
- Дамир
129
-
130
- Даниил
131
-
132
- Данислав
133
-
134
- Дарья
135
-
136
- Денис
137
-
138
- Джереми (Иеремия)
139
-
140
- Дина
141
-
142
- Дмитрий
143
-
144
- Евгений
145
-
146
- Евгения
147
-
148
- Евдоким
149
-
150
- Евдокия
151
-
152
- Евстахий
153
-
154
- Егор
155
-
156
- Екатерина
157
-
158
- Елена
159
-
160
- Елизавета
161
-
162
- Елисей
163
-
164
- Емельян
165
-
166
- Еремей
167
-
168
- Есения
169
-
170
- Ефим
171
-
172
- Захар
173
-
174
- Зинаида
175
-
176
- Зиновий
177
-
178
- Злата
179
-
180
- Зоя
181
-
182
- Иван
183
-
184
- Игнат
185
-
186
- Игнатий
187
-
188
- Игорь
189
-
190
- Иероним (Джером)
191
-
192
- Изабелла
193
-
194
- Иллирика
195
-
196
- Илья
197
-
198
- Инесса
199
-
200
- Инна
201
-
202
- Иннокентий
203
-
204
- Иоанна
205
-
206
- Ира
207
-
208
- Ираида
209
-
210
- Ирина
211
-
212
- Искра
213
-
214
- Ия
215
-
216
- Карина
217
-
218
- Кира
219
-
220
- Кирилл
221
-
222
- Клим
223
-
224
- Константин
225
-
226
- Кристина
227
-
228
- Ксения
229
-
230
- Кузьма
231
-
232
- Лада
233
-
234
- Лара
235
-
236
- Лариса
237
-
238
- Лев
239
-
240
- Леонид
241
-
242
- Лера
243
-
244
- Лидия
245
-
246
- Лика
247
-
248
- Любовь
249
-
250
- Людмила
251
-
252
- Ляля
253
-
254
- Магдалeна
255
-
256
- Майя
257
-
258
- Макар
259
-
260
- Макарий
261
-
262
- Макария
263
-
264
- Максим
265
-
266
- Маргарита
267
-
268
- Марина
269
-
270
- Мария
271
-
272
- Марк
273
-
274
- Мартин (Мартын)
275
-
276
- Марфа
277
-
278
- Матвей
279
-
280
- Мила
281
-
282
- Милада
283
-
284
- Милана
285
-
286
- Милена
287
-
288
- Милица
289
-
290
- Мира
291
-
292
- Мирослав
293
-
294
- Мирослава
295
-
296
- Мирра
297
-
298
- Михаил
299
-
300
- Надежда
301
-
302
- Наталья
303
-
304
- Нелли
305
-
306
- Ника
307
-
308
- Никита
309
-
310
- Никодим
311
-
312
- Никола
313
-
314
- Николай
315
-
316
- Нина
317
-
318
- Нинель
319
-
320
- Оксана
321
-
322
- Олег
323
-
324
- Олеся
325
-
326
- Ольга
327
-
328
- Осип (Иосиф)
329
-
330
- Остап
331
-
332
- Павел
333
-
334
- Павлина
335
-
336
- Пелагея
337
-
338
- Петр
339
-
340
- Платон
341
-
342
- Платонида
343
-
344
- Полина
345
-
346
- Прасковья
347
-
348
- Прохор
349
-
350
- Рада
351
-
352
- Радий
353
-
354
- Радик
355
-
356
- Радомир
357
-
358
- Радослав
359
-
360
- Раиса
361
-
362
- Рената
363
-
364
- Римма
365
-
366
- Ренат
367
-
368
- Родион
369
-
370
- Роман
371
-
372
- Ростислав
373
-
374
- Русалина
375
-
376
- Руслан
377
-
378
- Сабина
379
-
380
- Савва
381
-
382
- Савелий
383
-
384
- Светлана
385
-
386
- Святослав
387
-
388
- Севастьян
389
-
390
- Семен
391
-
392
- Серафима
393
-
394
- Сергей
395
-
396
- Сидор
397
-
398
- Соня
399
-
400
- Софья
401
-
402
- Спартак
403
-
404
- Станислав
405
-
406
- Стелла
407
-
408
- Степан
409
-
410
- Таисия
411
-
412
- Тарас
413
-
414
- Татьяна
415
-
416
- Тимофей
417
-
418
- Тихон
419
-
420
- Трофим
421
-
422
- Ульяна
423
-
424
- Фаина
425
-
426
- Федор
427
-
428
- Федот
429
-
430
- Филипп
431
-
432
- Флор
433
-
434
- Фома
435
-
436
- Харитон
437
-
438
- Цветана
439
-
440
- Юлиан
441
-
442
- Юлия
443
-
444
- Юния
445
-
446
- Юрий
447
-
448
- Яков
449
-
450
- Яна
451
-
452
- Янина
453
-
454
- Ярина
455
-
456
- Ярослав
457
-
458
- Ярослава
@@ -1,57 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Tr8n::LanguageCaseRule do
6
- describe "initialize" do
7
- it "sets attributes" do
8
- expect(Tr8n::LanguageCaseRule.attributes).to eq([:language_case, :id, :description, :examples, :conditions, :conditions_expression, :operations, :operations_expression])
9
- end
10
- end
11
-
12
- describe "evaluating simple rules without genders" do
13
- it "should result in correct substitution" do
14
- @rule = Tr8n::LanguageCaseRule.new(
15
- :conditions => "(match '/s$/' @value)",
16
- :operations => "(append \"'\" @value)"
17
- )
18
-
19
- expect(@rule.evaluate("Michael")).to be_falsey
20
- expect(@rule.evaluate("Anna")).to be_falsey
21
-
22
- expect(@rule.evaluate("friends")).to be_truthy
23
- expect(@rule.apply("friends")).to eq("friends'")
24
-
25
- @rule = Tr8n::LanguageCaseRule.new(
26
- :conditions => "(not (match '/s$/' @value))",
27
- :operations => "(append \"'s\" @value)"
28
- )
29
-
30
- expect(@rule.evaluate("Michael")).to be_truthy
31
- expect(@rule.apply("Michael")).to eq("Michael's")
32
-
33
- expect(@rule.evaluate("Anna")).to be_truthy
34
- expect(@rule.apply("Anna")).to eq("Anna's")
35
-
36
- expect(@rule.evaluate("friends")).to be_falsey
37
-
38
- @rule = Tr8n::LanguageCaseRule.new(
39
- :conditions => "(= '1' @value))",
40
- :operations => "(quote 'first')"
41
- )
42
-
43
- expect(@rule.evaluate('2')).to be_falsey
44
- expect(@rule.evaluate('1')).to be_truthy
45
- expect(@rule.apply('1')).to eq("first")
46
-
47
- @rule = Tr8n::LanguageCaseRule.new(
48
- :conditions => "(match '/(0|4|5|6|7|8|9|11|12|13)$/' @value))",
49
- :operations => "(append 'th' @value)"
50
- )
51
-
52
- expect(@rule.apply('4')).to eq("4th")
53
- expect(@rule.apply('15')).to eq("15th")
54
- end
55
- end
56
-
57
- end
@@ -1,58 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Tr8n::LanguageCase do
6
- before do
7
- @app = init_application
8
- @english = @app.language('en-US')
9
- @russian = @app.language('ru')
10
- end
11
-
12
- describe "initialize" do
13
- it "sets attributes" do
14
- expect(Tr8n::LanguageCase.attributes).to eq([:language, :id, :keyword, :latin_name, :native_name, :description, :application, :rules])
15
- end
16
- end
17
-
18
- describe "apply case" do
19
- it "should return correct data" do
20
- lcase = Tr8n::LanguageCase.new(
21
- :language => @english,
22
- :keyword => "pos",
23
- :latin_name => "Possessive",
24
- :native_name => "Possessive",
25
- :description => "Used to indicate possession (i.e., ownership). It is usually created by adding 's to the word",
26
- :application => "phrase"
27
- )
28
-
29
- lcase.rules << Tr8n::LanguageCaseRule.new(:conditions => "(match '/s$/' @value)", :operations => "(append \"'\" @value)")
30
- lcase.rules << Tr8n::LanguageCaseRule.new(:conditions => "(not (match '/s$/' @value))", :operations => "(append \"'s\" @value)")
31
- expect(lcase.apply("Michael")).to eq("Michael's")
32
- end
33
-
34
- it "should correctly process default cases" do
35
- possessive = @english.case_by_keyword('pos')
36
- expect(possessive.apply("Michael")).to eq("Michael's")
37
-
38
-
39
- plural = @english.case_by_keyword('plural')
40
-
41
- expect(plural.apply("fish")).to eq("fish")
42
- expect(plural.apply("money")).to eq("money")
43
-
44
- # irregular
45
- expect(plural.apply("move")).to eq("moves")
46
-
47
- # plurals
48
- expect(plural.apply("quiz")).to eq("quizzes")
49
- expect(plural.apply("wife")).to eq("wives")
50
-
51
- singular = @english.case_by_keyword('singular')
52
- expect(singular.apply("quizzes")).to eq("quiz")
53
- expect(singular.apply("cars")).to eq("car")
54
- expect(singular.apply("wives")).to eq("wife")
55
- end
56
- end
57
-
58
- end
@@ -1,75 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Tr8n::LanguageContextRule do
6
-
7
- describe "initialize" do
8
- it "sets attributes" do
9
- expect(Tr8n::LanguageContextRule.attributes).to eq([:language_context, :keyword, :description, :examples, :conditions, :conditions_expression])
10
- end
11
- end
12
-
13
- describe "finding fallback rules" do
14
- it "should return fallback rule" do
15
- rule = Tr8n::LanguageContextRule.new(:keyword => "one", :conditions => "(= 1 @n)", :examples => "1")
16
- expect(rule.fallback?).to be_falsey
17
-
18
- rule = Tr8n::LanguageContextRule.new(:keyword => "other", :examples => "0, 2-999; 1.2, 2.07...")
19
- expect(rule.fallback?).to be_truthy
20
- end
21
- end
22
-
23
- describe "evaluating rules" do
24
- it "should return correct results" do
25
- rule = Tr8n::LanguageContextRule.new(:keyword => "one", :conditions => "(= 1 @n)", :examples => "1")
26
- expect(rule.evaluate).to be_falsey
27
- expect(rule.evaluate({"@n" => 1})).to be_truthy
28
- expect(rule.evaluate({"@n" => 2})).to be_falsey
29
- expect(rule.evaluate({"@n" => 0})).to be_falsey
30
-
31
- one = Tr8n::LanguageContextRule.new(:keyword => "one", :conditions => "(&& (= 1 (mod @n 10)) (!= 11 (mod @n 100)))", :description => "{n} mod 10 is 1 and {n} mod 100 is not 11", :examples => "1, 21, 31, 41, 51, 61...")
32
- few = Tr8n::LanguageContextRule.new(:keyword => "few", :conditions => "(&& (in '2..4' (mod @n 10)) (not (in '12..14' (mod @n 100))))", :description => "{n} mod 10 in 2..4 and {n} mod 100 not in 12..14", :examples => "2-4, 22-24, 32-34...")
33
- many = Tr8n::LanguageContextRule.new(:keyword => "many", :conditions => "(|| (= 0 (mod @n 10)) (in '5..9' (mod @n 10)) (in '11..14' (mod @n 100)))", :description => "{n} mod 10 is 0 or {n} mod 10 in 5..9 or {n} mod 100 in 11..14", :examples => "0, 5-20, 25-30, 35-40...")
34
-
35
- {
36
- [1, 21, 31, 101, 121] => one,
37
- [2, 3, 4, 22, 23, 24, 102, 103, 104] => few,
38
- [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20, 25, 26, 28, 30, 35, 36, 38, 39, 40] => many
39
- }.each do |vals, rule|
40
- vals.each do |val|
41
- vars = {"@n" => val}
42
- expect(rule.evaluate(vars)).to be_truthy
43
- end
44
- end
45
-
46
- {
47
- [2, 3, 4, 9] => one,
48
- [5, 6, 7, 8, 9] => few,
49
- [1, 2, 3, 4] => many
50
- }.each do |vals, rule|
51
- vals.each do |val|
52
- vars = {"@n" => val}
53
- expect(rule.evaluate(vars)).to be_falsey
54
- end
55
- end
56
-
57
- one_male = Tr8n::LanguageContextRule.new(:keyword => "one_male", :conditions => "(&& (= 1 (count @genders)) (all @genders 'male'))", :description => "List contains one male user")
58
- one_female = Tr8n::LanguageContextRule.new(:keyword => "one_female", :conditions => "(&& (= 1 (count @genders)) (all @genders 'female'))", :description => "List contains one female user")
59
- one_unknown = Tr8n::LanguageContextRule.new(:keyword => "one_unknown", :conditions => "(&& (= 1 (count @genders)) (all @genders 'unknown'))", :description => "List contains one user with unknown gender")
60
- many = Tr8n::LanguageContextRule.new(:keyword => "many", :conditions => "(> (count @genders) 1)", :description => "List contains two or more users")
61
-
62
- expect(one_male.evaluate({"@genders" => ["male"]})).to be_truthy
63
- expect(one_male.evaluate({"@genders" => ["male", "male"]})).to be_falsey
64
-
65
- expect(one_female.evaluate({"@genders" => ["female"]})).to be_truthy
66
- expect(many.evaluate({"@genders" => ["female", "male"]})).to be_truthy
67
-
68
- expect(one_unknown.evaluate({"@genders" => ["unknown"]})).to be_truthy
69
-
70
- many_male = Tr8n::LanguageContextRule.new(:keyword => "one", :conditions => "(&& (> (count @genders) 1) (all @genders 'male'))", :description => "List contains at least two users, all male")
71
- expect(many_male.evaluate({"@genders" => ["male", "male"]})).to be_truthy
72
- end
73
- end
74
-
75
- end