wovnrb 0.2.10 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc2f6b32bbb1a1ae62581625150e7192a97e7536
4
- data.tar.gz: 700ff16d073253ea5e761a1fbba50fa31db4d293
3
+ metadata.gz: f1372d56b49f0c1760b2b4bdaf7041f014cb8d59
4
+ data.tar.gz: 41a174a792c2dd1d43d7efef0fda9be1165fa6eb
5
5
  SHA512:
6
- metadata.gz: c8081098e724536d3eaed17c9ba986f1d09a5fcfad40b59cc34393cac266f3dff2cddb42c9c383d334a8a8c60d884fa98304bdd76f18a81628e7e761269f27b2
7
- data.tar.gz: 09747ebd43f2298e0e2daea26b77603bae9fd2bb43cf2334c20ef80d8fde8cb8d4f8ee8db801d74c8989a9828b1072461962ad8605af774c3e60c46670b45284
6
+ metadata.gz: 9d3a94f093c7829e0c5c19bf3a68e8e3ba646df5516bb8cd7bc45487b37cd6b52796d8e2c36a4fb46c7501b466b4d6986d60e5f216d382f92a005a0d74f3f6f9
7
+ data.tar.gz: e73d5a1d9a010a3b438aa6dd77cad5b03565184ccfedc0f95de2baf9713541c179edb658ac534b59e80402167ffae9c26d42b9f187e387b5d8bce286051677fa
@@ -35,6 +35,7 @@ module Wovnrb
35
35
  if node.get_attribute('alt')
36
36
  alt = node.get_attribute('alt').strip
37
37
  if @text_index[alt] && @text_index[alt][lang.lang_code] && @text_index[alt][lang.lang_code].size > 0
38
+ add_comment_node(node, alt)
38
39
  node.attribute('alt').value = replace_text(alt, @text_index[alt][lang.lang_code][0]['data'])
39
40
  end
40
41
  end
@@ -10,6 +10,7 @@ module Wovnrb
10
10
  next if wovn_ignore?(node)
11
11
 
12
12
  href = node.get_attribute('href')
13
+ next if href =~ /^\s*\{\{.+\}\}\s*$/
13
14
  new_href = lang.add_lang_code(href, @pattern, @headers)
14
15
  node.set_attribute('href', new_href)
15
16
  end
@@ -14,6 +14,18 @@ module Wovnrb
14
14
  wovn_ignore?(node.parent)
15
15
  end
16
16
 
17
+ # Add comment-node node to remember original src
18
+ # <title> may not contain other markup, so add comment-node to node's previous
19
+ # @see https://www.w3.org/TR/html401/struct/global.html#h-7.4.2
20
+ def add_comment_node(node, text)
21
+ comment_node = Nokogiri::XML::Comment.new(node, "wovn-src:#{text}")
22
+ if node.parent.name == 'title'
23
+ node.parent.add_previous_sibling(comment_node)
24
+ else
25
+ node.add_previous_sibling(comment_node)
26
+ end
27
+ end
28
+
17
29
  def replace_text(from, to)
18
30
  from.gsub(/\A(\s*)[\S\s]*?(\s*)\Z/, '\1' + to + '\2')
19
31
  end
@@ -11,6 +11,7 @@ module Wovnrb
11
11
  node_text = node.content.strip
12
12
  # shouldn't need size check, but for now...
13
13
  if @text_index[node_text] && @text_index[node_text][lang.lang_code] && @text_index[node_text][lang.lang_code].size > 0
14
+ add_comment_node(node, node_text)
14
15
  node.content = replace_text(node.content, @text_index[node_text][lang.lang_code][0]['data'])
15
16
  end
16
17
  end
@@ -1,3 +1,3 @@
1
1
  module Wovnrb
2
- VERSION = "0.2.10"
2
+ VERSION = "0.2.11"
3
3
  end
@@ -25,6 +25,7 @@ module Wovnrb
25
25
  img = dom.xpath('//img')[0]
26
26
  assert_equal('prefix::http://test.com/ttt.img', img.get_attribute('src'))
27
27
  assert_equal('こんにちは', img.get_attribute('alt'))
28
+ assert_equal('wovn-src:Hello', img.previous.content)
28
29
  end
29
30
 
30
31
  def test_replace_relative_path
@@ -44,6 +45,7 @@ module Wovnrb
44
45
 
45
46
  img = dom.xpath('//img')[0]
46
47
  assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
48
+ assert_equal(nil, img.previous)
47
49
  end
48
50
 
49
51
  def test_replace_root_path
@@ -63,6 +65,7 @@ module Wovnrb
63
65
 
64
66
  img = dom.xpath('//img')[0]
65
67
  assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
68
+ assert_equal(nil, img.previous)
66
69
  end
67
70
 
68
71
  def test_replace_absolute_path
@@ -82,6 +85,7 @@ module Wovnrb
82
85
 
83
86
  img = dom.xpath('//img')[0]
84
87
  assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
88
+ assert_equal(nil, img.previous)
85
89
  end
86
90
  end
87
91
  end
@@ -33,6 +33,21 @@ module Wovnrb
33
33
  assert_equal('/index.html', link)
34
34
  end
35
35
 
36
+ def test_replace_mustache
37
+ replacer = LinkReplacer.new('query', get_header)
38
+ dom = Wovnrb.get_dom('<a href="{{hello}}">link text</a>')
39
+ replacer.replace(dom, Lang.new('en'))
40
+
41
+ link = dom.xpath('//a')[0].get_attribute('href')
42
+ assert_equal('{{hello}}', link)
43
+
44
+ dom = Wovnrb.get_dom('<a href=" {{hello}} ">link text</a>')
45
+ replacer.replace(dom, Lang.new('en'))
46
+
47
+ link = dom.xpath('//a')[0].get_attribute('href')
48
+ assert_equal(' {{hello}} ', link)
49
+ end
50
+
36
51
 
37
52
 
38
53
  def get_header
@@ -12,8 +12,9 @@ module Wovnrb
12
12
  dom = Wovnrb.get_dom('Hello')
13
13
  replacer.replace(dom, Lang.new('ja'))
14
14
 
15
- content = dom.xpath('//text()')[0].content
16
- assert_equal('こんにちは', content)
15
+ node = dom.xpath('//text()')[0]
16
+ assert_equal('こんにちは', node.content)
17
+ assert_equal('wovn-src:Hello', node.previous.content)
17
18
  end
18
19
 
19
20
  def test_replace_multiple
@@ -25,10 +26,12 @@ module Wovnrb
25
26
  dom = Wovnrb.get_dom('<span>Hello</span><span>Bye</span>')
26
27
  replacer.replace(dom, Lang.new('ja'))
27
28
 
28
- content = dom.xpath('//text()')[0].content
29
- content2 = dom.xpath('//text()')[1].content
30
- assert_equal('こんにちは', content)
31
- assert_equal('さようなら', content2)
29
+ node = dom.xpath('//text()')[0]
30
+ node2 = dom.xpath('//text()')[1]
31
+ assert_equal('こんにちは', node.content)
32
+ assert_equal('wovn-src:Hello', node.previous.content)
33
+ assert_equal('さようなら', node2.content)
34
+ assert_equal('wovn-src:Bye', node2.previous.content)
32
35
  end
33
36
 
34
37
  def test_replace_wovn_ignore
@@ -39,8 +42,9 @@ module Wovnrb
39
42
  dom = Wovnrb.get_dom('<div wovn-ignore>Hello</div>')
40
43
  replacer.replace(dom, Lang.new('ja'))
41
44
 
42
- content = dom.xpath('//text()')[0].content
43
- assert_equal('Hello', content)
45
+ node = dom.xpath('//text()')[0]
46
+ assert_equal('Hello', node.content)
47
+ assert_equal(nil, node.previous)
44
48
  end
45
49
  end
46
50
  end
@@ -325,7 +325,8 @@ module Wovnrb
325
325
  <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">
326
326
  </head>
327
327
  <body>
328
- <h1>ベルベデアさんファンクラブ</h1>
328
+ <h1>
329
+ <!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
329
330
  <div wovn-ignore=\"\"><p>Hello</p></div>
330
331
  </body>
331
332
  </html>
@@ -337,8 +338,9 @@ module Wovnrb
337
338
  <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">
338
339
  </head>
339
340
  <body>
340
- <h1>ベルベデアさんファンクラブ</h1>
341
- <div><p>こんにちは</p></div>
341
+ <h1>
342
+ <!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
343
+ <div><p><!--wovn-src:Hello-->こんにちは</p></div>
342
344
  </body>
343
345
  </html>
344
346
  "
@@ -375,7 +377,8 @@ module Wovnrb
375
377
  when "value_double_quote_translated"
376
378
  body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.ignore-page.com/\">\n</head>\n<body>\n<h1>Mr.BelvedereFanClub</h1>\n<div wovn-ignore=\"value\"><p>Hello</p></div>\n</body>\n</html>\n"
377
379
  when "meta_img_alt_tags_translated"
378
- body = "<html lang=\"ja\">\n<head>\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<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=\"こんにちは\">\n<link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">\n</head>\n<body>\n<h1>ベルベデアさんファンクラブ</h1>\n<div><p>こんにちは</p></div>\n<img src=\"http://example.com/photo.png\" alt=\"こんにちは\">\n</body>\n</html>\n"
380
+ body = "<html lang=\"ja\">\n<head>\n<script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<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=\"こんにちは\">\n<link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">\n</head>\n<body>\n<h1>
381
+ <!--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>\n</html>\n"
379
382
  when "meta_img_alt_tags"
380
383
  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
384
  <body><h1>Mr. Belvedere Fan Club</h1>
@@ -66,8 +66,9 @@ class WovnrbTest < Minitest::Test
66
66
  <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">
67
67
  </head>
68
68
  <body>
69
- <h1>ベルベデアさんファンクラブ</h1>
70
- <div><p>こんにちは</p></div>
69
+ <h1>
70
+ <!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
71
+ <div><p><!--wovn-src:Hello-->こんにちは</p></div>
71
72
  </body>
72
73
  </html>
73
74
  "
@@ -91,8 +92,9 @@ class WovnrbTest < Minitest::Test
91
92
  <link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">
92
93
  </head>
93
94
  <body>
94
- <h1>ベルベデアさんファンクラブ</h1>
95
- <div><p>こんにちは</p></div>
95
+ <h1>
96
+ <!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
97
+ <div><p><!--wovn-src:Hello-->こんにちは</p></div>
96
98
  </body>
97
99
  </html>
98
100
  "
@@ -120,8 +122,9 @@ class WovnrbTest < Minitest::Test
120
122
  <link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">
121
123
  </head>
122
124
  <body>
123
- <h1>ベルベデアさんファンクラブ</h1>
124
- <div><p>こんにちは</p></div>
125
+ <h1>
126
+ <!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
127
+ <div><p><!--wovn-src:Hello-->こんにちは</p></div>
125
128
  </body>
126
129
  </html>
127
130
  "
@@ -147,8 +150,9 @@ class WovnrbTest < Minitest::Test
147
150
  <link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">
148
151
  </head>
149
152
  <body>
150
- <h1>ベルベデアさんファンクラブ</h1>
151
- <div><p>こんにちは</p></div>
153
+ <h1>
154
+ <!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
155
+ <div><p><!--wovn-src:Hello-->こんにちは</p></div>
152
156
  </body>
153
157
  </html>
154
158
  "
@@ -172,8 +176,9 @@ class WovnrbTest < Minitest::Test
172
176
  <link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">
173
177
  </head>
174
178
  <body>
175
- <h1>ベルベデアさんファンクラブ</h1>
176
- <div><p>こんにちは</p></div>
179
+ <h1>
180
+ <!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
181
+ <div><p><!--wovn-src:Hello-->こんにちは</p></div>
177
182
  </body>
178
183
  </html>
179
184
  "
@@ -196,8 +201,9 @@ class WovnrbTest < Minitest::Test
196
201
  <script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=#{Wovnrb::VERSION}\"> </script><!--<noscript><div>test</div></noscript>--><link rel=\"alternate\" hreflang=\"ja\" href=\"http://ja.page.com/\">
197
202
  </head>
198
203
  <body>
199
- <h1>ベルベデアさんファンクラブ</h1>
200
- <div><p>こんにちは</p></div>
204
+ <h1>
205
+ <!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>
206
+ <div><p><!--wovn-src:Hello-->こんにちは</p></div>
201
207
  </body>
202
208
  </html>
203
209
  "
data/wovnrb.gemspec CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  #spec.extensions = spec.files.grep(%r{/extconf\.rb$})
27
27
 
28
28
  spec.add_dependency "nokogumbo", "1.3.0"
29
+ spec.add_dependency "nokogiri", "< 1.6.8.1"
29
30
  spec.add_dependency "activesupport", "< 5"
30
31
  spec.add_dependency "lz4-ruby"
31
32
 
@@ -48,7 +49,8 @@ Gem::Specification.new do |spec|
48
49
  spec.add_development_dependency "rake-compiler"
49
50
  spec.add_development_dependency "geminabox"
50
51
  spec.add_development_dependency "timecop"
51
- spec.add_development_dependency "webmock"
52
+ spec.add_development_dependency "webmock", '~> 2.1.0'
52
53
  spec.add_development_dependency "simplecov"
54
+ spec.add_development_dependency "public_suffix", '~> 1.4.6'
53
55
  end
54
56
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wovnrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Sandford
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-10-11 00:00:00.000000000 Z
12
+ date: 2017-01-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogumbo
@@ -25,6 +25,20 @@ dependencies:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
27
  version: 1.3.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: nokogiri
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "<"
33
+ - !ruby/object:Gem::Version
34
+ version: 1.6.8.1
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: 1.6.8.1
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: activesupport
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -267,16 +281,16 @@ dependencies:
267
281
  name: webmock
268
282
  requirement: !ruby/object:Gem::Requirement
269
283
  requirements:
270
- - - ">="
284
+ - - "~>"
271
285
  - !ruby/object:Gem::Version
272
- version: '0'
286
+ version: 2.1.0
273
287
  type: :development
274
288
  prerelease: false
275
289
  version_requirements: !ruby/object:Gem::Requirement
276
290
  requirements:
277
- - - ">="
291
+ - - "~>"
278
292
  - !ruby/object:Gem::Version
279
- version: '0'
293
+ version: 2.1.0
280
294
  - !ruby/object:Gem::Dependency
281
295
  name: simplecov
282
296
  requirement: !ruby/object:Gem::Requirement
@@ -291,6 +305,20 @@ dependencies:
291
305
  - - ">="
292
306
  - !ruby/object:Gem::Version
293
307
  version: '0'
308
+ - !ruby/object:Gem::Dependency
309
+ name: public_suffix
310
+ requirement: !ruby/object:Gem::Requirement
311
+ requirements:
312
+ - - "~>"
313
+ - !ruby/object:Gem::Version
314
+ version: 1.4.6
315
+ type: :development
316
+ prerelease: false
317
+ version_requirements: !ruby/object:Gem::Requirement
318
+ requirements:
319
+ - - "~>"
320
+ - !ruby/object:Gem::Version
321
+ version: 1.4.6
294
322
  description: Ruby gem for WOVN backend on Rack.
295
323
  email:
296
324
  - jeff@wovn.io