tr8n 3.1.8 → 3.2.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.
Files changed (209) hide show
  1. data/.gitignore +2 -1
  2. data/.rspec +1 -0
  3. data/.rvmrc +1 -1
  4. data/.watchr +18 -0
  5. data/Gemfile.lock +16 -10
  6. data/app/assets/images/tr8n/minus_node.png +0 -0
  7. data/app/assets/images/tr8n/pixel.gif +0 -0
  8. data/app/assets/images/tr8n/plus_node.png +0 -0
  9. data/app/assets/javascripts/tr8n/tr8n.js +1 -0
  10. data/app/assets/javascripts/tr8n/tr8n_client_sdk.js +581 -425
  11. data/app/assets/stylesheets/tr8n/layout.css.scss +1 -1
  12. data/app/assets/stylesheets/tr8n/tr8n.css.scss +20 -0
  13. data/app/controllers/tr8n/admin/base_controller.rb +4 -1
  14. data/app/controllers/tr8n/admin/clientsdk_controller.rb +1 -1
  15. data/app/controllers/tr8n/admin/metrics_controller.rb +30 -0
  16. data/app/controllers/tr8n/api/v1/base_controller.rb +12 -0
  17. data/app/controllers/tr8n/api/v1/language_controller.rb +7 -5
  18. data/app/controllers/tr8n/awards_controller.rb +1 -1
  19. data/app/controllers/tr8n/base_controller.rb +12 -6
  20. data/app/controllers/tr8n/dashboard_controller.rb +1 -1
  21. data/app/controllers/tr8n/forum_controller.rb +1 -1
  22. data/app/controllers/tr8n/glossary_controller.rb +1 -1
  23. data/app/controllers/tr8n/help_controller.rb +1 -1
  24. data/app/controllers/tr8n/phrases_controller.rb +1 -1
  25. data/app/controllers/tr8n/translator_controller.rb +8 -0
  26. data/app/helpers/tr8n/admin/base_helper.rb +1 -1
  27. data/app/helpers/tr8n/base_helper.rb +1 -1
  28. data/app/helpers/tr8n/dashboard_helper.rb +1 -1
  29. data/app/models/tr8n/base_filter.rb +1 -1
  30. data/app/models/tr8n/daily_language_metric.rb +1 -1
  31. data/app/models/tr8n/date_rule.rb +1 -1
  32. data/app/models/tr8n/gender_list_rule.rb +1 -1
  33. data/app/models/tr8n/gender_rule.rb +1 -1
  34. data/app/models/tr8n/glossary.rb +1 -1
  35. data/app/models/tr8n/glossary_filter.rb +1 -1
  36. data/app/models/tr8n/integration/ru/russian_gender_list_rule.rb +1 -1
  37. data/app/models/tr8n/integration/ru/russian_numeric_rule.rb +1 -1
  38. data/app/models/tr8n/ip_location.rb +1 -1
  39. data/app/models/tr8n/ip_location_filter.rb +1 -1
  40. data/app/models/tr8n/language.rb +19 -7
  41. data/app/models/tr8n/language_case.rb +1 -1
  42. data/app/models/tr8n/language_case_filter.rb +1 -1
  43. data/app/models/tr8n/language_case_rule.rb +1 -1
  44. data/app/models/tr8n/language_case_rule_filter.rb +1 -1
  45. data/app/models/tr8n/language_case_value_map.rb +1 -1
  46. data/app/models/tr8n/language_case_value_map_filter.rb +1 -1
  47. data/app/models/tr8n/language_filter.rb +1 -1
  48. data/app/models/tr8n/language_forum_abuse_report.rb +1 -1
  49. data/app/models/tr8n/language_forum_abuse_report_filter.rb +1 -1
  50. data/app/models/tr8n/language_forum_message.rb +1 -1
  51. data/app/models/tr8n/language_forum_message_filter.rb +1 -1
  52. data/app/models/tr8n/language_forum_topic.rb +1 -1
  53. data/app/models/tr8n/language_forum_topic_filter.rb +1 -1
  54. data/app/models/tr8n/language_metric.rb +1 -1
  55. data/app/models/tr8n/language_metric_filter.rb +1 -1
  56. data/app/models/tr8n/language_rule.rb +1 -1
  57. data/app/models/tr8n/language_rule_filter.rb +1 -1
  58. data/app/models/tr8n/language_user.rb +1 -1
  59. data/app/models/tr8n/language_user_filter.rb +1 -1
  60. data/app/models/tr8n/list_rule.rb +1 -1
  61. data/app/models/tr8n/monthly_language_metric.rb +1 -1
  62. data/app/models/tr8n/numeric_rule.rb +35 -28
  63. data/app/models/tr8n/sync_log.rb +1 -1
  64. data/app/models/tr8n/sync_log_filter.rb +1 -1
  65. data/app/models/tr8n/total_language_metric.rb +1 -1
  66. data/app/models/tr8n/translation.rb +4 -3
  67. data/app/models/tr8n/translation_domain.rb +11 -3
  68. data/app/models/tr8n/translation_domain_filter.rb +1 -1
  69. data/app/models/tr8n/translation_filter.rb +1 -1
  70. data/app/models/tr8n/translation_key.rb +73 -36
  71. data/app/models/tr8n/translation_key_comment.rb +1 -1
  72. data/app/models/tr8n/translation_key_comment_filter.rb +1 -1
  73. data/app/models/tr8n/translation_key_filter.rb +1 -1
  74. data/app/models/tr8n/translation_key_lock.rb +1 -1
  75. data/app/models/tr8n/translation_key_lock_filter.rb +1 -1
  76. data/app/models/tr8n/translation_key_source.rb +16 -5
  77. data/app/models/tr8n/translation_key_source_filter.rb +1 -1
  78. data/app/models/tr8n/translation_source.rb +12 -4
  79. data/app/models/tr8n/translation_source_filter.rb +1 -1
  80. data/app/models/tr8n/translation_source_language.rb +1 -1
  81. data/app/models/tr8n/translation_vote.rb +1 -1
  82. data/app/models/tr8n/translation_vote_filter.rb +1 -1
  83. data/app/models/tr8n/translator.rb +21 -5
  84. data/app/models/tr8n/translator_filter.rb +1 -1
  85. data/app/models/tr8n/translator_following.rb +1 -1
  86. data/app/models/tr8n/translator_following_filter.rb +1 -1
  87. data/app/models/tr8n/translator_log.rb +3 -3
  88. data/app/models/tr8n/translator_log_filter.rb +1 -1
  89. data/app/models/tr8n/translator_metric.rb +1 -1
  90. data/app/models/tr8n/translator_metric_filter.rb +1 -1
  91. data/app/models/tr8n/translator_report.rb +1 -1
  92. data/app/models/tr8n/translator_report_filter.rb +1 -1
  93. data/app/models/tr8n/value_rule.rb +1 -1
  94. data/app/views/tr8n/admin/clientsdk/index.html.erb +29 -29
  95. data/app/views/tr8n/admin/clientsdk/lb_samples.html.erb +1 -1
  96. data/app/views/tr8n/admin/metrics/_tabs.html.erb +22 -0
  97. data/app/views/tr8n/admin/metrics/index.html.erb +60 -0
  98. data/app/views/tr8n/common/_header.html.erb +3 -1
  99. data/app/views/tr8n/common/_language_selector.html.erb +4 -2
  100. data/app/views/tr8n/common/_scripts.html.erb +5 -0
  101. data/app/views/tr8n/common/_terms_of_service.html.erb +53 -0
  102. data/app/views/tr8n/help/credits.html.erb +4 -0
  103. data/app/views/tr8n/language/_select.html.erb +5 -1
  104. data/app/views/tr8n/translator/registration.html.erb +21 -0
  105. data/config/routes.rb +3 -1
  106. data/doc/classes.graffle +356 -7194
  107. data/lib/generators/tr8n/templates/config/tr8n/config.yml +9 -1
  108. data/lib/generators/tr8n/templates/config/tr8n/site/shortcuts.yml +1 -1
  109. data/lib/generators/tr8n/templates/config/tr8n/tokens/decorations.yml +4 -1
  110. data/lib/generators/tr8n/tr8n_generator.rb +1 -1
  111. data/lib/tasks/tr8n.rake +1 -1
  112. data/lib/tr8n.rb +23 -0
  113. data/lib/tr8n/active_dumper.rb +1 -1
  114. data/lib/tr8n/cache.rb +1 -8
  115. data/lib/tr8n/cache_adapters/memcached.rb +1 -1
  116. data/lib/tr8n/config.rb +37 -1
  117. data/lib/tr8n/dictionary.rb +1 -1
  118. data/lib/tr8n/engine.rb +4 -1
  119. data/lib/tr8n/exception.rb +1 -1
  120. data/lib/tr8n/extender.rb +1 -1
  121. data/lib/tr8n/extensions/action_controller_extension.rb +5 -4
  122. data/lib/tr8n/extensions/action_view_extension.rb +71 -20
  123. data/lib/tr8n/extensions/array_extension.rb +14 -1
  124. data/lib/tr8n/extensions/date_extension.rb +1 -1
  125. data/lib/tr8n/extensions/fixnum_extension.rb +1 -1
  126. data/lib/tr8n/extensions/hash_extension.rb +1 -1
  127. data/lib/tr8n/extensions/string_extension.rb +1 -1
  128. data/lib/tr8n/extensions/time_extension.rb +1 -1
  129. data/lib/tr8n/ip_address.rb +1 -1
  130. data/lib/tr8n/key_registration_exception.rb +1 -1
  131. data/lib/tr8n/keyboard_mapping.rb +1 -1
  132. data/lib/tr8n/logger.rb +1 -1
  133. data/lib/tr8n/railtie.rb +1 -1
  134. data/lib/tr8n/site_map.rb +1 -1
  135. data/lib/tr8n/site_map_section.rb +1 -1
  136. data/lib/tr8n/token.rb +1 -1
  137. data/lib/tr8n/token_exception.rb +1 -1
  138. data/lib/tr8n/tokenized_label.rb +2 -12
  139. data/lib/tr8n/tokens/data_token.rb +1 -1
  140. data/lib/tr8n/tokens/decoration_token.rb +1 -1
  141. data/lib/tr8n/tokens/hidden_token.rb +1 -1
  142. data/lib/tr8n/tokens/method_token.rb +1 -1
  143. data/lib/tr8n/tokens/transform_token.rb +1 -1
  144. data/lib/tr8n/version.rb +25 -1
  145. data/local/tr8n_server/app/models/user.rb +1 -0
  146. data/local/tr8n_server/config/environments/test.rb +1 -1
  147. data/local/tr8n_server/config/tr8n/config.yml +45 -39
  148. data/local/tr8n_server/config/tr8n/site/shortcuts.yml +1 -1
  149. data/local/tr8n_server/db/schema.rb +2 -0
  150. data/spec/controllers/awards_controller_spec.rb +22 -0
  151. data/spec/controllers/base_controller_spec.rb +6 -0
  152. data/spec/controllers/dashboard_controller_spec.rb +23 -0
  153. data/spec/controllers/forum_controller_spec.rb +23 -0
  154. data/spec/controllers/glossary_controller_spec.rb +22 -0
  155. data/spec/controllers/help_controller_spec.rb +22 -0
  156. data/spec/controllers/language_cases_controller_spec.rb +13 -0
  157. data/spec/controllers/language_controller_spec.rb +10 -0
  158. data/spec/controllers/phrases_controller_spec.rb +22 -0
  159. data/spec/controllers/translations_controller_spec.rb +23 -0
  160. data/spec/controllers/translator_controller_spec.rb +22 -0
  161. data/spec/lib/tokenized_label_spec.rb +42 -0
  162. data/spec/lib/tokens/data_token_spec.rb +49 -0
  163. data/spec/lib/tokens/decoration_token_spec.rb +49 -0
  164. data/spec/lib/tokens/hidden_token_spec.rb +53 -0
  165. data/spec/lib/tokens/method_token_spec.rb +61 -0
  166. data/spec/lib/tokens/transform_token_spec.rb +51 -0
  167. data/spec/models/tr8n/daily_language_metric_spec.rb +5 -0
  168. data/spec/models/tr8n/date_rule_spec.rb +5 -0
  169. data/spec/models/tr8n/gender_list_rule_spec.rb +5 -0
  170. data/spec/models/tr8n/gender_rule_spec.rb +141 -0
  171. data/spec/models/tr8n/glossary_spec.rb +5 -0
  172. data/spec/models/tr8n/ip_location_spec.rb +5 -0
  173. data/spec/models/tr8n/language_case_rule_spec.rb +5 -0
  174. data/spec/models/tr8n/language_case_spec.rb +5 -0
  175. data/spec/models/tr8n/language_case_value_map_spec.rb +5 -0
  176. data/spec/models/tr8n/language_forum_abuse_report_spec.rb +5 -0
  177. data/spec/models/tr8n/language_forum_message_spec.rb +5 -0
  178. data/spec/models/tr8n/language_forum_topic_spec.rb +5 -0
  179. data/spec/models/tr8n/language_metric_spec.rb +5 -0
  180. data/spec/models/tr8n/language_rule_spec.rb +5 -0
  181. data/spec/models/tr8n/language_spec.rb +79 -0
  182. data/spec/models/tr8n/language_user_spec.rb +5 -0
  183. data/spec/models/tr8n/list_rule_spec.rb +5 -0
  184. data/spec/models/tr8n/monthly_language_metric_spec.rb +5 -0
  185. data/spec/models/tr8n/numeric_rule_spec.rb +162 -0
  186. data/spec/models/tr8n/sync_log_spec.rb +5 -0
  187. data/spec/models/tr8n/total_language_metric_spec.rb +5 -0
  188. data/spec/models/tr8n/translation_domain_spec.rb +5 -0
  189. data/spec/models/tr8n/translation_key_comment_spec.rb +5 -0
  190. data/spec/models/tr8n/translation_key_lock_spec.rb +5 -0
  191. data/spec/models/tr8n/translation_key_source_spec.rb +5 -0
  192. data/spec/models/tr8n/translation_key_spec.rb +118 -0
  193. data/spec/models/tr8n/translation_source_language_spec.rb +5 -0
  194. data/spec/models/tr8n/translation_source_spec.rb +5 -0
  195. data/spec/models/tr8n/translation_spec.rb +5 -0
  196. data/spec/models/tr8n/translation_vote_spec.rb +5 -0
  197. data/spec/models/tr8n/translator_following_spec.rb +5 -0
  198. data/spec/models/tr8n/translator_log_spec.rb +5 -0
  199. data/spec/models/tr8n/translator_metric_spec.rb +5 -0
  200. data/spec/models/tr8n/translator_report_spec.rb +5 -0
  201. data/spec/models/tr8n/translator_spec.rb +140 -0
  202. data/spec/spec_helper.rb +26 -27
  203. data/tr8n.gemspec +3 -1
  204. metadata +173 -50
  205. data/local/tr8n_server/db/migrate/20110930041150_create_tr8n_tables.rb +0 -372
  206. data/spec/fake_app.rb +0 -50
  207. data/spec/lib/data_token_spec.rb +0 -26
  208. data/spec/lib/transform_token_spec.rb +0 -22
  209. data/spec/models/translation_key_spec.rb +0 -63
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::ForumController do
4
+
5
+ describe "guest user" do
6
+ it "should be redirect to homepage" do
7
+ get :index
8
+ response.should redirect_to('/')
9
+ end
10
+ end
11
+
12
+ describe "logged in user" do
13
+ it "should redirect the guest user to homepage" do
14
+ @user = User.create(:first_name => "Mike", :gender => "male")
15
+ request.session[:user_id] = @user.id
16
+
17
+ get :index
18
+ response.should be_success
19
+ end
20
+ end
21
+
22
+
23
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::GlossaryController do
4
+
5
+ describe "guest user" do
6
+ it "should be redirect to homepage" do
7
+ get :index
8
+ response.should redirect_to('/')
9
+ end
10
+ end
11
+
12
+ describe "logged in user" do
13
+ it "should redirect the guest user to homepage" do
14
+ @user = User.create(:first_name => "Mike", :gender => "male")
15
+ request.session[:user_id] = @user.id
16
+
17
+ get :index
18
+ response.should be_success
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::HelpController do
4
+
5
+ describe "guest user" do
6
+ it "should be redirect to homepage" do
7
+ get :index
8
+ response.should redirect_to('/')
9
+ end
10
+ end
11
+
12
+ describe "logged in user" do
13
+ it "should redirect the guest user to homepage" do
14
+ @user = User.create(:first_name => "Mike", :gender => "male")
15
+ request.session[:user_id] = @user.id
16
+
17
+ get :index
18
+ response.should be_success
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::LanguageCasesController do
4
+
5
+ describe "guest user" do
6
+ it "should be redirect to homepage" do
7
+ get :index
8
+ response.should redirect_to('/')
9
+ end
10
+ end
11
+
12
+
13
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::LanguageController do
4
+
5
+ it "should redirect the guest user to homepage" do
6
+ get :index
7
+ response.should redirect_to('/')
8
+ end
9
+
10
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::PhrasesController do
4
+
5
+ describe "guest user" do
6
+ it "should be redirect to homepage" do
7
+ get :index
8
+ response.should redirect_to('/')
9
+ end
10
+ end
11
+
12
+ describe "logged in user" do
13
+ it "should redirect the guest user to homepage" do
14
+ @user = User.create(:first_name => "Mike", :gender => "male")
15
+ request.session[:user_id] = @user.id
16
+
17
+ get :index
18
+ response.should be_success
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::TranslationsController do
4
+
5
+
6
+ describe "guest user" do
7
+ it "should be redirect to homepage" do
8
+ get :index
9
+ response.should redirect_to('/')
10
+ end
11
+ end
12
+
13
+ describe "logged in user" do
14
+ it "should redirect the guest user to homepage" do
15
+ @user = User.create(:first_name => "Mike", :gender => "male")
16
+ request.session[:user_id] = @user.id
17
+
18
+ get :index
19
+ response.should be_success
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::TranslatorController do
4
+
5
+ describe "guest user" do
6
+ it "should be redirect to homepage" do
7
+ get :index
8
+ response.should redirect_to('/')
9
+ end
10
+ end
11
+
12
+ describe "logged in user" do
13
+ it "should redirect the guest user to homepage" do
14
+ @user = User.create(:first_name => "Mike", :gender => "male")
15
+ request.session[:user_id] = @user.id
16
+
17
+ get :index
18
+ response.should be_success
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,42 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::TokenizedLabel do
4
+ describe 'registering tokens' do
5
+
6
+ context "registering correct tokens" do
7
+ it "should register all tokens" do
8
+ str = 'Dear {user:gender}, you have [bold: {count:number|| new message}] in your mailbox!'
9
+
10
+ label = Tr8n::TokenizedLabel.new(str)
11
+ label.label.should eq(str)
12
+
13
+ label.tokens?.should be_true
14
+ label.data_tokens?.should be_true
15
+ label.decoration_tokens?.should be_true
16
+
17
+ label.data_tokens.count.should eq(2)
18
+ label.decoration_tokens.count.should eq(1)
19
+
20
+ label.tokens.count.should eq(3)
21
+
22
+ label.sanitized_tokens_hash.keys.should eq(["{user}", "{count}", "[bold: ]"])
23
+
24
+ label.translation_tokens?.should be_true
25
+ label.translation_tokens.count.should eq(3)
26
+
27
+ san_str = "Dear {user}, you have [bold: {count} new messages] in your mailbox!"
28
+ label.sanitized_label.should eq(san_str)
29
+
30
+ label.suggestion_tokens.should eq(["{user}", "{count}", "bold"])
31
+
32
+ label.words.should eq(["Dear", "User", "Have", "Bold", "Count", "Messages", "Your", "Mailbox"])
33
+
34
+ label.tokens.each do |token|
35
+ label.allowed_token?(token).should be_true
36
+ end
37
+
38
+ end
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,49 @@
1
+ require File.expand_path('../../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::Tokens::DataToken do
4
+ describe 'registering tokens' do
5
+
6
+ context "incorrect tokens" do
7
+ it "should not be registered" do
8
+ [
9
+ 'Hello {user:}',
10
+ 'Hello {} and welcome',
11
+ 'Hello {user::}'
12
+ ].each do |label|
13
+ Tr8n::Tokens::DataToken.parse(label).count.should eq(0)
14
+ end
15
+ end
16
+ end
17
+
18
+ context "correct tokens" do
19
+ it "should be registered" do
20
+ [
21
+ 'Hello {user}',
22
+ 'You have {count} messages',
23
+ 'You have {count:number}',
24
+ 'Hello {user:gender}',
25
+ 'Today is {today:date}',
26
+ 'Hello {user_list:list}',
27
+ '{long_token_name} like this message',
28
+ 'Hello {user1}',
29
+ 'Hello {user1:user}',
30
+ 'Hello {user1:user::pos} and welcome',
31
+ ].each do |label|
32
+ tokens = Tr8n::Tokens::DataToken.parse(label)
33
+ tokens.count.should eq(1)
34
+ tokens.first.class.name.should eq("Tr8n::Tokens::DataToken")
35
+ end
36
+
37
+ [
38
+ '{user} has {count} messages',
39
+ '{user1:user} has {count:number} messages'
40
+ ].each do |label|
41
+ tokens = Tr8n::Tokens::DataToken.parse(label)
42
+ tokens.count.should eq(2)
43
+ tokens.first.class.name.should eq("Tr8n::Tokens::DataToken")
44
+ end
45
+ end
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ require File.expand_path('../../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::Tokens::DecorationToken do
4
+ describe 'identifying tokens' do
5
+
6
+ context 'incorrect tokens' do
7
+ it 'should not be registered' do
8
+ [
9
+ 'Hello {bold}',
10
+ 'Hello [bold}',
11
+ 'Hello [bold]',
12
+ 'Hello [[bold]',
13
+ 'Hello [[bold]]',
14
+ 'Hello [[bold]]',
15
+ 'Hello [bold:]',
16
+ 'You have [bold {count}] messages',
17
+ ].each do |label|
18
+ Tr8n::Tokens::DecorationToken.parse(label).should be_empty
19
+ end
20
+ end
21
+ end
22
+
23
+ context 'correct tokens' do
24
+ it 'should be registered' do
25
+ [
26
+ 'Hello [bold: Mike]',
27
+ 'Hello [link: test]',
28
+ 'Hello [a: test]',
29
+ 'Hello [1: test]',
30
+ 'You have [bold: {count}] messages',
31
+ 'You have [bold: {count|| message}]',
32
+ '[link: {count} {_messages}]',
33
+ '[link: {count||message}]',
34
+ '[link: {count||person, people}]',
35
+ '[link: {user.name}]'
36
+ ].each do |label|
37
+ Tr8n::Tokens::DecorationToken.parse(label).count.should eq(1)
38
+ end
39
+
40
+ [
41
+ 'You have [link1: {msg_count|| message}] and [link2: {alert_count|| alert}]',
42
+ ].each do |label|
43
+ Tr8n::Tokens::DecorationToken.parse(label).count.should eq(2)
44
+ end
45
+ end
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path('../../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::Tokens::HiddenToken do
4
+ describe 'registering tokens' do
5
+
6
+ context "incorrect tokens" do
7
+ it "should not be registered" do
8
+ [
9
+ 'Hello {user:}',
10
+ 'Hello {} and welcome',
11
+ 'Hello {user::}',
12
+ 'You have {count} messages',
13
+ 'You have {count:number}',
14
+ 'Hello {user:gender}',
15
+ 'Today is {today:date}',
16
+ 'Hello {user_list:list}',
17
+ '{long_token_name} like this message',
18
+ 'Hello {user1}',
19
+ 'Hello {user1:user}',
20
+ 'Hello {user1:user::pos} and welcome',
21
+ '{user:gender|his,her}',
22
+ '{count:number|message}',
23
+ '{count:number||message}',
24
+ 'Dear {user:gender}, you have {count:number||message}',
25
+ '{count | message}',
26
+ '{count | message, messages}',
27
+ '{count:number | message, messages}',
28
+ '{user:gender | he, she, he/she}',
29
+ '{now:date | did, does, will do}',
30
+ '{users:list | all male, all female, mixed genders}',
31
+ '{count || message, messages}'
32
+ ].each do |label|
33
+ Tr8n::Tokens::HiddenToken.parse(label).count.should eq(0)
34
+ end
35
+ end
36
+ end
37
+
38
+ context "correct tokens" do
39
+ it "should be registered" do
40
+ [
41
+ '{_he_she}',
42
+ '{_posted__items}',
43
+ 'Hello {user.name} you have {count} {_posted__items}'
44
+ ].each do |label|
45
+ tokens = Tr8n::Tokens::HiddenToken.parse(label)
46
+ tokens.count.should eq(1)
47
+ tokens.first.class.name.should eq("Tr8n::Tokens::HiddenToken")
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,61 @@
1
+ require File.expand_path('../../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::Tokens::MethodToken do
4
+ describe 'registering tokens' do
5
+
6
+ context "incorrect tokens" do
7
+ it "should not be registered" do
8
+ [
9
+ 'Hello {user:}',
10
+ 'Hello {} and welcome',
11
+ 'Hello {user::}',
12
+ 'You have {count} messages',
13
+ 'You have {count:number}',
14
+ 'Hello {user:gender}',
15
+ 'Today is {today:date}',
16
+ 'Hello {user_list:list}',
17
+ '{long_token_name} like this message',
18
+ 'Hello {user1}',
19
+ 'Hello {user1:user}',
20
+ 'Hello {user1:user::pos} and welcome',
21
+ '{user:gender|his,her}',
22
+ '{count:number|message}',
23
+ '{count:number||message}',
24
+ 'Dear {user:gender}, you have {count:number||message}',
25
+ '{count | message}',
26
+ '{count | message, messages}',
27
+ '{count:number | message, messages}',
28
+ '{user:gender | he, she, he/she}',
29
+ '{now:date | did, does, will do}',
30
+ '{users:list | all male, all female, mixed genders}',
31
+ '{count || message, messages}'
32
+ ].each do |label|
33
+ Tr8n::Tokens::MethodToken.parse(label).count.should eq(0)
34
+ end
35
+ end
36
+ end
37
+
38
+ context "correct tokens" do
39
+ it "should be registered" do
40
+ [
41
+ 'Hello {user.name}',
42
+ '{user.name}',
43
+ '{user.name:gender}',
44
+ ].each do |label|
45
+ tokens = Tr8n::Tokens::MethodToken.parse(label)
46
+ tokens.count.should eq(1)
47
+ tokens.first.class.name.should eq("Tr8n::Tokens::MethodToken")
48
+ end
49
+
50
+ [
51
+ 'Hello {user.first_name} [bold: {user.last_name}]',
52
+ ].each do |label|
53
+ tokens = Tr8n::Tokens::MethodToken.parse(label)
54
+ tokens.count.should eq(2)
55
+ tokens.first.class.name.should eq("Tr8n::Tokens::MethodToken")
56
+ end
57
+ end
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,51 @@
1
+ require File.expand_path('../../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Tr8n::Tokens::TransformToken do
4
+ describe 'registering transform tokens' do
5
+
6
+ context 'incorrect tokens' do
7
+ it 'should not be registered' do
8
+ [
9
+ 'Hello {user}',
10
+ 'Hello {user:}',
11
+ 'Hello {user::}'
12
+ ].each do |label|
13
+ Tr8n::Tokens::TransformToken.parse(label).should be_empty
14
+ end
15
+ end
16
+ end
17
+
18
+ context 'correct tokens' do
19
+ it 'should be registered' do
20
+ [
21
+ '{user:gender|his,her}',
22
+ '{count:number|message}',
23
+ '{count:number||message}',
24
+ 'Dear {user:gender}, you have {count:number||message}',
25
+ '{count | message}',
26
+ '{count | message, messages}',
27
+ '{count:number | message, messages}',
28
+ '{user:gender | he, she, he/she}',
29
+ '{now:date | did, does, will do}',
30
+ '{users:list | all male, all female, mixed genders}',
31
+ '{count || message, messages}'
32
+ ].each do |label|
33
+ tokens = Tr8n::Tokens::TransformToken.parse(label)
34
+ tokens.count.should eq(1)
35
+ tokens.first.class.name.should eq("Tr8n::Tokens::TransformToken")
36
+ end
37
+
38
+ [
39
+ '{user:gender|He, She} received {count:number||message}',
40
+ '{user:gender | He, She } received {count:number || message, messages }'
41
+ ].each do |label|
42
+ tokens = Tr8n::Tokens::TransformToken.parse(label)
43
+ tokens.count.should eq(2)
44
+ tokens.first.class.name.should eq("Tr8n::Tokens::TransformToken")
45
+ end
46
+
47
+ end
48
+ end
49
+
50
+ end
51
+ end