wovnrb 0.2.14 → 0.2.15
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/image_replacer.rb +21 -4
- data/lib/wovnrb/lang.rb +3 -1
- data/lib/wovnrb/store.rb +2 -0
- data/lib/wovnrb/version.rb +1 -1
- data/test/lib/headers_test.rb +6 -6
- data/test/lib/html_replacers/image_replacer_test.rb +39 -4
- data/test/lib/lang_test.rb +2 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c527a83e2c6ab94014f55fb166f516fd5bf56941
|
4
|
+
data.tar.gz: 767806ed70c4ae6a32fd75e17dd7518417b7b51f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00208abab45da12764dbb0eed8914fe69996de815a0f1e5f3e762924f48410419df89068eef4aea4e5a9839d0554134782e5c462e3e4e287295f24f3ae08ca76
|
7
|
+
data.tar.gz: ce166e7836b300fba7ea2e8ac02f815118f558e9fb6ed9beace3fa7d6ea810b83fb75c53662917cc2116af0037df00f1ce3091c53ecfeee699a6abc08ec2df9f
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module Wovnrb
|
2
2
|
class ImageReplacer < ReplacerBase
|
3
|
-
def initialize(url, text_index, src_index, img_src_prefix)
|
3
|
+
def initialize(url, text_index, src_index, img_src_prefix, host_aliases)
|
4
4
|
@url = url
|
5
5
|
@text_index = text_index
|
6
6
|
@src_index = src_index
|
7
7
|
@img_src_prefix = img_src_prefix
|
8
|
+
@host_aliases = host_aliases
|
8
9
|
end
|
9
10
|
|
10
11
|
def replace(dom, lang)
|
@@ -26,9 +27,18 @@ module Wovnrb
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
unless replace_src_if_match(node, lang, src)
|
31
|
+
# host name exclude port number
|
32
|
+
host_match = %r!://([^/:]+)!.match(src)
|
33
|
+
host_name = host_match ? host_match[1] : ''
|
34
|
+
|
35
|
+
# replace image if match host alias
|
36
|
+
if host_match and @host_aliases.include?(host_name)
|
37
|
+
@host_aliases.find do |host_alias|
|
38
|
+
src_alias = src.gsub(host_name, host_alias)
|
39
|
+
replace_src_if_match(node, lang, src_alias)
|
40
|
+
end
|
41
|
+
end
|
32
42
|
end
|
33
43
|
end
|
34
44
|
|
@@ -43,6 +53,13 @@ module Wovnrb
|
|
43
53
|
end
|
44
54
|
|
45
55
|
private
|
56
|
+
def replace_src_if_match(node, lang, src)
|
57
|
+
# shouldn't need size check, but for now...
|
58
|
+
if @src_index[src] && @src_index[src][lang.lang_code] && @src_index[src][lang.lang_code].size > 0
|
59
|
+
node.attribute('src').value = "#{@img_src_prefix}#{@src_index[src][lang.lang_code][0]['data']}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
46
63
|
def join_path(x, y)
|
47
64
|
separator = (x[-1] != '/' and y[0] != '/') ? '/' : ''
|
48
65
|
"#{x}#{separator}#{y}"
|
data/lib/wovnrb/lang.rb
CHANGED
@@ -21,6 +21,7 @@ module Wovnrb
|
|
21
21
|
'ko' => {name: '한국어', code: 'ko', en: 'Korean'},
|
22
22
|
'ms' => {name: 'Bahasa Melayu', code: 'ms', en: 'Malay'},
|
23
23
|
'my' => { name: 'ဗမာစာ', code: 'my', en: 'Burmese' },
|
24
|
+
'ne' => {name: 'नेपाली भाषा', code: 'ne', en: 'Nepali'},
|
24
25
|
'no' => {name: 'Norsk', code: 'no', en: 'Norwegian'},
|
25
26
|
'pl' => {name: 'Polski', code: 'pl', en: 'Polish'},
|
26
27
|
'pt' => {name: 'Português', code: 'pt', en: 'Portuguese'},
|
@@ -170,6 +171,7 @@ module Wovnrb
|
|
170
171
|
text_index = values['text_vals'] || {}
|
171
172
|
src_index = values['img_vals'] || {}
|
172
173
|
img_src_prefix = values['img_src_prefix'] || ''
|
174
|
+
host_aliases = values['host_aliases'] || []
|
173
175
|
|
174
176
|
replacers = []
|
175
177
|
# add lang code to anchors href if not default lang
|
@@ -181,7 +183,7 @@ module Wovnrb
|
|
181
183
|
replacers << TextReplacer.new(text_index)
|
182
184
|
replacers << MetaReplacer.new(text_index)
|
183
185
|
replacers << InputReplacer.new(text_index)
|
184
|
-
replacers << ImageReplacer.new(url, text_index, src_index, img_src_prefix)
|
186
|
+
replacers << ImageReplacer.new(url, text_index, src_index, img_src_prefix, host_aliases)
|
185
187
|
replacers << ScriptReplacer.new(store)
|
186
188
|
|
187
189
|
replacers.each do |replacer|
|
data/lib/wovnrb/store.rb
CHANGED
data/lib/wovnrb/version.rb
CHANGED
data/test/lib/headers_test.rb
CHANGED
@@ -5975,7 +5975,7 @@ module Wovnrb
|
|
5975
5975
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
|
5976
5976
|
|
5977
5977
|
keys = Wovnrb::Lang::LANG.keys
|
5978
|
-
assert_equal(
|
5978
|
+
assert_equal(30, keys.size)
|
5979
5979
|
|
5980
5980
|
for key in keys
|
5981
5981
|
uri_without_scheme = h.remove_lang("wovn.io/#{key}", key)
|
@@ -5989,7 +5989,7 @@ module Wovnrb
|
|
5989
5989
|
def test_remove_lang_path_with_nil_lang
|
5990
5990
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
|
5991
5991
|
keys = Wovnrb::Lang::LANG.keys
|
5992
|
-
assert_equal(
|
5992
|
+
assert_equal(30, keys.size)
|
5993
5993
|
|
5994
5994
|
uri_without_scheme = h.remove_lang('wovn.io', nil)
|
5995
5995
|
assert_equal('wovn.io', uri_without_scheme)
|
@@ -6012,7 +6012,7 @@ module Wovnrb
|
|
6012
6012
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
|
6013
6013
|
|
6014
6014
|
keys = Wovnrb::Lang::LANG.keys
|
6015
|
-
assert_equal(
|
6015
|
+
assert_equal(30, keys.size)
|
6016
6016
|
|
6017
6017
|
for key in keys
|
6018
6018
|
uri_without_scheme = h.remove_lang("wovn.io/?wovn=#{key}", key)
|
@@ -6026,7 +6026,7 @@ module Wovnrb
|
|
6026
6026
|
def test_remove_lang_query_with_nil_lang
|
6027
6027
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
|
6028
6028
|
keys = Wovnrb::Lang::LANG.keys
|
6029
|
-
assert_equal(
|
6029
|
+
assert_equal(30, keys.size)
|
6030
6030
|
|
6031
6031
|
uri_without_scheme = h.remove_lang('wovn.io', nil)
|
6032
6032
|
assert_equal('wovn.io', uri_without_scheme)
|
@@ -6049,7 +6049,7 @@ module Wovnrb
|
|
6049
6049
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
|
6050
6050
|
|
6051
6051
|
keys = Wovnrb::Lang::LANG.keys
|
6052
|
-
assert_equal(
|
6052
|
+
assert_equal(30, keys.size)
|
6053
6053
|
|
6054
6054
|
for key in keys
|
6055
6055
|
uri_without_scheme = h.remove_lang("#{key.downcase}.wovn.io/", key)
|
@@ -6063,7 +6063,7 @@ module Wovnrb
|
|
6063
6063
|
def test_remove_lang_subdomain_with_nil_lang
|
6064
6064
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
|
6065
6065
|
keys = Wovnrb::Lang::LANG.keys
|
6066
|
-
assert_equal(
|
6066
|
+
assert_equal(30, keys.size)
|
6067
6067
|
|
6068
6068
|
uri_without_scheme = h.remove_lang('wovn.io', nil)
|
6069
6069
|
assert_equal('wovn.io', uri_without_scheme)
|
@@ -17,7 +17,7 @@ module Wovnrb
|
|
17
17
|
'http://www.example.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
18
18
|
}
|
19
19
|
img_src_prefix = 'prefix::'
|
20
|
-
replacer = ImageReplacer.new(url, text_index, src_index, img_src_prefix)
|
20
|
+
replacer = ImageReplacer.new(url, text_index, src_index, img_src_prefix, [])
|
21
21
|
|
22
22
|
dom = Wovnrb.get_dom('<img src="http://www.example.com/test.img" alt="Hello"')
|
23
23
|
replacer.replace(dom, Lang.new('ja'))
|
@@ -38,7 +38,7 @@ module Wovnrb
|
|
38
38
|
src_index = {
|
39
39
|
'http://www.example.com/hello/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
40
40
|
}
|
41
|
-
replacer = ImageReplacer.new(url, text_index, src_index, '')
|
41
|
+
replacer = ImageReplacer.new(url, text_index, src_index, '', [])
|
42
42
|
|
43
43
|
dom = Wovnrb.get_dom('<img src="test.img"')
|
44
44
|
replacer.replace(dom, Lang.new('ja'))
|
@@ -58,7 +58,7 @@ module Wovnrb
|
|
58
58
|
src_index = {
|
59
59
|
'http://www.example.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
60
60
|
}
|
61
|
-
replacer = ImageReplacer.new(url, text_index, src_index, '')
|
61
|
+
replacer = ImageReplacer.new(url, text_index, src_index, '', [])
|
62
62
|
|
63
63
|
dom = Wovnrb.get_dom('<img src="/test.img"')
|
64
64
|
replacer.replace(dom, Lang.new('ja'))
|
@@ -91,10 +91,45 @@ module Wovnrb
|
|
91
91
|
src_index = {
|
92
92
|
'http://www.test.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
93
93
|
}
|
94
|
-
replacer = ImageReplacer.new(url, text_index, src_index, '')
|
94
|
+
replacer = ImageReplacer.new(url, text_index, src_index, '', [])
|
95
95
|
dom = Wovnrb.get_dom('<img src="http://www.test.com/test.img"')
|
96
96
|
replacer.replace(dom, Lang.new('ja'))
|
97
97
|
dom.xpath('//img')[0]
|
98
98
|
end
|
99
|
+
|
100
|
+
def test_replace_host_alias
|
101
|
+
url = {
|
102
|
+
:protocol => 'http',
|
103
|
+
:host => 'www.example.com',
|
104
|
+
:path => '/hello/'
|
105
|
+
}
|
106
|
+
src_index = {
|
107
|
+
'http://www.test.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
|
108
|
+
}
|
109
|
+
path = '/test.img'
|
110
|
+
|
111
|
+
# no replace image if not exist host alias
|
112
|
+
img = img_dom_helper(url, src_index, path, [])
|
113
|
+
assert_equal('/test.img', img.get_attribute('src'))
|
114
|
+
img = img_dom_helper(url, src_index, path, ['www.test.com'])
|
115
|
+
assert_equal('/test.img', img.get_attribute('src'))
|
116
|
+
img = img_dom_helper(url, src_index, path, ['www.example.com'])
|
117
|
+
assert_equal('/test.img', img.get_attribute('src'))
|
118
|
+
img = img_dom_helper(url, src_index, path, ['www.test.com', 'www.wrong.com'])
|
119
|
+
assert_equal('/test.img', img.get_attribute('src'))
|
120
|
+
|
121
|
+
# replace image if exist host alias
|
122
|
+
img = img_dom_helper(url, src_index, path, ['www.test.com', 'www.example.com'])
|
123
|
+
assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
|
124
|
+
end
|
125
|
+
|
126
|
+
private
|
127
|
+
def img_dom_helper(url, src_index, path, host_aliases)
|
128
|
+
text_index = {}
|
129
|
+
replacer = ImageReplacer.new(url, text_index, src_index, '', host_aliases)
|
130
|
+
dom = Wovnrb.get_dom('<img src="' + path + '"')
|
131
|
+
replacer.replace(dom, Lang.new('ja'))
|
132
|
+
dom.xpath('//img')[0]
|
133
|
+
end
|
99
134
|
end
|
100
135
|
end
|
data/test/lib/lang_test.rb
CHANGED
@@ -10,7 +10,7 @@ module Wovnrb
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_langs_length
|
13
|
-
assert_equal(
|
13
|
+
assert_equal(30, Wovnrb::Lang::LANG.length)
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_keys_exist
|
@@ -41,6 +41,7 @@ module Wovnrb
|
|
41
41
|
assert_equal('ko', Lang::iso_639_1_normalization('ko'))
|
42
42
|
assert_equal('ms', Lang::iso_639_1_normalization('ms'))
|
43
43
|
assert_equal('my', Lang::iso_639_1_normalization('my'))
|
44
|
+
assert_equal('ne', Lang::iso_639_1_normalization('ne'))
|
44
45
|
assert_equal('no', Lang::iso_639_1_normalization('no'))
|
45
46
|
assert_equal('pl', Lang::iso_639_1_normalization('pl'))
|
46
47
|
assert_equal('pt', Lang::iso_639_1_normalization('pt'))
|
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.15
|
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-04-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogumbo
|
@@ -397,7 +397,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
397
397
|
version: '0'
|
398
398
|
requirements: []
|
399
399
|
rubyforge_project:
|
400
|
-
rubygems_version: 2.
|
400
|
+
rubygems_version: 2.2.0
|
401
401
|
signing_key:
|
402
402
|
specification_version: 4
|
403
403
|
summary: Gem for WOVN.io
|
@@ -423,3 +423,4 @@ test_files:
|
|
423
423
|
- test/lib/wovnrb_test.rb
|
424
424
|
- test/services/url_test.rb
|
425
425
|
- test/test_helper.rb
|
426
|
+
has_rdoc:
|