wovnrb 0.2.23 → 0.2.24
Sign up to get free protection for your applications and to get access to all the features.
- 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
|