wovnrb 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -0
  3. data/.gitignore +2 -0
  4. data/.rubocop.yml +1 -0
  5. data/.rubocop_todo.yml +308 -0
  6. data/Rakefile +13 -14
  7. data/lib/wovnrb.rb +43 -98
  8. data/lib/wovnrb/api_translator.rb +143 -0
  9. data/lib/wovnrb/headers.rb +78 -92
  10. data/lib/wovnrb/helpers/nokogumbo_helper.rb +1 -1
  11. data/lib/wovnrb/lang.rb +93 -125
  12. data/lib/wovnrb/railtie.rb +5 -7
  13. data/lib/wovnrb/services/glob.rb +3 -3
  14. data/lib/wovnrb/services/html_converter.rb +192 -0
  15. data/lib/wovnrb/services/html_replace_marker.rb +38 -0
  16. data/lib/wovnrb/services/wovn_logger.rb +8 -4
  17. data/lib/wovnrb/settings.rb +5 -3
  18. data/lib/wovnrb/store.rb +35 -26
  19. data/lib/wovnrb/text_caches/cache_base.rb +3 -2
  20. data/lib/wovnrb/text_caches/memory_cache.rb +2 -2
  21. data/lib/wovnrb/version.rb +1 -1
  22. data/test/fixtures/html/test.html +8 -0
  23. data/test/fixtures/html/test_translated.html +8 -0
  24. data/test/lib/api_translator_test.rb +109 -0
  25. data/test/lib/headers_test.rb +84 -55
  26. data/test/lib/lang_test.rb +157 -357
  27. data/test/lib/services/glob_test.rb +1 -1
  28. data/test/lib/services/html_converter_test.rb +166 -0
  29. data/test/lib/services/html_replace_marker_test.rb +75 -0
  30. data/test/lib/services/wovn_logger_test.rb +6 -6
  31. data/test/lib/store_test.rb +25 -69
  32. data/test/lib/text_caches/cache_base_test.rb +1 -1
  33. data/test/lib/text_caches/memory_cache_test.rb +10 -11
  34. data/test/lib/wovnrb_test.rb +77 -310
  35. data/test/test_helper.rb +22 -32
  36. data/wovnrb.gemspec +35 -44
  37. metadata +86 -205
  38. data/ext/dom/Makefile +0 -239
  39. data/lib/wovnrb/api_data.rb +0 -59
  40. data/lib/wovnrb/html_replacers/image_replacer.rb +0 -69
  41. data/lib/wovnrb/html_replacers/input_replacer.rb +0 -38
  42. data/lib/wovnrb/html_replacers/link_replacer.rb +0 -78
  43. data/lib/wovnrb/html_replacers/meta_replacer.rb +0 -28
  44. data/lib/wovnrb/html_replacers/replacer_base.rb +0 -49
  45. data/lib/wovnrb/html_replacers/script_replacer.rb +0 -39
  46. data/lib/wovnrb/html_replacers/text_replacer.rb +0 -21
  47. data/lib/wovnrb/html_replacers/unified_values/dst_swapping_targets_creator.rb +0 -76
  48. data/lib/wovnrb/html_replacers/unified_values/element_category.rb +0 -242
  49. data/lib/wovnrb/html_replacers/unified_values/node_swapping_targets_creator.rb +0 -134
  50. data/lib/wovnrb/html_replacers/unified_values/text_replacer.rb +0 -35
  51. data/lib/wovnrb/html_replacers/unified_values/text_scraper.rb +0 -152
  52. data/lib/wovnrb/html_replacers/unified_values/values_stack.rb +0 -65
  53. data/lib/wovnrb/services/url.rb +0 -12
  54. data/lib/wovnrb/services/value_agent.rb +0 -9
  55. data/test/fixtures/unified_values/site_html/simple_actual.html +0 -96
  56. data/test/fixtures/unified_values/site_html/simple_expected.json +0 -251
  57. data/test/fixtures/unified_values/site_html/wovn.io_actual.html +0 -686
  58. data/test/fixtures/unified_values/site_html/wovn.io_expected.json +0 -543
  59. data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_actual.html +0 -1024
  60. data/test/fixtures/unified_values/site_html/www.yahoo.co.jp_expected.json +0 -3345
  61. data/test/fixtures/unified_values/small_html/block_inside_inline_actual.html +0 -12
  62. data/test/fixtures/unified_values/small_html/block_inside_inline_expected.json +0 -22
  63. data/test/fixtures/unified_values/small_html/br_tag_actual.html +0 -10
  64. data/test/fixtures/unified_values/small_html/br_tag_expected.json +0 -12
  65. data/test/fixtures/unified_values/small_html/comment_tag_actual.html +0 -12
  66. data/test/fixtures/unified_values/small_html/comment_tag_expected.json +0 -10
  67. data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_actual.html +0 -7
  68. data/test/fixtures/unified_values/small_html/complex_text_with_html_entity_expected.json +0 -11
  69. data/test/fixtures/unified_values/small_html/deep_nested_block_actual.html +0 -14
  70. data/test/fixtures/unified_values/small_html/deep_nested_block_expected.json +0 -8
  71. data/test/fixtures/unified_values/small_html/deep_nested_inline_actual.html +0 -20
  72. data/test/fixtures/unified_values/small_html/deep_nested_inline_expected.json +0 -20
  73. data/test/fixtures/unified_values/small_html/empty_tag_actual.html +0 -10
  74. data/test/fixtures/unified_values/small_html/empty_tag_expected.json +0 -12
  75. data/test/fixtures/unified_values/small_html/empty_text_actual.html +0 -12
  76. data/test/fixtures/unified_values/small_html/empty_text_expected.json +0 -1
  77. data/test/fixtures/unified_values/small_html/ignore_tag_actual.html +0 -12
  78. data/test/fixtures/unified_values/small_html/ignore_tag_expected.json +0 -16
  79. data/test/fixtures/unified_values/small_html/ignored_class_actual.html +0 -10
  80. data/test/fixtures/unified_values/small_html/ignored_class_expected.json +0 -13
  81. data/test/fixtures/unified_values/small_html/img_actual.html +0 -12
  82. data/test/fixtures/unified_values/small_html/img_expected.json +0 -23
  83. data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_actual.html +0 -10
  84. data/test/fixtures/unified_values/small_html/nested_and_complex_wovn_ignore_expected.json +0 -16
  85. data/test/fixtures/unified_values/small_html/nested_text_value_actual.html +0 -10
  86. data/test/fixtures/unified_values/small_html/nested_text_value_expected.json +0 -12
  87. data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_actual.html +0 -10
  88. data/test/fixtures/unified_values/small_html/nested_text_value_mixed_plan_text_expected.json +0 -14
  89. data/test/fixtures/unified_values/small_html/option_tag_actual.html +0 -9
  90. data/test/fixtures/unified_values/small_html/option_tag_expected.json +0 -13
  91. data/test/fixtures/unified_values/small_html/text_different_inline_each_other_actual.html +0 -10
  92. data/test/fixtures/unified_values/small_html/text_different_inline_each_other_expected.json +0 -22
  93. data/test/fixtures/unified_values/small_html/text_in_svg_actual.html +0 -9
  94. data/test/fixtures/unified_values/small_html/text_in_svg_expected.json +0 -8
  95. data/test/fixtures/unified_values/small_html/text_with_html_entity_actual.html +0 -6
  96. data/test/fixtures/unified_values/small_html/text_with_html_entity_expected.json +0 -8
  97. data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_actual.html +0 -12
  98. data/test/fixtures/unified_values/small_html/unknown_or_custom_tag_expected.json +0 -24
  99. data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_actual.html +0 -12
  100. data/test/fixtures/unified_values/small_html/unnecessay_top_end_tag_expected.json +0 -14
  101. data/test/fixtures/unified_values/small_html/wovn_ignore_actual.html +0 -10
  102. data/test/fixtures/unified_values/small_html/wovn_ignore_expected.json +0 -13
  103. data/test/lib/api_data_test.rb +0 -83
  104. data/test/lib/html_replacers/image_replacer_test.rb +0 -165
  105. data/test/lib/html_replacers/input_replacer_test.rb +0 -140
  106. data/test/lib/html_replacers/link_replacer_test.rb +0 -328
  107. data/test/lib/html_replacers/meta_replacer_test.rb +0 -157
  108. data/test/lib/html_replacers/replacer_base_test.rb +0 -128
  109. data/test/lib/html_replacers/script_replacer_test.rb +0 -139
  110. data/test/lib/html_replacers/text_replacer_test.rb +0 -99
  111. data/test/lib/html_replacers/unified_values/dst_swapping_targets_creator_test.rb +0 -137
  112. data/test/lib/html_replacers/unified_values/element_category_test.rb +0 -49
  113. data/test/lib/html_replacers/unified_values/node_swapping_targets_creator_test.rb +0 -137
  114. data/test/lib/html_replacers/unified_values/text_replacer_test.rb +0 -270
  115. data/test/lib/html_replacers/unified_values/text_scraper_test.rb +0 -121
  116. data/test/lib/html_replacers/unified_values/values_stack_test.rb +0 -122
  117. data/test/lib/services/url_test.rb +0 -9
  118. data/test/lib/services/value_agent_test.rb +0 -32
  119. data/test/services/url_test.rb +0 -163
  120. data/values/values +0 -1
@@ -1,4 +1,3 @@
1
- # -*- encoding: UTF-8 -*-
2
1
  require 'test_helper'
3
2
 
4
3
  module Wovnrb
@@ -13,53 +12,53 @@ module Wovnrb
13
12
 
14
13
  def test_keys_exist
15
14
  Wovnrb::Lang::LANG.each do |k, l|
16
- assert(l.has_key?(:name))
17
- assert(l.has_key?(:code))
18
- assert(l.has_key?(:en))
15
+ assert(l.key?(:name))
16
+ assert(l.key?(:code))
17
+ assert(l.key?(:en))
19
18
  assert_equal(k, l[:code])
20
19
  end
21
20
  end
22
21
 
23
22
  def test_iso_639_1_normalization
24
- assert_equal('ar', Lang::iso_639_1_normalization('ar'))
25
- assert_equal('eu', Lang::iso_639_1_normalization('eu'))
26
- assert_equal('bn', Lang::iso_639_1_normalization('bn'))
27
- assert_equal('bg', Lang::iso_639_1_normalization('bg'))
28
- assert_equal('ca', Lang::iso_639_1_normalization('ca'))
29
- assert_equal('zh-Hans', Lang::iso_639_1_normalization('zh-CHS'))
30
- assert_equal('zh-Hant', Lang::iso_639_1_normalization('zh-CHT'))
31
- assert_equal('da', Lang::iso_639_1_normalization('da'))
32
- assert_equal('nl', Lang::iso_639_1_normalization('nl'))
33
- assert_equal('en', Lang::iso_639_1_normalization('en'))
34
- assert_equal('fi', Lang::iso_639_1_normalization('fi'))
35
- assert_equal('fr', Lang::iso_639_1_normalization('fr'))
36
- assert_equal('gl', Lang::iso_639_1_normalization('gl'))
37
- assert_equal('de', Lang::iso_639_1_normalization('de'))
38
- assert_equal('el', Lang::iso_639_1_normalization('el'))
39
- assert_equal('he', Lang::iso_639_1_normalization('he'))
40
- assert_equal('hu', Lang::iso_639_1_normalization('hu'))
41
- assert_equal('id', Lang::iso_639_1_normalization('id'))
42
- assert_equal('it', Lang::iso_639_1_normalization('it'))
43
- assert_equal('ja', Lang::iso_639_1_normalization('ja'))
44
- assert_equal('ko', Lang::iso_639_1_normalization('ko'))
45
- assert_equal('lv', Lang::iso_639_1_normalization('lv'))
46
- assert_equal('ms', Lang::iso_639_1_normalization('ms'))
47
- assert_equal('my', Lang::iso_639_1_normalization('my'))
48
- assert_equal('ne', Lang::iso_639_1_normalization('ne'))
49
- assert_equal('fa', Lang::iso_639_1_normalization('fa'))
50
- assert_equal('no', Lang::iso_639_1_normalization('no'))
51
- assert_equal('pl', Lang::iso_639_1_normalization('pl'))
52
- assert_equal('pt', Lang::iso_639_1_normalization('pt'))
53
- assert_equal('ru', Lang::iso_639_1_normalization('ru'))
54
- assert_equal('es', Lang::iso_639_1_normalization('es'))
55
- assert_equal('sw', Lang::iso_639_1_normalization('sw'))
56
- assert_equal('sv', Lang::iso_639_1_normalization('sv'))
57
- assert_equal('th', Lang::iso_639_1_normalization('th'))
58
- assert_equal('hi', Lang::iso_639_1_normalization('hi'))
59
- assert_equal('tr', Lang::iso_639_1_normalization('tr'))
60
- assert_equal('uk', Lang::iso_639_1_normalization('uk'))
61
- assert_equal('ur', Lang::iso_639_1_normalization('ur'))
62
- assert_equal('vi', Lang::iso_639_1_normalization('vi'))
23
+ assert_equal('ar', Lang.iso_639_1_normalization('ar'))
24
+ assert_equal('eu', Lang.iso_639_1_normalization('eu'))
25
+ assert_equal('bn', Lang.iso_639_1_normalization('bn'))
26
+ assert_equal('bg', Lang.iso_639_1_normalization('bg'))
27
+ assert_equal('ca', Lang.iso_639_1_normalization('ca'))
28
+ assert_equal('zh-Hans', Lang.iso_639_1_normalization('zh-CHS'))
29
+ assert_equal('zh-Hant', Lang.iso_639_1_normalization('zh-CHT'))
30
+ assert_equal('da', Lang.iso_639_1_normalization('da'))
31
+ assert_equal('nl', Lang.iso_639_1_normalization('nl'))
32
+ assert_equal('en', Lang.iso_639_1_normalization('en'))
33
+ assert_equal('fi', Lang.iso_639_1_normalization('fi'))
34
+ assert_equal('fr', Lang.iso_639_1_normalization('fr'))
35
+ assert_equal('gl', Lang.iso_639_1_normalization('gl'))
36
+ assert_equal('de', Lang.iso_639_1_normalization('de'))
37
+ assert_equal('el', Lang.iso_639_1_normalization('el'))
38
+ assert_equal('he', Lang.iso_639_1_normalization('he'))
39
+ assert_equal('hu', Lang.iso_639_1_normalization('hu'))
40
+ assert_equal('id', Lang.iso_639_1_normalization('id'))
41
+ assert_equal('it', Lang.iso_639_1_normalization('it'))
42
+ assert_equal('ja', Lang.iso_639_1_normalization('ja'))
43
+ assert_equal('ko', Lang.iso_639_1_normalization('ko'))
44
+ assert_equal('lv', Lang.iso_639_1_normalization('lv'))
45
+ assert_equal('ms', Lang.iso_639_1_normalization('ms'))
46
+ assert_equal('my', Lang.iso_639_1_normalization('my'))
47
+ assert_equal('ne', Lang.iso_639_1_normalization('ne'))
48
+ assert_equal('fa', Lang.iso_639_1_normalization('fa'))
49
+ assert_equal('no', Lang.iso_639_1_normalization('no'))
50
+ assert_equal('pl', Lang.iso_639_1_normalization('pl'))
51
+ assert_equal('pt', Lang.iso_639_1_normalization('pt'))
52
+ assert_equal('ru', Lang.iso_639_1_normalization('ru'))
53
+ assert_equal('es', Lang.iso_639_1_normalization('es'))
54
+ assert_equal('sw', Lang.iso_639_1_normalization('sw'))
55
+ assert_equal('sv', Lang.iso_639_1_normalization('sv'))
56
+ assert_equal('th', Lang.iso_639_1_normalization('th'))
57
+ assert_equal('hi', Lang.iso_639_1_normalization('hi'))
58
+ assert_equal('tr', Lang.iso_639_1_normalization('tr'))
59
+ assert_equal('uk', Lang.iso_639_1_normalization('uk'))
60
+ assert_equal('ur', Lang.iso_639_1_normalization('ur'))
61
+ assert_equal('vi', Lang.iso_639_1_normalization('vi'))
63
62
  end
64
63
 
65
64
  def test_get_code_with_valid_code
@@ -93,128 +92,129 @@ module Wovnrb
93
92
  def test_add_lang_code
94
93
  lang = Lang.new('zh-cht')
95
94
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
96
- assert_equal("http://www.facebook.com", lang.add_lang_code("http://www.facebook.com", 'subdomain', h))
95
+ assert_equal('http://www.facebook.com', lang.add_lang_code('http://www.facebook.com', 'subdomain', h))
97
96
  end
98
97
 
99
98
  def test_add_lang_code_relative_slash_href_url_with_path
100
99
  lang = Lang.new('fr')
101
100
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://fr.wovn.io/topics/44'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
102
- assert_equal("http://fr.wovn.io/topics/50", lang.add_lang_code("/topics/50", 'subdomain', h))
101
+ assert_equal('http://fr.wovn.io/topics/50', lang.add_lang_code('/topics/50', 'subdomain', h))
103
102
  end
104
103
 
105
104
  def test_add_lang_code_relative_dot_href_url_with_path
106
105
  lang = Lang.new('fr')
107
106
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://fr.wovn.io/topics/44'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
108
- assert_equal("http://fr.wovn.io/topics/44/topics/50", lang.add_lang_code("./topics/50", 'subdomain', h))
107
+ assert_equal('http://fr.wovn.io/topics/44/topics/50', lang.add_lang_code('./topics/50', 'subdomain', h))
109
108
  end
110
109
 
111
110
  def test_add_lang_code_relative_two_dots_href_url_with_path
112
111
  lang = Lang.new('fr')
113
112
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://fr.wovn.io/topics/44'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
114
- assert_equal("http://fr.wovn.io/topics/50", lang.add_lang_code("../topics/50", 'subdomain', h))
113
+ assert_equal('http://fr.wovn.io/topics/50', lang.add_lang_code('../topics/50', 'subdomain', h))
115
114
  end
116
115
 
117
116
  def test_add_lang_code_trad_chinese
118
117
  lang = Lang.new('zh-cht')
119
118
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
120
- assert_equal("http://zh-cht.wovn.io/topics/31", lang.add_lang_code("http://wovn.io/topics/31", 'subdomain', h))
119
+ assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('http://wovn.io/topics/31', 'subdomain', h))
121
120
  end
122
121
 
123
122
  def test_add_lang_code_trad_chinese_2
124
123
  lang = Lang.new('zh-cht')
125
124
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://zh-cht.wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
126
- assert_equal("http://zh-cht.wovn.io/topics/31", lang.add_lang_code("/topics/31", 'subdomain', h))
125
+ assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('/topics/31', 'subdomain', h))
127
126
  end
128
127
 
129
128
  def test_add_lang_code_trad_chinese_lang_in_link_already
130
129
  lang = Lang.new('zh-cht')
131
130
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://zh-cht.wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
132
- assert_equal("http://zh-cht.wovn.io/topics/31", lang.add_lang_code("http://zh-cht.wovn.io/topics/31", 'subdomain', h))
131
+ assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('http://zh-cht.wovn.io/topics/31', 'subdomain', h))
133
132
  end
134
133
 
135
134
  def test_add_lang_code_no_protocol
136
135
  lang = Lang.new('zh-cht')
137
136
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'https://zh-cht.google.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
138
- assert_equal("//zh-cht.google.com", lang.add_lang_code("//google.com", 'subdomain', h))
137
+ assert_equal('//zh-cht.google.com', lang.add_lang_code('//google.com', 'subdomain', h))
139
138
  end
140
139
 
141
140
  def test_add_lang_code_no_protocol_2
142
141
  lang = Lang.new('zh-cht')
143
142
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'https://zh-cht.wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
144
- assert_equal("//google.com", lang.add_lang_code("//google.com", 'subdomain', h))
143
+ assert_equal('//google.com', lang.add_lang_code('//google.com', 'subdomain', h))
145
144
  end
146
145
 
147
146
  def test_add_lang_code_invalid_url
148
147
  lang = Lang.new('zh-cht')
149
148
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
150
- assert_equal("http://www.facebook.com/sharer.php?u=http://wovn.io/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!", lang.add_lang_code("http://www.facebook.com/sharer.php?u=http://wovn.io/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!", 'subdomain', h))
149
+ assert_equal('http://www.facebook.com/sharer.php?u=http://wovn.io/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!', lang.add_lang_code('http://www.facebook.com/sharer.php?u=http://wovn.io/topics/50&amp;amp;t=Gourmet Tofu World: Vegetarian-Friendly Japanese Food is Here!', 'subdomain', h))
151
150
  end
152
151
 
153
152
  def test_add_lang_code_path_only_with_slash
154
153
  lang = Lang.new('zh-cht')
155
154
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
156
- assert_equal("http://zh-cht.wovn.io/topics/31", lang.add_lang_code("/topics/31", 'subdomain', h))
155
+ assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('/topics/31', 'subdomain', h))
157
156
  end
158
157
 
159
158
  def test_add_lang_code_path_only_no_slash
160
159
  lang = Lang.new('zh-cht')
161
160
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
162
- assert_equal("http://zh-cht.wovn.io/topics/31", lang.add_lang_code("topics/31", 'subdomain', h))
161
+ assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('topics/31', 'subdomain', h))
163
162
  end
164
163
 
165
164
  def test_add_lang_code_path_explicit_page_no_slash
166
165
  lang = Lang.new('zh-cht')
167
166
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
168
- assert_equal("http://zh-cht.wovn.io/topics/31.html", lang.add_lang_code("topics/31.html", 'subdomain', h))
167
+ assert_equal('http://zh-cht.wovn.io/topics/31.html', lang.add_lang_code('topics/31.html', 'subdomain', h))
169
168
  end
170
169
 
171
170
  def test_add_lang_code_path_explicit_page_with_slash
172
171
  lang = Lang.new('zh-cht')
173
172
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
174
- assert_equal("http://zh-cht.wovn.io/topics/31.html", lang.add_lang_code("/topics/31.html", 'subdomain', h))
173
+ assert_equal('http://zh-cht.wovn.io/topics/31.html', lang.add_lang_code('/topics/31.html', 'subdomain', h))
175
174
  end
176
175
 
177
176
  def test_add_lang_code_no_protocol_with_path_explicit_page
178
177
  lang = Lang.new('zh-cht')
179
178
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
180
- assert_equal("//www.google.com/topics/31.php", lang.add_lang_code("//www.google.com/topics/31.php", 'subdomain', h))
179
+ assert_equal('//www.google.com/topics/31.php', lang.add_lang_code('//www.google.com/topics/31.php', 'subdomain', h))
181
180
  end
182
181
 
183
182
  def test_add_lang_code_protocol_with_path_explicit_page
184
183
  lang = Lang.new('zh-cht')
185
184
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
186
- assert_equal("http://www.google.com/topics/31.php", lang.add_lang_code("http://www.google.com/topics/31.php", 'subdomain', h))
185
+ assert_equal('http://www.google.com/topics/31.php', lang.add_lang_code('http://www.google.com/topics/31.php', 'subdomain', h))
187
186
  end
188
187
 
189
188
  def test_add_lang_code_relative_path_double_period
190
189
  lang = Lang.new('zh-cht')
191
190
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
192
- assert_equal("http://zh-cht.wovn.io/topics/31", lang.add_lang_code("../topics/31", 'subdomain', h))
191
+ assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('../topics/31', 'subdomain', h))
193
192
  end
194
193
 
195
194
  def test_add_lang_code_relative_path_single_period
196
195
  lang = Lang.new('zh-cht')
197
196
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
198
- assert_equal("http://zh-cht.wovn.io/topics/31", lang.add_lang_code("./topics/31", 'subdomain', h))
197
+ assert_equal('http://zh-cht.wovn.io/topics/31', lang.add_lang_code('./topics/31', 'subdomain', h))
199
198
  end
200
199
 
201
200
  def test_add_lang_code_empty_href
202
201
  lang = Lang.new('zh-cht')
203
202
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
204
- assert_equal("", lang.add_lang_code("", 'subdomain', h))
203
+ assert_equal('', lang.add_lang_code('', 'subdomain', h))
205
204
  end
206
205
 
207
206
  def test_add_lang_code_hash_href
208
207
  lang = Lang.new('zh-cht')
209
208
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
210
- assert_equal("#", lang.add_lang_code("#", 'subdomain', h))
209
+ assert_equal('#', lang.add_lang_code('#', 'subdomain', h))
211
210
  end
212
211
 
213
212
  def test_add_lang_code_nil_href
214
213
  lang = Lang.new('en')
215
214
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings)
216
- assert_nil(lang.add_lang_code(nil,'path', h))
215
+ assert_nil(lang.add_lang_code(nil, 'path', h))
217
216
  end
217
+
218
218
  def test_add_lang_code_absolute_different_host
219
219
  lang = Lang.new('fr')
220
220
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
@@ -329,70 +329,70 @@ module Wovnrb
329
329
  assert_equal('/fr/index.html', lang.add_lang_code('index.html', 'path', headers))
330
330
  end
331
331
 
332
- def generate_body(param = "")
333
- case param
334
- when "ignore_parent"
335
- body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
336
- <div wovn-ignore><p>Hello</p></div>
337
- </body></html>"
338
- when "ignore_everything"
339
- body = "<html><body wovn-ignore><h1>Mr. Belvedere Fan Club</h1>
340
- <div><p>Hello</p></div>
341
- </body></html>"
342
- when "ignore_parent_translated_in_japanese"
343
- body = "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1><!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
344
- <div wovn-ignore=\"\"><p>Hello</p></div>
345
- </body></html>
346
- "
347
- when "translated_in_japanese"
348
- body = "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://page.com/\"></head><body><h1><!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
349
- <div><p><!--wovn-src:Hello-->こんにちは</p></div>
350
- </body></html>
351
- "
352
- when "ignore_everything_translated"
353
- body = "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body wovn-ignore=\"\"><h1>Mr. Belvedere Fan Club</h1>
354
- <div><p>Hello</p></div>
355
- </body></html>
356
- "
357
- when "empty"
358
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore><p>Hello</p></div></body></html>"
359
- when "empty_single_quote"
360
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=''><p>Hello</p></div></body></html>"
361
- when "empty_double_quote"
362
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=""><p>Hello</p></div></body></html>"
363
- when "value_single_quote"
364
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore='value'><p>Hello</p></div></body></html>"
365
- when "value_double_quote"
366
- body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"value\"><p>Hello</p></div></body></html>"
367
- when "empty_translated"
368
- body = "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"\"><p>Hello</p></div></body></html>\n"
369
- when "empty_single_quote_translated"
370
- body = "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"\"><p>Hello</p></div></body></html>\n"
371
- when "empty_double_quote_translated"
372
- body = "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"\"><p>Hello</p></div></body></html>\n"
373
- when "value_single_quote_translated"
374
- body = "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"value\"><p>Hello</p></div></body></html>\n"
375
- when "value_double_quote_translated"
376
- body = "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"value\"><p>Hello</p></div></body></html>\n"
377
- when "meta_img_alt_tags_translated"
378
- body = "<html lang=\"ja\"><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><meta name=\"description\" content=\"こんにちは\">\n<meta name=\"title\" content=\"こんにちは\">\n<meta property=\"og:title\" content=\"こんにちは\">\n<meta property=\"og:description\" content=\"こんにちは\">\n<meta property=\"twitter:title\" content=\"こんにちは\">\n<meta property=\"twitter:description\" content=\"こんにちは\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://page.com/\"></head>\n<body><h1><!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>\n<div><p><!--wovn-src:Hello-->こんにちは</p></div>\n<!--wovn-src:Hello--><img src=\"http://example.com/photo.png\" alt=\"こんにちは\">\n</body></html>\n"
379
- when "meta_img_alt_tags"
380
- body = "<html><head><meta name =\"description\" content=\"Hello\">\n<meta name=\"title\" content=\"Hello\">\n<meta property=\"og:title\" content=\"Hello\">\n<meta property=\"og:description\" content=\"Hello\">\n<meta property=\"twitter:title\" content=\"Hello\">\n<meta property=\"twitter:description\" content=\"Hello\"></head>
381
- <body><h1>Mr. Belvedere Fan Club</h1>
382
- <div><p>Hello</p></div>
383
- <img src=\"http://example.com/photo.png\" alt=\"Hello\">
384
- </body></html>"
385
- when "a_href_javascript"
386
- body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
387
- <div><p><a href=\"javascript:void(0)\">Hello</a></p></div>
388
- </body></html>"
389
- when "a_href_javascript_translated"
390
- body = "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://page.com/\"></head><body><h1><!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
391
- <div><p><a href=\"javascript:void(0)\"><!--wovn-src:Hello-->こんにちは</a></p></div>
392
- </body></html>
393
- "
394
- when "unified_values"
395
- body = <<-HTML
332
+ def generate_body(param = '')
333
+ body = case param
334
+ when 'ignore_parent'
335
+ "<html><body><h1>Mr. Belvedere Fan Club</h1>
336
+ <div wovn-ignore><p>Hello</p></div>
337
+ </body></html>"
338
+ when 'ignore_everything'
339
+ "<html><body wovn-ignore><h1>Mr. Belvedere Fan Club</h1>
340
+ <div><p>Hello</p></div>
341
+ </body></html>"
342
+ when 'ignore_parent_translated_in_japanese'
343
+ "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1><!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
344
+ <div wovn-ignore=\"\"><p>Hello</p></div>
345
+ </body></html>
346
+ "
347
+ when 'translated_in_japanese'
348
+ "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://page.com/\"></head><body><h1><!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
349
+ <div><p><!--wovn-src:Hello-->こんにちは</p></div>
350
+ </body></html>
351
+ "
352
+ when 'ignore_everything_translated'
353
+ "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body wovn-ignore=\"\"><h1>Mr. Belvedere Fan Club</h1>
354
+ <div><p>Hello</p></div>
355
+ </body></html>
356
+ "
357
+ when 'empty'
358
+ '<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore><p>Hello</p></div></body></html>'
359
+ when 'empty_single_quote'
360
+ "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=''><p>Hello</p></div></body></html>"
361
+ when 'empty_double_quote'
362
+ '<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=''><p>Hello</p></div></body></html>'
363
+ when 'value_single_quote'
364
+ "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore='value'><p>Hello</p></div></body></html>"
365
+ when 'value_double_quote'
366
+ '<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore="value"><p>Hello</p></div></body></html>'
367
+ when 'empty_translated'
368
+ "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"\"><p>Hello</p></div></body></html>\n"
369
+ when 'empty_single_quote_translated'
370
+ "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"\"><p>Hello</p></div></body></html>\n"
371
+ when 'empty_double_quote_translated'
372
+ "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"\"><p>Hello</p></div></body></html>\n"
373
+ when 'value_single_quote_translated'
374
+ "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"value\"><p>Hello</p></div></body></html>\n"
375
+ when 'value_double_quote_translated'
376
+ "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://ignore-page.com/\"></head><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"value\"><p>Hello</p></div></body></html>\n"
377
+ when 'meta_img_alt_tags_translated'
378
+ "<html lang=\"ja\"><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><meta name=\"description\" content=\"こんにちは\">\n<meta name=\"title\" content=\"こんにちは\">\n<meta property=\"og:title\" content=\"こんにちは\">\n<meta property=\"og:description\" content=\"こんにちは\">\n<meta property=\"twitter:title\" content=\"こんにちは\">\n<meta property=\"twitter:description\" content=\"こんにちは\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://page.com/\"></head>\n<body><h1><!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>\n<div><p><!--wovn-src:Hello-->こんにちは</p></div>\n<!--wovn-src:Hello--><img src=\"http://example.com/photo.png\" alt=\"こんにちは\">\n</body></html>\n"
379
+ when 'meta_img_alt_tags'
380
+ "<html><head><meta name =\"description\" content=\"Hello\">\n<meta name=\"title\" content=\"Hello\">\n<meta property=\"og:title\" content=\"Hello\">\n<meta property=\"og:description\" content=\"Hello\">\n<meta property=\"twitter:title\" content=\"Hello\">\n<meta property=\"twitter:description\" content=\"Hello\"></head>
381
+ <body><h1>Mr. Belvedere Fan Club</h1>
382
+ <div><p>Hello</p></div>
383
+ <img src=\"http://example.com/photo.png\" alt=\"Hello\">
384
+ </body></html>"
385
+ when 'a_href_javascript'
386
+ "<html><body><h1>Mr. Belvedere Fan Club</h1>
387
+ <div><p><a href=\"javascript:void(0)\">Hello</a></p></div>
388
+ </body></html>"
389
+ when 'a_href_javascript_translated'
390
+ "<html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://page.com/\"></head><body><h1><!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
391
+ <div><p><a href=\"javascript:void(0)\"><!--wovn-src:Hello-->こんにちは</a></p></div>
392
+ </body></html>
393
+ "
394
+ when 'unified_values'
395
+ <<-HTML
396
396
  <html><body>
397
397
  <div>
398
398
  a <span>b</span> c
@@ -404,10 +404,10 @@ module Wovnrb
404
404
  <span> b </span>c
405
405
  </div>
406
406
  </body></html>
407
- HTML
407
+ HTML
408
408
 
409
- when "unified_values_ja"
410
- body = <<-HTML
409
+ when 'unified_values_ja'
410
+ <<-HTML
411
411
  <html lang=\"ja\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"en\" href=\"http://page.com/\"></head><body>
412
412
  <div><!--wovn-src:
413
413
  a -->\u3042<span><!--wovn-src:b-->\u3044</span><!--wovn-src: c
@@ -420,258 +420,58 @@ module Wovnrb
420
420
  -->\u200B</div>
421
421
 
422
422
  </body></html>
423
- HTML
423
+ HTML
424
424
 
425
- else # "" case
426
- body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
427
- <div><p>Hello</p></div>
428
- </body></html>"
429
- end
425
+ else # "" case
426
+ "<html><body><h1>Mr. Belvedere Fan Club</h1>
427
+ <div><p>Hello</p></div>
428
+ </body></html>"
429
+ end
430
430
 
431
- return body
431
+ body
432
432
  end
433
433
 
434
- def generate_dom(param='')
434
+ def generate_dom(param = '')
435
435
  Wovnrb.to_dom(generate_body(param))
436
436
  end
437
437
 
438
438
  def generate_values
439
439
  values = {}
440
440
  values['text_vals'] = {
441
- 'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
442
- 'Mr. Belvedere Fan Club' => {'ja' => [{'data' => 'ベルベデアさんファンクラブ'}]}
441
+ 'Hello' => { 'ja' => [{ 'data' => 'こんにちは' }] },
442
+ 'Mr. Belvedere Fan Club' => { 'ja' => [{ 'data' => 'ベルベデアさんファンクラブ' }] }
443
443
  }
444
- return values
444
+ values
445
445
  end
446
446
 
447
447
  def generate_unified_values
448
448
  {
449
- 'html_text_vals' => {
450
- 'a<span>b</span>c' =>
451
- { 'ja' =>
452
- [{ 'data' => 'あ<span>い</span>う' }] },
453
- 'a<span>b</span>' =>
454
- { 'ja' =>
455
- [{ 'data' => '<span>い</span>う' }] },
456
- '<span>b</span>c' =>
457
- { 'ja' =>
458
- [{ 'data' => 'あ<span>い</span>' }] }
459
-
460
- }
449
+ 'html_text_vals' => {
450
+ 'a<span>b</span>c' =>
451
+ { 'ja' =>
452
+ [{ 'data' => 'あ<span>い</span>う' }] },
453
+ 'a<span>b</span>' =>
454
+ { 'ja' =>
455
+ [{ 'data' => '<span>い</span>う' }] },
456
+ '<span>b</span>c' =>
457
+ { 'ja' =>
458
+ [{ 'data' => 'あ<span>い</span>' }] }
459
+
460
+ }
461
461
  }
462
462
  end
463
463
 
464
- def test_switch_dom_lang_for_simplified_chinese
465
- lang = Lang.new('zh-CHS')
466
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
467
- dom = generate_dom
468
- values = generate_values
469
- values['text_vals']['Simplified Chinese'] = {'zh-CHS' => [{data: 'test'}]}
470
- url = h.url
471
-
472
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
473
- assert(/hreflang="zh-Hans"/ =~ swapped_body)
474
- assert(!(/hreflang="zh-CHS"/ =~ swapped_body))
475
- assert(/html lang="zh-Hans"/ =~ swapped_body)
476
- assert(!(/html lang="zh-CHS"/ =~ swapped_body))
477
- end
478
-
479
- def test_switch_dom_lang_for_traditional_chinese
480
- lang = Lang.new('zh-CHT')
481
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
482
- dom = generate_dom
483
- values = generate_values
484
- values['text_vals']['Traditional Chinese'] = {'zh-CHT' => [{data: 'test'}]}
485
- url = h.url
486
-
487
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
488
- assert(/hreflang="zh-Hant"/ =~ swapped_body)
489
- assert(!(/hreflang="zh-CHT"/ =~ swapped_body))
490
- assert(/html lang="zh-Hant"/ =~ swapped_body)
491
- assert(!(/html lang="zh-CHT"/ =~ swapped_body))
492
- end
493
-
494
- def test_switch_dom_lang_when_proxy_change_protocol
495
- lang = Lang.new('en')
496
- env = Wovnrb.get_env('url' => 'http://page.com', 'HTTP_X_FORWARDED_PROTO' => 'https')
497
- header = Wovnrb::Headers.new(env, Wovnrb.get_settings)
498
- html = '<html></html>'
499
- dom = Wovnrb.to_dom(html)
500
- url = header.url
501
- swapped_body = lang.switch_dom_lang(dom, Store.instance, generate_values, url, header)
502
- assert(swapped_body.include?('hreflang="ja" href="https://page.com/ja/"'))
503
- assert(swapped_body.include?('hreflang="en" href="https://page.com/"'))
504
- end
505
-
506
- def test_switch_lang
507
- lang = Lang.new('ja')
508
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
509
- dom = generate_dom
510
- values = generate_values
511
- url = h.url
512
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
513
- assert_equal(generate_body('translated_in_japanese'), swapped_body)
514
- end
515
-
516
- def test_switch_lang_unified_values
517
- lang = Lang.new('ja')
518
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
519
- dom = generate_dom('unified_values')
520
- values = generate_unified_values
521
- url = h.url
522
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
523
- assert_equal(generate_body('unified_values_ja'), swapped_body)
524
- end
525
-
526
- def test_switch_lang_with_html_fragment
527
- lang = Lang.new('ja')
528
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
529
- dom = Helpers::NokogumboHelper::parse_fragment('<span>Hello</span>')
530
- values = generate_values
531
- url = h.url
532
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
533
- assert_equal('<span><!--wovn-src:Hello-->こんにちは</span>', swapped_body)
534
- end
535
-
536
- def test_switch_lang_href_javascript
537
- lang = Lang.new('ja')
538
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
539
- dom = generate_dom('a_href_javascript')
540
- values = generate_values
541
- url = h.url
542
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
543
- assert_equal(generate_body('a_href_javascript_translated'), swapped_body)
544
- end
545
-
546
- def test_switch_lang_meta_img_alt_tags
547
- lang = Lang.new('ja')
548
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
549
- dom = generate_dom('meta_img_alt_tags')
550
- values = generate_values
551
- url = h.url
552
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
553
- assert_equal(generate_body('meta_img_alt_tags_translated'), swapped_body)
554
- end
555
-
556
- def test_switch_lang_wovn_ignore
557
- lang = Lang.new('ja')
558
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
559
- dom = generate_dom('ignore_parent')
560
- values = generate_values
561
- url = h.url
562
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
563
- assert_equal(generate_body('ignore_parent_translated_in_japanese'), swapped_body)
564
- end
565
-
566
- def test_switch_lang_wovn_ignore_everything
567
- lang = Lang.new('ja')
568
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
569
- dom = generate_dom('ignore_everything')
570
- values = generate_values
571
- url = h.url
572
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
573
- assert_equal(generate_body('ignore_everything_translated'), swapped_body)
574
- end
575
-
576
- def test_switch_lang_wovn_ignore_empty
577
- lang = Lang.new('ja')
578
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
579
- dom = generate_dom('empty')
580
- values = generate_values
581
- url = h.url
582
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
583
- assert_equal(generate_body('empty_translated'), swapped_body)
584
- end
585
-
586
- def test_switch_lang_wovn_ignore_empty_single_quote
587
- lang = Lang.new('ja')
588
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
589
- dom = generate_dom('empty_single_quote')
590
- values = generate_values
591
- url = h.url
592
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
593
- assert_equal(generate_body('empty_single_quote_translated'), swapped_body)
594
- end
595
-
596
- def test_switch_lang_wovn_ignore_empty_double_quote
597
- lang = Lang.new('ja')
598
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
599
- dom = generate_dom('empty_double_quote')
600
- values = generate_values
601
- url = h.url
602
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
603
- assert_equal(generate_body('empty_double_quote_translated'), swapped_body)
604
- end
605
-
606
- def test_switch_lang_wovn_ignore_value_single_quote
607
- lang = Lang.new('ja')
608
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
609
- dom = generate_dom('value_single_quote')
610
- values = generate_values
611
- url = h.url
612
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
613
- assert_equal(generate_body('value_single_quote_translated'), swapped_body)
614
- end
615
-
616
- def test_switch_lang_wovn_ignore_value_double_quote
617
- lang = Lang.new('ja')
618
- h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://ignore-page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
619
- dom = generate_dom('value_double_quote')
620
- values = generate_values
621
- url = h.url
622
- swapped_body = lang.switch_dom_lang(dom, Store.instance, values, url, h)
623
- assert_equal(generate_body('value_double_quote_translated'), swapped_body)
624
- end
625
-
626
464
  def test_get_code_from_custom_lang
627
465
  store = Store.instance
628
- store.settings['custom_lang_aliases'] = {'ja' => 'staging-ja'}
466
+ store.settings['custom_lang_aliases'] = { 'ja' => 'staging-ja' }
629
467
  assert_equal('ja', Wovnrb::Lang.get_code('staging-ja'))
630
468
  end
631
469
 
632
470
  def test_add_lang_code_with_custom_lang_aliases
633
471
  lang = Lang.new('fr')
634
- Store.instance.update_settings({'custom_lang_aliases' => {'fr' => 'staging-fr'}})
472
+ Store.instance.update_settings('custom_lang_aliases' => { 'fr' => 'staging-fr' })
635
473
  h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://wovn.io'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
636
- assert_equal("http://staging-fr.wovn.io/topics/50", lang.add_lang_code("/topics/50", 'subdomain', h))
637
- end
638
-
639
- def test_switch_dom_lang_for_keeping_originl_encoding_decoding
640
- lang = Lang.new('ja')
641
- header = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings)
642
- html = <<-HTML
643
- <head>
644
- <link rel="stylesheet" type="text/css" href="%3Ca%3E%E3%81%B5%E3%82%86%3C%2Fa%3E/theme.css">
645
- <link rel="stylesheet" type="text/css" href="テスト.css">
646
- </head>
647
- <ul>
648
- <li><a href="http://page.com/%e5%ba%83%e5%b0%be">encoded japanese path</a></li>
649
- <li><a href="http://page.com/テスト/DxA9J">no encoded japanese path</a></li>
650
- <li><a href="http://page.com/#DnE897">decoded invalid path</a></li>
651
- <li><a href="http://page.com/%23DnE897">encoded invalid path</a>
652
- </ul>
653
- HTML
654
-
655
- dom = Wovnrb.to_dom(html)
656
- url = header.url
657
-
658
- swapped_body = lang.switch_dom_lang(dom, Store.instance, generate_values, url, header)
659
- assert(swapped_body.include?('<link rel="stylesheet" type="text/css" href="%3Ca%3E%E3%81%B5%E3%82%86%3C%2Fa%3E/theme.css">'))
660
- assert(swapped_body.include?('<link rel="stylesheet" type="text/css" href="テスト.css">'))
661
- assert(swapped_body.include?('<a href="http://page.com/ja/%e5%ba%83%e5%b0%be">encoded japanese path</a>'))
662
- assert(swapped_body.include?('<a href="http://page.com/ja/テスト/DxA9J">no encoded japanese path</a>'))
663
- assert(swapped_body.include?('<a href="http://page.com/ja/#DnE897">decoded invalid path</a>'))
664
- assert(swapped_body.include?('<a href="http://page.com/ja/%23DnE897">encoded invalid path</a>'))
665
- end
666
-
667
- def test_switch_dom_lang_with_invalid_link
668
- lang = Lang.new('en')
669
- header = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings)
670
- html = '<a href="※ http://invalid.example.com">無効なリンク</a>'
671
- dom = Wovnrb.to_dom(html)
672
- url = header.url
673
- swapped_body = lang.switch_dom_lang(dom, Store.instance, generate_values, url, header)
674
- assert(swapped_body.include?('html'))
474
+ assert_equal('http://staging-fr.wovn.io/topics/50', lang.add_lang_code('/topics/50', 'subdomain', h))
675
475
  end
676
476
  end
677
477
  end