wovnrb 1.0.6 → 1.0.7

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
- SHA256:
3
- metadata.gz: 3f2e2b02c2985d2ebf1052ebb45b5eda33a70af0335ce11c899f67f7fb1bfce1
4
- data.tar.gz: 2c6c064429a111f33accae6f8e7202dcd7b777fecb69ce8c310a07d18aff6dcd
2
+ SHA1:
3
+ metadata.gz: d57533c589ec6dfd2171967b855c3cf7dac3b5da
4
+ data.tar.gz: 4697b8fbd091071187d742bd3bbcb34a71ac7c1e
5
5
  SHA512:
6
- metadata.gz: 2a07caf9ed2b1f727a60770467dc7c51659e0f5591665d5e22dc89c5f3d3fb8f01e96703114cd434efb1a1bac265dc17deafb184ea9b4f515ec412e1683ccc40
7
- data.tar.gz: d38c3e5bb5b5b2ea017569b61d2fc5f4f9c2a8af6af1435d30d3d90f36a49589906f769922ae9465609ec81137b77ba2e53c8ac9c8c04a40c22d1f5881d621ba
6
+ metadata.gz: 9c970c7c8772d0ed103b9b6700abf632c2d6834ce2343ad0b06c94fe0ae1e53a4d124a1a759d5c089ac0916f068d81f2f36c89161d59c06fd1218ef1818c3784
7
+ data.tar.gz: e927ee8669e85fbd1c516773c896f8bc2e78378121cf1240555d12e99ae7a84deb8118bc767979d704e8ad70a9dc70d2e486d9d1c4ecae61f5518f6b31ad3ff7
@@ -0,0 +1,17 @@
1
+ version: 2
2
+
3
+ jobs:
4
+ build:
5
+ docker:
6
+ - image: circleci/ruby:2.3-jessie
7
+ steps:
8
+ - checkout
9
+ - restore_cache:
10
+ keys:
11
+ - bundler-
12
+ - run: bundle install --path vendor/bundle --jobs=4
13
+ - save_cache:
14
+ key: bundler-{{ checksum "Gemfile.lock" }}
15
+ paths:
16
+ - vendor/bundle
17
+ - run: bundle exec rake test
data/README.md CHANGED
@@ -72,6 +72,7 @@ project_token | yes | ''
72
72
  url_pattern | yes | 'path'
73
73
  query | | []
74
74
  default_lang | yes | 'en'
75
+ ignore_class | | []
75
76
 
76
77
  ### 2.1. project_token
77
78
 
@@ -119,6 +120,10 @@ The library will redirect to the following URL.
119
120
 
120
121
  https://wovn.io/contact
121
122
 
123
+ ### 2.5 ignore_class
124
+
125
+ This sets "Ignore class" which prevent WOVN translating HTML elements that have one of the array.
126
+
122
127
  ## 3. Contributing
123
128
 
124
129
  1. Fork it ( https://github.com/WOVNio/wovnrb/fork )
@@ -1,6 +1,7 @@
1
1
  module Wovnrb
2
2
  class ImageReplacer < ReplacerBase
3
- def initialize(url, text_index, src_index, img_src_prefix, host_aliases)
3
+ def initialize(store, url, text_index, src_index, img_src_prefix, host_aliases)
4
+ super(store)
4
5
  @url = url
5
6
  @text_index = text_index
6
7
  @src_index = src_index
@@ -1,6 +1,7 @@
1
1
  module Wovnrb
2
2
  class InputReplacer < ReplacerBase
3
- def initialize(text_index)
3
+ def initialize(store, text_index)
4
+ super(store)
4
5
  @text_index = text_index
5
6
  end
6
7
 
@@ -7,7 +7,8 @@ module Wovnrb
7
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
8
  end
9
9
 
10
- def initialize(pattern, headers)
10
+ def initialize(store, pattern, headers)
11
+ super(store)
11
12
  @pattern = pattern
12
13
  @headers = headers
13
14
  end
@@ -1,6 +1,7 @@
1
1
  module Wovnrb
2
2
  class MetaReplacer < ReplacerBase
3
- def initialize(text_index, pattern = nil, headers = nil)
3
+ def initialize(store, text_index, pattern = nil, headers = nil)
4
+ super(store)
4
5
  @text_index = text_index
5
6
  @pattern = pattern
6
7
  @headers = headers
@@ -1,5 +1,9 @@
1
1
  module Wovnrb
2
2
  class ReplacerBase
3
+ def initialize(store)
4
+ @store = store
5
+ end
6
+
3
7
  def replace(dom, lang)
4
8
  raise NotImplementedError.new('replace is not defined')
5
9
  end
@@ -11,6 +15,17 @@ module Wovnrb
11
15
  elsif node.name === 'html'
12
16
  return false
13
17
  end
18
+
19
+ node_class = node.get_attribute('class')
20
+ if node_class
21
+ classes = node_class.split
22
+ @store.settings['ignore_class'].each do |ignore_class|
23
+ if classes.include?(ignore_class)
24
+ return true
25
+ end
26
+ end
27
+ end
28
+
14
29
  wovn_ignore?(node.parent)
15
30
  end
16
31
 
@@ -1,7 +1,7 @@
1
1
  module Wovnrb
2
2
  class ScriptReplacer < ReplacerBase
3
3
  def initialize(store)
4
- @store = store
4
+ super(store)
5
5
  end
6
6
 
7
7
  def replace(dom, lang)
@@ -1,6 +1,7 @@
1
1
  module Wovnrb
2
2
  class TextReplacer < ReplacerBase
3
- def initialize(text_index)
3
+ def initialize(store, text_index)
4
+ super(store)
4
5
  @text_index = text_index
5
6
  end
6
7
 
data/lib/wovnrb/lang.rb CHANGED
@@ -209,13 +209,13 @@ module Wovnrb
209
209
  # add lang code to anchors href if not default lang
210
210
  if @lang_code != store.settings['default_lang']
211
211
  pattern = store.settings['url_pattern']
212
- replacers << LinkReplacer.new(pattern, headers)
212
+ replacers << LinkReplacer.new(store, pattern, headers)
213
213
  end
214
214
 
215
- replacers << TextReplacer.new(text_index)
216
- replacers << MetaReplacer.new(text_index, pattern, headers)
217
- replacers << InputReplacer.new(text_index)
218
- replacers << ImageReplacer.new(url, text_index, src_index, img_src_prefix, host_aliases)
215
+ replacers << TextReplacer.new(store, text_index)
216
+ replacers << MetaReplacer.new(store, text_index, pattern, headers)
217
+ replacers << InputReplacer.new(store, text_index)
218
+ replacers << ImageReplacer.new(store, url, text_index, src_index, img_src_prefix, host_aliases)
219
219
  replacers << ScriptReplacer.new(store)
220
220
 
221
221
  replacers.each do |replacer|
data/lib/wovnrb/store.rb CHANGED
@@ -20,6 +20,7 @@ module Wovnrb
20
20
  'url_pattern' => 'path',
21
21
  'url_pattern_reg' => "/(?<lang>[^/.?]+)",
22
22
  'query' => [],
23
+ 'ignore_class' => [],
23
24
  'api_url' => 'https://api.wovn.io/v0/values',
24
25
  'api_timeout_seconds' => 0.5,
25
26
  'default_lang' => 'en',
@@ -79,6 +80,10 @@ module Wovnrb
79
80
  valid = false
80
81
  errors.push("query config #{settings['query']} is not valid.")
81
82
  end
83
+ if !settings.has_key?('ignore_class') || !settings['ignore_class'].kind_of?(Array)
84
+ valid = false
85
+ errors.push("ignore_class config #{settings['ignore_class']} should be Array.")
86
+ end
82
87
  if !settings.has_key?('api_url') || settings['api_url'].length == 0
83
88
  valid = false
84
89
  errors.push("API URL is not configured.")
@@ -1,3 +1,3 @@
1
1
  module Wovnrb
2
- VERSION = "1.0.6"
2
+ VERSION = "1.0.7"
3
3
  end
@@ -5,6 +5,7 @@ require 'webmock/minitest'
5
5
  module Wovnrb
6
6
  class ImageReplacerTest < WovnMiniTest
7
7
  def test_replace
8
+ store = Store.instance
8
9
  url = {
9
10
  :protocol => 'http',
10
11
  :host => 'www.example.com',
@@ -17,7 +18,7 @@ module Wovnrb
17
18
  'http://www.example.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
18
19
  }
19
20
  img_src_prefix = 'prefix::'
20
- replacer = ImageReplacer.new(url, text_index, src_index, img_src_prefix, [])
21
+ replacer = ImageReplacer.new(store, url, text_index, src_index, img_src_prefix, [])
21
22
 
22
23
  dom = Wovnrb.get_dom('<img src="http://www.example.com/test.img" alt="Hello"')
23
24
  replacer.replace(dom, Lang.new('ja'))
@@ -29,6 +30,7 @@ module Wovnrb
29
30
  end
30
31
 
31
32
  def test_replace_relative_path
33
+ store = Store.instance
32
34
  url = {
33
35
  :protocol => 'http',
34
36
  :host => 'www.example.com',
@@ -38,7 +40,7 @@ module Wovnrb
38
40
  src_index = {
39
41
  'http://www.example.com/hello/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
40
42
  }
41
- replacer = ImageReplacer.new(url, text_index, src_index, '', [])
43
+ replacer = ImageReplacer.new(store, url, text_index, src_index, '', [])
42
44
 
43
45
  dom = Wovnrb.get_dom('<img src="test.img"')
44
46
  replacer.replace(dom, Lang.new('ja'))
@@ -49,6 +51,7 @@ module Wovnrb
49
51
  end
50
52
 
51
53
  def test_replace_root_path
54
+ store = Store.instance
52
55
  url = {
53
56
  :protocol => 'http',
54
57
  :host => 'www.example.com',
@@ -58,7 +61,7 @@ module Wovnrb
58
61
  src_index = {
59
62
  'http://www.example.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
60
63
  }
61
- replacer = ImageReplacer.new(url, text_index, src_index, '', [])
64
+ replacer = ImageReplacer.new(store, url, text_index, src_index, '', [])
62
65
 
63
66
  dom = Wovnrb.get_dom('<img src="/test.img"')
64
67
  replacer.replace(dom, Lang.new('ja'))
@@ -82,6 +85,7 @@ module Wovnrb
82
85
 
83
86
  private
84
87
  def img_test_helper path
88
+ store = Store.instance
85
89
  url = {
86
90
  protocol: 'http',
87
91
  host: 'www.example.com',
@@ -91,13 +95,14 @@ module Wovnrb
91
95
  src_index = {
92
96
  'http://www.test.com/test.img' => {'ja' => [{'data' => 'http://test.com/ttt.img'}]}
93
97
  }
94
- replacer = ImageReplacer.new(url, text_index, src_index, '', [])
98
+ replacer = ImageReplacer.new(store, url, text_index, src_index, '', [])
95
99
  dom = Wovnrb.get_dom('<img src="http://www.test.com/test.img"')
96
100
  replacer.replace(dom, Lang.new('ja'))
97
101
  dom.xpath('//img')[0]
98
102
  end
99
103
 
100
104
  def test_replace_host_alias
105
+ store = Store.instance
101
106
  url = {
102
107
  :protocol => 'http',
103
108
  :host => 'www.example.com',
@@ -109,24 +114,24 @@ module Wovnrb
109
114
  path = '/test.img'
110
115
 
111
116
  # no replace image if not exist host alias
112
- img = img_dom_helper(url, src_index, path, [])
117
+ img = img_dom_helper(store, url, src_index, path, [])
113
118
  assert_equal('/test.img', img.get_attribute('src'))
114
- img = img_dom_helper(url, src_index, path, ['www.test.com'])
119
+ img = img_dom_helper(store, url, src_index, path, ['www.test.com'])
115
120
  assert_equal('/test.img', img.get_attribute('src'))
116
- img = img_dom_helper(url, src_index, path, ['www.example.com'])
121
+ img = img_dom_helper(store, url, src_index, path, ['www.example.com'])
117
122
  assert_equal('/test.img', img.get_attribute('src'))
118
- img = img_dom_helper(url, src_index, path, ['www.test.com', 'www.wrong.com'])
123
+ img = img_dom_helper(store, url, src_index, path, ['www.test.com', 'www.wrong.com'])
119
124
  assert_equal('/test.img', img.get_attribute('src'))
120
125
 
121
126
  # replace image if exist host alias
122
- img = img_dom_helper(url, src_index, path, ['www.test.com', 'www.example.com'])
127
+ img = img_dom_helper(store, url, src_index, path, ['www.test.com', 'www.example.com'])
123
128
  assert_equal('http://test.com/ttt.img', img.get_attribute('src'))
124
129
  end
125
130
 
126
131
  private
127
- def img_dom_helper(url, src_index, path, host_aliases)
132
+ def img_dom_helper(store, url, src_index, path, host_aliases)
128
133
  text_index = {}
129
- replacer = ImageReplacer.new(url, text_index, src_index, '', host_aliases)
134
+ replacer = ImageReplacer.new(store, url, text_index, src_index, '', host_aliases)
130
135
  dom = Wovnrb.get_dom('<img src="' + path + '"')
131
136
  replacer.replace(dom, Lang.new('ja'))
132
137
  dom.xpath('//img')[0]
@@ -5,7 +5,8 @@ require 'webmock/minitest'
5
5
  module Wovnrb
6
6
  class InputReplacerTest < WovnMiniTest
7
7
  def test_replace_submit_value
8
- replacer = InputReplacer.new({
8
+ store = Store.instance
9
+ replacer = InputReplacer.new(store, {
9
10
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
10
11
  })
11
12
 
@@ -17,7 +18,8 @@ module Wovnrb
17
18
  end
18
19
 
19
20
  def test_dont_replace_empty_submit_value
20
- replacer = InputReplacer.new({
21
+ store = Store.instance
22
+ replacer = InputReplacer.new(store, {
21
23
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
22
24
  })
23
25
 
@@ -29,7 +31,8 @@ module Wovnrb
29
31
  end
30
32
 
31
33
  def test_dont_replace_type_text_value
32
- replacer = InputReplacer.new({
34
+ store = Store.instance
35
+ replacer = InputReplacer.new(store, {
33
36
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
34
37
  })
35
38
 
@@ -41,7 +44,8 @@ module Wovnrb
41
44
  end
42
45
 
43
46
  def test_dont_replace_type_search_value
44
- replacer = InputReplacer.new({
47
+ store = Store.instance
48
+ replacer = InputReplacer.new(store, {
45
49
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
46
50
  })
47
51
 
@@ -53,7 +57,8 @@ module Wovnrb
53
57
  end
54
58
 
55
59
  def test_dont_replace_type_hidden_value
56
- replacer = InputReplacer.new({
60
+ store = Store.instance
61
+ replacer = InputReplacer.new(store, {
57
62
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
58
63
  })
59
64
 
@@ -65,7 +70,8 @@ module Wovnrb
65
70
  end
66
71
 
67
72
  def test_dont_replace_type_password_value
68
- replacer = InputReplacer.new({
73
+ store = Store.instance
74
+ replacer = InputReplacer.new(store, {
69
75
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
70
76
  })
71
77
 
@@ -77,7 +83,8 @@ module Wovnrb
77
83
  end
78
84
 
79
85
  def test_replace_type_password_placeholder
80
- replacer = InputReplacer.new({
86
+ store = Store.instance
87
+ replacer = InputReplacer.new(store, {
81
88
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
82
89
  'Hi' => {'ja' => [{'data' => 'やぁ'}]},
83
90
  })
@@ -92,7 +99,8 @@ module Wovnrb
92
99
  end
93
100
 
94
101
  def test_dont_replace_type_url_value
95
- replacer = InputReplacer.new({
102
+ store = Store.instance
103
+ replacer = InputReplacer.new(store, {
96
104
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
97
105
  })
98
106
 
@@ -104,7 +112,8 @@ module Wovnrb
104
112
  end
105
113
 
106
114
  def test_dont_replace_no_type_value
107
- replacer = InputReplacer.new({
115
+ store = Store.instance
116
+ replacer = InputReplacer.new(store, {
108
117
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
109
118
  })
110
119
 
@@ -4,7 +4,8 @@ require 'webmock/minitest'
4
4
  module Wovnrb
5
5
  class ReplacerBaseTest < WovnMiniTest
6
6
  def test_replace
7
- replacer = LinkReplacer.new('query', get_header)
7
+ store = Store.instance
8
+ replacer = LinkReplacer.new(store, 'query', get_header)
8
9
  dom = Wovnrb.get_dom('<a href="/index.html">link text</a>')
9
10
  replacer.replace(dom, Lang.new('en'))
10
11
 
@@ -13,7 +14,8 @@ module Wovnrb
13
14
  end
14
15
 
15
16
  def test_replace_multiple
16
- replacer = LinkReplacer.new('query', get_header)
17
+ store = Store.instance
18
+ replacer = LinkReplacer.new(store, 'query', get_header)
17
19
  dom = Wovnrb.get_dom('<a href="/index.html">link text</a><div>aaa</div><a href="/index2.html">link text</a>')
18
20
  replacer.replace(dom, Lang.new('en'))
19
21
 
@@ -25,7 +27,8 @@ module Wovnrb
25
27
  end
26
28
 
27
29
  def test_replace_ignore
28
- replacer = LinkReplacer.new('query', get_header)
30
+ store = Store.instance
31
+ replacer = LinkReplacer.new(store, 'query', get_header)
29
32
  dom = Wovnrb.get_dom('<a wovn-ignore href="/index.html">link text</a>')
30
33
  replacer.replace(dom, Lang.new('en'))
31
34
 
@@ -34,7 +37,8 @@ module Wovnrb
34
37
  end
35
38
 
36
39
  def test_replace_empty_javascript_link_query
37
- replacer = LinkReplacer.new('query', get_header)
40
+ store = Store.instance
41
+ replacer = LinkReplacer.new(store, 'query', get_header)
38
42
  dom = Wovnrb.get_dom('<a href="javascript:void(0);">link text</a>')
39
43
  replacer.replace(dom, Lang.new('en'))
40
44
 
@@ -43,7 +47,8 @@ module Wovnrb
43
47
  end
44
48
 
45
49
  def test_replace_javascript_code_link_query
46
- replacer = LinkReplacer.new('query', get_header)
50
+ store = Store.instance
51
+ replacer = LinkReplacer.new(store, 'query', get_header)
47
52
  dom = Wovnrb.get_dom('<a href="javascript:onclick($(\'.any\').slideToggle());">link text</a>')
48
53
  replacer.replace(dom, Lang.new('en'))
49
54
 
@@ -52,7 +57,8 @@ module Wovnrb
52
57
  end
53
58
 
54
59
  def test_replace_uppercased_javascript_code_link_query
55
- replacer = LinkReplacer.new('query', get_header)
60
+ store = Store.instance
61
+ replacer = LinkReplacer.new(store, 'query', get_header)
56
62
  dom = Wovnrb.get_dom('<a href="JAVASCRIPT:onclick($(\'.any\').slideToggle());">link text</a>')
57
63
  replacer.replace(dom, Lang.new('en'))
58
64
 
@@ -61,7 +67,8 @@ module Wovnrb
61
67
  end
62
68
 
63
69
  def test_replace_empty_javascript_link_path
64
- replacer = LinkReplacer.new('path', get_header)
70
+ store = Store.instance
71
+ replacer = LinkReplacer.new(store, 'path', get_header)
65
72
  dom = Wovnrb.get_dom('<a href="javascript:void(0);">link text</a>')
66
73
  replacer.replace(dom, Lang.new('en'))
67
74
 
@@ -70,7 +77,8 @@ module Wovnrb
70
77
  end
71
78
 
72
79
  def test_replace_javascript_code_link_path
73
- replacer = LinkReplacer.new('path', get_header)
80
+ store = Store.instance
81
+ replacer = LinkReplacer.new(store, 'path', get_header)
74
82
  dom = Wovnrb.get_dom('<a href="javascript:onclick($(\'.any\').slideToggle());">link text</a>')
75
83
  replacer.replace(dom, Lang.new('en'))
76
84
 
@@ -79,7 +87,8 @@ module Wovnrb
79
87
  end
80
88
 
81
89
  def test_replace_uppercased_javascript_code_link_path
82
- replacer = LinkReplacer.new('path', get_header)
90
+ store = Store.instance
91
+ replacer = LinkReplacer.new(store, 'path', get_header)
83
92
  dom = Wovnrb.get_dom('<a href="JAVASCRIPT:onclick($(\'.any\').slideToggle());">link text</a>')
84
93
  replacer.replace(dom, Lang.new('en'))
85
94
 
@@ -88,7 +97,8 @@ module Wovnrb
88
97
  end
89
98
 
90
99
  def test_replace_link_path
91
- replacer = LinkReplacer.new('path', get_header)
100
+ store = Store.instance
101
+ replacer = LinkReplacer.new(store, 'path', get_header)
92
102
  dom = Wovnrb.get_dom('<a href="/index.html">link text</a>')
93
103
  replacer.replace(dom, Lang.new('en'))
94
104
 
@@ -97,7 +107,8 @@ module Wovnrb
97
107
  end
98
108
 
99
109
  def test_replace_img_link_path
100
- replacer = LinkReplacer.new('path', get_header)
110
+ store = Store.instance
111
+ replacer = LinkReplacer.new(store, 'path', get_header)
101
112
  dom = Wovnrb.get_dom('<a href="http://favy.tips/index.jpg">link text</a>')
102
113
  replacer.replace(dom, Lang.new('ja'))
103
114
 
@@ -106,7 +117,8 @@ module Wovnrb
106
117
  end
107
118
 
108
119
  def test_replace_img_link_path_with_query_or_hash
109
- replacer = LinkReplacer.new('path', get_header)
120
+ store = Store.instance
121
+ replacer = LinkReplacer.new(store, 'path', get_header)
110
122
  dom = Wovnrb.get_dom('<a href="http://favy.tips/index.jpg?test=1">link text</a>')
111
123
  replacer.replace(dom, Lang.new('ja'))
112
124
 
@@ -121,7 +133,8 @@ module Wovnrb
121
133
  end
122
134
 
123
135
  def test_replace_audio_link_path
124
- replacer = LinkReplacer.new('path', get_header)
136
+ store = Store.instance
137
+ replacer = LinkReplacer.new(store, 'path', get_header)
125
138
  dom = Wovnrb.get_dom('<a href="/index.mp3">link text</a>')
126
139
  replacer.replace(dom, Lang.new('ja'))
127
140
 
@@ -130,7 +143,8 @@ module Wovnrb
130
143
  end
131
144
 
132
145
  def test_replace_audio_link_path_with_query_or_hash
133
- replacer = LinkReplacer.new('path', get_header)
146
+ store = Store.instance
147
+ replacer = LinkReplacer.new(store, 'path', get_header)
134
148
  dom = Wovnrb.get_dom('<a href="/index.mp3?test=1">link text</a>')
135
149
  replacer.replace(dom, Lang.new('ja'))
136
150
 
@@ -145,7 +159,8 @@ module Wovnrb
145
159
  end
146
160
 
147
161
  def test_replace_video_link_path
148
- replacer = LinkReplacer.new('path', get_header)
162
+ store = Store.instance
163
+ replacer = LinkReplacer.new(store, 'path', get_header)
149
164
  dom = Wovnrb.get_dom('<a href="/index.mpeg">link text</a>')
150
165
  replacer.replace(dom, Lang.new('ja'))
151
166
 
@@ -154,7 +169,8 @@ module Wovnrb
154
169
  end
155
170
 
156
171
  def test_replace_video_link_path_with_query_or_hash
157
- replacer = LinkReplacer.new('path', get_header)
172
+ store = Store.instance
173
+ replacer = LinkReplacer.new(store, 'path', get_header)
158
174
  dom = Wovnrb.get_dom('<a href="/index.mp4?test=1">link text</a>')
159
175
  replacer.replace(dom, Lang.new('ja'))
160
176
 
@@ -169,7 +185,8 @@ module Wovnrb
169
185
  end
170
186
 
171
187
  def test_replace_doc_link_path
172
- replacer = LinkReplacer.new('path', get_header)
188
+ store = Store.instance
189
+ replacer = LinkReplacer.new(store, 'path', get_header)
173
190
  dom = Wovnrb.get_dom('<a href="/index.pptx">link text</a>')
174
191
  replacer.replace(dom, Lang.new('ja'))
175
192
 
@@ -178,7 +195,8 @@ module Wovnrb
178
195
  end
179
196
 
180
197
  def test_replace_doc_link_path_with_query_or_hash
181
- replacer = LinkReplacer.new('path', get_header)
198
+ store = Store.instance
199
+ replacer = LinkReplacer.new(store, 'path', get_header)
182
200
  dom = Wovnrb.get_dom('<a href="/index.pptx?test=1">link text</a>')
183
201
  replacer.replace(dom, Lang.new('ja'))
184
202
 
@@ -193,7 +211,8 @@ module Wovnrb
193
211
  end
194
212
 
195
213
  def test_replace_javascript_link_subdomain
196
- replacer = LinkReplacer.new('subdomain', get_header)
214
+ store = Store.instance
215
+ replacer = LinkReplacer.new(store, 'subdomain', get_header)
197
216
  dom = Wovnrb.get_dom('<a href="javascript:void(0);">link text</a>')
198
217
  replacer.replace(dom, Lang.new('en'))
199
218
 
@@ -202,7 +221,8 @@ module Wovnrb
202
221
  end
203
222
 
204
223
  def test_replace_mustache
205
- replacer = LinkReplacer.new('query', get_header)
224
+ store = Store.instance
225
+ replacer = LinkReplacer.new(store, 'query', get_header)
206
226
  dom = Wovnrb.get_dom('<a href="{{hello}}">link text</a>')
207
227
  replacer.replace(dom, Lang.new('en'))
208
228
 
@@ -5,7 +5,8 @@ require 'webmock/minitest'
5
5
  module Wovnrb
6
6
  class MetaReplacerTest < WovnMiniTest
7
7
  def test_replace_description
8
- replacer = MetaReplacer.new({
8
+ store = Store.instance
9
+ replacer = MetaReplacer.new(store, {
9
10
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
10
11
  })
11
12
 
@@ -17,7 +18,8 @@ module Wovnrb
17
18
  end
18
19
 
19
20
  def test_replace_og_description
20
- replacer = MetaReplacer.new({
21
+ store = Store.instance
22
+ replacer = MetaReplacer.new(store, {
21
23
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
22
24
  })
23
25
 
@@ -29,7 +31,8 @@ module Wovnrb
29
31
  end
30
32
 
31
33
  def test_replace_og_title
32
- replacer = MetaReplacer.new({
34
+ store = Store.instance
35
+ replacer = MetaReplacer.new(store, {
33
36
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
34
37
  })
35
38
 
@@ -41,7 +44,8 @@ module Wovnrb
41
44
  end
42
45
 
43
46
  def test_replace_twitter_title
44
- replacer = MetaReplacer.new({
47
+ store = Store.instance
48
+ replacer = MetaReplacer.new(store, {
45
49
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
46
50
  })
47
51
 
@@ -53,7 +57,8 @@ module Wovnrb
53
57
  end
54
58
 
55
59
  def test_replace_twitter_description
56
- replacer = MetaReplacer.new({
60
+ store = Store.instance
61
+ replacer = MetaReplacer.new(store, {
57
62
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
58
63
  })
59
64
 
@@ -65,7 +70,8 @@ module Wovnrb
65
70
  end
66
71
 
67
72
  def test_replace_multi
68
- replacer = MetaReplacer.new({
73
+ store = Store.instance
74
+ replacer = MetaReplacer.new(store, {
69
75
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
70
76
  'Bye' => {'ja' => [{'data' => 'さようなら'}]}
71
77
  })
@@ -80,7 +86,8 @@ module Wovnrb
80
86
  end
81
87
 
82
88
  def test_replace_wovn_ignore
83
- replacer = MetaReplacer.new({
89
+ store = Store.instance
90
+ replacer = MetaReplacer.new(store, {
84
91
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
85
92
  })
86
93
 
@@ -91,9 +98,10 @@ module Wovnrb
91
98
  assert_equal('Hello', content)
92
99
  end
93
100
 
94
- def test_replace_wovn_ignore
101
+ def test_replace_wovn_ignore_og
102
+ store = Store.instance
95
103
  headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'https://test.com'), Wovnrb.get_settings)
96
- replacer = MetaReplacer.new({
104
+ replacer = MetaReplacer.new(store, {
97
105
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
98
106
  }, 'path', headers)
99
107
 
@@ -5,7 +5,8 @@ require 'webmock/minitest'
5
5
  module Wovnrb
6
6
  class ReplacerBaseTest < WovnMiniTest
7
7
  def test_wovn_ignore
8
- replacer = ReplacerBase.new
8
+ store = Store.instance
9
+ replacer = ReplacerBase.new(store)
9
10
  dom = Wovnrb.to_dom('<html><body><div wovn-ignore></div></body></html>')
10
11
  actual = replacer.send(:wovn_ignore?, dom.xpath('//div')[0])
11
12
 
@@ -13,7 +14,8 @@ module Wovnrb
13
14
  end
14
15
 
15
16
  def test_wovn_ignore_parent
16
- replacer = ReplacerBase.new
17
+ store = Store.instance
18
+ replacer = ReplacerBase.new(store)
17
19
  dom = Wovnrb.to_dom('<html wovn-ignore><body><div wovn-ignore></div></body></html>')
18
20
  actual = replacer.send(:wovn_ignore?, dom.xpath('//div')[0])
19
21
 
@@ -21,33 +23,67 @@ module Wovnrb
21
23
  end
22
24
 
23
25
  def test_wovn_ignore_without_attribute
24
- replacer = ReplacerBase.new
26
+ store = Store.instance
27
+ replacer = ReplacerBase.new(store)
25
28
  dom = Wovnrb.to_dom('<html><body><div></div></body></html>')
26
29
  actual = replacer.send(:wovn_ignore?, dom.xpath('//div')[0])
27
30
 
28
31
  assert_equal(false, actual)
29
32
  end
30
33
 
34
+ def test_wovn_ignore_class
35
+ store = Store.instance
36
+ store.settings('ignore_class' => ['base_ignore'])
37
+ replacer = ReplacerBase.new(store)
38
+ dom = Wovnrb.to_dom('<html><body><div class="base_ignore"></div></body></html>')
39
+ actual = replacer.send(:wovn_ignore?, dom.xpath('//div')[0])
40
+
41
+ assert(actual)
42
+ end
43
+
44
+ def test_wovn_ignore_multiple_classes
45
+ store = Store.instance
46
+ store.settings('ignore_class' => ['base_ignore', 'base_ignore2'])
47
+ replacer = ReplacerBase.new(store)
48
+ html = <<HTML
49
+ <html>
50
+ <body>
51
+ <div class="base_ignore"></div>
52
+ <span class="base_ignore2"></span>
53
+ <p class="base_ignore_liar"></p>
54
+ </body>
55
+ </html>
56
+ HTML
57
+ dom = Wovnrb.to_dom(html)
58
+ assert(replacer.send(:wovn_ignore?, dom.xpath('//div')[0]))
59
+ assert(replacer.send(:wovn_ignore?, dom.xpath('//span')[0]))
60
+ assert_equal(false, replacer.send(:wovn_ignore?, dom.xpath('//p')[0]))
61
+ end
62
+
31
63
  def test_replace_text
32
- replacer = ReplacerBase.new
64
+ store = Store.instance
65
+ replacer = ReplacerBase.new(store)
33
66
  actual = replacer.send(:replace_text, 'Hello', 'こんにちは')
34
67
  assert_equal('こんにちは', actual)
35
68
  end
36
69
 
37
70
  def test_replace_text_with_space
38
- replacer = ReplacerBase.new
71
+ store = Store.instance
72
+ replacer = ReplacerBase.new(store)
39
73
  actual = replacer.send(:replace_text, ' Hello ', 'こんにちは')
40
74
  assert_equal(' こんにちは ', actual)
41
75
  end
42
76
 
43
77
  def test_replace_text_with_line_break
44
- replacer = ReplacerBase.new
78
+ store = Store.instance
79
+ replacer = ReplacerBase.new(store)
45
80
  actual = replacer.send(:replace_text, " Hello \n Hello ", 'こんにちは')
46
81
  assert_equal(' こんにちは ', actual)
47
82
  end
48
83
 
49
84
  def test_add_comment_node
50
- replacer = ReplacerBase.new
85
+ store = Store.instance
86
+ replacer = ReplacerBase.new(store)
51
87
  html = Nokogiri::HTML5('<html><body><h1 id="test-node">Test Content</h1></body></html>')
52
88
  h1 = html.xpath("//h1[@id='test-node']")[0]
53
89
 
@@ -5,7 +5,8 @@ require 'webmock/minitest'
5
5
  module Wovnrb
6
6
  class TextReplacerTest < WovnMiniTest
7
7
  def test_replace
8
- replacer = TextReplacer.new({
8
+ store = Store.instance
9
+ replacer = TextReplacer.new(store,{
9
10
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
10
11
  })
11
12
 
@@ -18,7 +19,8 @@ module Wovnrb
18
19
  end
19
20
 
20
21
  def test_replace_multiple
21
- replacer = TextReplacer.new({
22
+ store = Store.instance
23
+ replacer = TextReplacer.new(store, {
22
24
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
23
25
  'Bye' => {'ja' => [{'data' => 'さようなら'}]}
24
26
  })
@@ -35,7 +37,8 @@ module Wovnrb
35
37
  end
36
38
 
37
39
  def test_replace_wovn_ignore
38
- replacer = TextReplacer.new({
40
+ store = Store.instance
41
+ replacer = TextReplacer.new(store, {
39
42
  'Hello' => {'ja' => [{'data' => 'こんにちは'}]}
40
43
  })
41
44
 
@@ -159,7 +159,7 @@ class WovnrbTest < Minitest::Test
159
159
  expected_body = "<html>
160
160
  <head>
161
161
  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
162
- <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=1.0.5\"> </script>
162
+ <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>
163
163
  </head>
164
164
  <body>
165
165
  <h1>Mr. Belvedere Fan Club</h1>
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: 1.0.6
4
+ version: 1.0.7
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: 2018-07-19 00:00:00.000000000 Z
12
+ date: 2018-08-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogumbo
@@ -340,6 +340,7 @@ executables: []
340
340
  extensions: []
341
341
  extra_rdoc_files: []
342
342
  files:
343
+ - ".circleci/config.yml"
343
344
  - ".gitignore"
344
345
  - ".travis.yml"
345
346
  - Gemfile
@@ -347,7 +348,6 @@ files:
347
348
  - PULL_REQUEST_TEMPLATE
348
349
  - README.md
349
350
  - Rakefile
350
- - circle.yml
351
351
  - ext/dom/Makefile
352
352
  - lib/wovnrb.rb
353
353
  - lib/wovnrb/api_data.rb
@@ -412,7 +412,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
412
412
  version: '0'
413
413
  requirements: []
414
414
  rubyforge_project:
415
- rubygems_version: 2.7.7
415
+ rubygems_version: 2.5.2
416
416
  signing_key:
417
417
  specification_version: 4
418
418
  summary: Gem for WOVN.io
data/circle.yml DELETED
@@ -1,7 +0,0 @@
1
- machine:
2
- ruby:
3
- version: 2.3.0
4
-
5
- test:
6
- override:
7
- - bundle exec rake test