wovnrb 0.2.23 → 0.2.24
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 +4 -4
- data/lib/wovnrb/html_replacers/link_replacer.rb +16 -0
- data/lib/wovnrb/version.rb +1 -1
- data/test/lib/html_replacers/link_replacer_test.rb +105 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a7e70b6cdf98b2eefab0f135987d9930f915955
|
4
|
+
data.tar.gz: abbfc8770a7600d87c1ff514ba9fbfc6c4ce5d78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e130de085fa3f0873242214df53b7e5798afda355edc300527467b05be107d5605642c264f6807017f2d37056ba2ee78c429ab5049e16f5b9e8bf890ea0c1baf
|
7
|
+
data.tar.gz: a4d0b9e0d39c5c19f8eb83c8c467d99bc6d1c502655c7cacd172049c9196324c626e20b3f1891443cc4f6cec5a5c3cb78227c3276ef17c4db24a9418843d8d2b
|
@@ -1,5 +1,12 @@
|
|
1
1
|
module Wovnrb
|
2
2
|
class LinkReplacer < ReplacerBase
|
3
|
+
module FileExtension
|
4
|
+
IMG_FILES = '(?!jp$)jpe?g?|bmp|gif|png|btif|tiff?|psd|djvu?|xif|wbmp|webp|p(n|b|g|p)m|rgb|tga|x(b|p)m|xwd|pic|ico|fh(c|4|5|7)?|xif|f(bs|px|st)'
|
5
|
+
AUDIO_FILES = 'mp(3|2)|m(p?2|3|p?4|pg)a|midi?|kar|rmi|web(m|a)|aif(f?|c)|w(ma|av|ax)|m(ka|3u)|sil|s3m|og(a|g)|uvv?a'
|
6
|
+
VIDEO_FILES = 'm(x|4)u|fl(i|v)|3g(p|2)|jp(gv|g?m)|mp(4v?|g4|(?!$)e?g?)|m(1|2)v|ogv|m(ov|ng)|qt|uvv?(h|m|p|s|v)|dvb|mk(v|3d|s)|f4v|as(x|f)|w(m(v|x)|vx)|xvid'
|
7
|
+
DOC_FILES = 'zip|tar|ez|aw|atom(cat|svc)?|(cc)?xa?ml|cdmi(a|c|d|o|q)?|epub|g(ml|px|xf)|jar|js|ser|class|json(ml)?|do(c|t)m?|xps|pp(a|tx?|s)m?|potm?|sldm|mp(p|t)|bin|dms|lrf|mar|so|dist|distz|m?pkg|bpk|dump|rtf|tfi|pdf|pgp|apk|o(t|d)(b|c|ft?|g|h|i|p|s|t)'
|
8
|
+
end
|
9
|
+
|
3
10
|
def initialize(pattern, headers)
|
4
11
|
@pattern = pattern
|
5
12
|
@headers = headers
|
@@ -12,9 +19,18 @@ module Wovnrb
|
|
12
19
|
href = node.get_attribute('href')
|
13
20
|
next if href =~ /^\s*\{\{.+\}\}\s*$/
|
14
21
|
next if href =~ /javascript:void\(/
|
22
|
+
next if is_file?(href)
|
15
23
|
new_href = lang.add_lang_code(href, @pattern, @headers)
|
16
24
|
node.set_attribute('href', new_href)
|
17
25
|
end
|
18
26
|
end
|
27
|
+
|
28
|
+
def is_file?(href)
|
29
|
+
img_files = /^(https?:\/\/)?.*(\.(#{FileExtension::IMG_FILES}))((\?|#).*)?$/i
|
30
|
+
audio_files = /^(https?:\/\/)?.*(\.(#{FileExtension::AUDIO_FILES}))((\?|#).*)?$/i
|
31
|
+
video_files = /^(https?:\/\/)?.*(\.(#{FileExtension::VIDEO_FILES}))((\?|#).*)?$/i
|
32
|
+
doc_files = /^(https?:\/\/)?.*(\.(#{FileExtension::DOC_FILES}))((\?|#).*)?$/i
|
33
|
+
href =~ img_files || href =~ audio_files || href =~ video_files || href =~ doc_files
|
34
|
+
end
|
19
35
|
end
|
20
36
|
end
|
data/lib/wovnrb/version.rb
CHANGED
@@ -51,6 +51,111 @@ module Wovnrb
|
|
51
51
|
assert_equal('javascript:void(0);', link)
|
52
52
|
end
|
53
53
|
|
54
|
+
def test_replace_link_path
|
55
|
+
replacer = LinkReplacer.new('path', get_header)
|
56
|
+
dom = Wovnrb.get_dom('<a href="/index.html">link text</a>')
|
57
|
+
replacer.replace(dom, Lang.new('en'))
|
58
|
+
|
59
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
60
|
+
assert_equal('/en/index.html', link)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_replace_img_link_path
|
64
|
+
replacer = LinkReplacer.new('path', get_header)
|
65
|
+
dom = Wovnrb.get_dom('<a href="http://favy.tips/index.jpg">link text</a>')
|
66
|
+
replacer.replace(dom, Lang.new('ja'))
|
67
|
+
|
68
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
69
|
+
assert_equal('http://favy.tips/index.jpg', link)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_replace_img_link_path_with_query_or_hash
|
73
|
+
replacer = LinkReplacer.new('path', get_header)
|
74
|
+
dom = Wovnrb.get_dom('<a href="http://favy.tips/index.jpg?test=1">link text</a>')
|
75
|
+
replacer.replace(dom, Lang.new('ja'))
|
76
|
+
|
77
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
78
|
+
assert_equal('http://favy.tips/index.jpg?test=1', link)
|
79
|
+
|
80
|
+
dom = Wovnrb.get_dom('<a href="http://favy.tips/index.jpg#test=1">link text</a>')
|
81
|
+
replacer.replace(dom, Lang.new('ja'))
|
82
|
+
|
83
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
84
|
+
assert_equal('http://favy.tips/index.jpg#test=1', link)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_replace_audio_link_path
|
88
|
+
replacer = LinkReplacer.new('path', get_header)
|
89
|
+
dom = Wovnrb.get_dom('<a href="/index.mp3">link text</a>')
|
90
|
+
replacer.replace(dom, Lang.new('ja'))
|
91
|
+
|
92
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
93
|
+
assert_equal('/index.mp3', link)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_replace_audio_link_path_with_query_or_hash
|
97
|
+
replacer = LinkReplacer.new('path', get_header)
|
98
|
+
dom = Wovnrb.get_dom('<a href="/index.mp3?test=1">link text</a>')
|
99
|
+
replacer.replace(dom, Lang.new('ja'))
|
100
|
+
|
101
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
102
|
+
assert_equal('/index.mp3?test=1', link)
|
103
|
+
|
104
|
+
dom = Wovnrb.get_dom('<a href="/index.mp3#test=1">link text</a>')
|
105
|
+
replacer.replace(dom, Lang.new('ja'))
|
106
|
+
|
107
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
108
|
+
assert_equal('/index.mp3#test=1', link)
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_replace_video_link_path
|
112
|
+
replacer = LinkReplacer.new('path', get_header)
|
113
|
+
dom = Wovnrb.get_dom('<a href="/index.mpeg">link text</a>')
|
114
|
+
replacer.replace(dom, Lang.new('ja'))
|
115
|
+
|
116
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
117
|
+
assert_equal('/index.mpeg', link)
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_replace_video_link_path_with_query_or_hash
|
121
|
+
replacer = LinkReplacer.new('path', get_header)
|
122
|
+
dom = Wovnrb.get_dom('<a href="/index.mp4?test=1">link text</a>')
|
123
|
+
replacer.replace(dom, Lang.new('ja'))
|
124
|
+
|
125
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
126
|
+
assert_equal('/index.mp4?test=1', link)
|
127
|
+
|
128
|
+
dom = Wovnrb.get_dom('<a href="/index.mp4#test=1">link text</a>')
|
129
|
+
replacer.replace(dom, Lang.new('ja'))
|
130
|
+
|
131
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
132
|
+
assert_equal('/index.mp4#test=1', link)
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_replace_doc_link_path
|
136
|
+
replacer = LinkReplacer.new('path', get_header)
|
137
|
+
dom = Wovnrb.get_dom('<a href="/index.pptx">link text</a>')
|
138
|
+
replacer.replace(dom, Lang.new('ja'))
|
139
|
+
|
140
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
141
|
+
assert_equal('/index.pptx', link)
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_replace_doc_link_path_with_query_or_hash
|
145
|
+
replacer = LinkReplacer.new('path', get_header)
|
146
|
+
dom = Wovnrb.get_dom('<a href="/index.pptx?test=1">link text</a>')
|
147
|
+
replacer.replace(dom, Lang.new('ja'))
|
148
|
+
|
149
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
150
|
+
assert_equal('/index.pptx?test=1', link)
|
151
|
+
|
152
|
+
dom = Wovnrb.get_dom('<a href="/index.pptx#test=1">link text</a>')
|
153
|
+
replacer.replace(dom, Lang.new('ja'))
|
154
|
+
|
155
|
+
link = dom.xpath('//a')[0].get_attribute('href')
|
156
|
+
assert_equal('/index.pptx#test=1', link)
|
157
|
+
end
|
158
|
+
|
54
159
|
def test_replace_javascript_link_subdomain
|
55
160
|
replacer = LinkReplacer.new('subdomain', get_header)
|
56
161
|
dom = Wovnrb.get_dom('<a href="javascript:void(0);">link text</a>')
|
@@ -82,4 +187,3 @@ module Wovnrb
|
|
82
187
|
end
|
83
188
|
end
|
84
189
|
end
|
85
|
-
|
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.
|
4
|
+
version: 0.2.24
|
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: 2017-
|
12
|
+
date: 2017-09-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogumbo
|