wovnrb 0.1.73 → 0.1.74

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f7ef7a1161b61dce7b74993fd639656c4bcf09e
4
- data.tar.gz: 7d8b28812d421e091ad98ee767fa070eb85f5195
3
+ metadata.gz: 51a6555bd22447e63a037e35da135602df0dd6bf
4
+ data.tar.gz: cfec1c9ec7244ce8837d59604a2c529e10117e85
5
5
  SHA512:
6
- metadata.gz: e214f2d3e56db1e707d31d1eebad888b4eb732f2a61aace803513e08dd8c56af021665d3519774f7305e2a8c273da767333ea91f9f33cda724c73bf7cd09a6e0
7
- data.tar.gz: 92e385175be75b2e8e9e28200027f8be532f3784e8e090e05a9589bdac554e7e645ef089f3400882a598a7eb8ec67ddeeea2cbbe9ce857858cf589a405b68746
6
+ metadata.gz: d05d528781813b39f5858bde8f18b04350f947077362d3fd4ce676a0d0f0c495ece6513bb9104fc302bcda3cc11fa172577824c7730a446338cabf4dd88e4fea
7
+ data.tar.gz: b045b5b0813f1e99d141d809fbdf5a72e421d204801c35850e6856663d8210fe891618a857ad8bbe352ff0718ad413b9254073913078aa555c30a0558018fa51
@@ -1,3 +1,3 @@
1
1
  module Wovnrb
2
- VERSION = "0.1.73"
2
+ VERSION = "0.1.74"
3
3
  end
data/lib/wovnrb.rb CHANGED
@@ -26,25 +26,16 @@ module Wovnrb
26
26
  return @app.call(env)
27
27
  end
28
28
  # redirect if the path is set to the default language (for SEO purposes)
29
- #if (headers.path_lang == STORE.settings['default_lang'])
30
- # redirect_headers = headers.redirect(STORE.settings['default_lang'])
31
- # return [307, redirect_headers, ['']]
32
- #end
29
+ if (headers.path_lang == STORE.settings['default_lang'])
30
+ redirect_headers = headers.redirect(STORE.settings['default_lang'])
31
+ return [307, redirect_headers, ['']]
32
+ end
33
33
  lang = headers.lang_code
34
34
 
35
35
  # pass to application
36
36
  status, res_headers, body = @app.call(headers.request_out)
37
37
 
38
38
  if res_headers["Content-Type"] =~ /html/ # && !body[0].nil?
39
- puts ""
40
- puts ""
41
- puts "WOVNRB LOGGING"
42
- puts "H-PATHLANG: " + headers.path_lang
43
- puts "DEF_LANG: " + STORE.settings['default_lang']
44
- puts "WOVNRB LOGGING"
45
- puts ""
46
- puts ""
47
-
48
39
  values = STORE.get_values(headers.redis_url)
49
40
  url = {
50
41
  :protocol => headers.protocol,
@@ -124,6 +115,16 @@ module Wovnrb
124
115
  new_href
125
116
  end
126
117
 
118
+ # returns true if a wovn_ignore is found in the tree from the node to the body tag
119
+ def check_wovn_ignore(node)
120
+ if !node.get_attribute('wovn-ignore').nil?
121
+ return true
122
+ elsif node.name === 'html'
123
+ return false
124
+ end
125
+ check_wovn_ignore(node.parent)
126
+ end
127
+
127
128
  def switch_lang(body, values, url, lang=STORE.settings['default_lang'], headers)
128
129
  lang = Lang.get_code(lang)
129
130
  text_index = values['text_vals'] || {}
@@ -138,6 +139,7 @@ module Wovnrb
138
139
  # add lang code to anchors href if not default lang
139
140
  if lang != STORE.settings['default_lang']
140
141
  d.xpath('//a').each do |a|
142
+ next if check_wovn_ignore(a)
141
143
  href = a.get_attribute('href')
142
144
  new_href = add_lang_code(href, STORE.settings['url_pattern'], lang, headers)
143
145
  a.set_attribute('href', new_href)
@@ -146,6 +148,7 @@ module Wovnrb
146
148
 
147
149
  # swap text
148
150
  d.xpath('//text()').each do |node|
151
+ next if check_wovn_ignore(node)
149
152
  node_text = node.content.strip
150
153
  # shouldn't need size check, but for now...
151
154
  if text_index[node_text] && text_index[node_text][lang] && text_index[node_text][lang].size > 0
@@ -154,6 +157,7 @@ module Wovnrb
154
157
  end
155
158
  # swap meta tag values
156
159
  d.xpath('//meta').select { |t|
160
+ next if check_wovn_ignore(t)
157
161
  (t.get_attribute('name') || t.get_attribute('property') || '') =~ /^(description|keywords|og:title|og:description)$/
158
162
  }.each do |node|
159
163
  node_content = node.get_attribute('content').strip
@@ -164,6 +168,7 @@ module Wovnrb
164
168
  end
165
169
  # swap img srcs
166
170
  d.xpath('//img').each do |node|
171
+ next if check_wovn_ignore(node)
167
172
  # use regular expressions to support case insensitivity (right?)
168
173
  if node.to_html =~ /src=['"][^'"]*['"]/i
169
174
  src = node.to_html.match(/src=['"]([^'"]*)['"]/i)[1]
@@ -198,7 +203,9 @@ module Wovnrb
198
203
 
199
204
  # INSERT BACKEND WIDGET
200
205
  insert_node = Nokogiri::XML::Node.new('script', d)
206
+ # TODO: CHANGE THIS BACK; Should be '//j.wovn.io/0' in production
201
207
  insert_node['src'] = '//j.wovn.io/0'
208
+ # insert_node['src'] = '//j.dev-wovn.io:3000/0'
202
209
  version = defined?(VERSION) ? VERSION : ''
203
210
  insert_node['data-wovnio'] = "key=#{STORE.settings['user_token']}&backend=true&currentLang=#{lang}&defaultLang=#{STORE.settings['default_lang']}&urlPattern=#{STORE.settings['url_pattern']}&version=#{version}"
204
211
  # do this so that there will be a closing tag (better compatibility with browsers)
@@ -26,7 +26,6 @@ class WovnrbTest < Minitest::Test
26
26
  # def test_get_langs(values)
27
27
  # end
28
28
 
29
-
30
29
  def test_add_lang_code
31
30
  i = Wovnrb::Interceptor.new(get_app)
32
31
  h = Wovnrb::Headers.new(get_env('url' => 'http://favy.tips'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
@@ -263,6 +262,166 @@ class WovnrbTest < Minitest::Test
263
262
  # headers.expects(:pathname).returns('/hello/tab.html')
264
263
  # assert_equal('/fr/hello/hey/index.html', i.add_lang_code('hey/index.html', 'path', 'fr', headers))
265
264
  # end
265
+ def generate_body(param = "")
266
+ case param
267
+ when "ignore_parent"
268
+ body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
269
+ <div wovn-ignore><p>Hello</p></div>
270
+ </body></html>"
271
+ when "ignore_everything"
272
+ body = "<html><body wovn-ignore><h1>Mr. Belvedere Fan Club</h1>
273
+ <div><p>Hello</p></div>
274
+ </body></html>"
275
+ when "ignore_parent_translated_in_japanese"
276
+ body = "<html lang=\"ja\">
277
+ <head>
278
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
279
+ <script src=\"//j.wovn.io/0\" 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/\">
280
+ </head>
281
+ <body>
282
+ <h1>ベルベデアさんファンクラブ</h1>
283
+ <div wovn-ignore=\"\"><p>Hello</p></div>
284
+ </body>
285
+ </html>
286
+ "
287
+ when "translated_in_japanese"
288
+ body = "<html lang=\"ja\">
289
+ <head>
290
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
291
+ <script src=\"//j.wovn.io/0\" 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/\">
292
+ </head>
293
+ <body>
294
+ <h1>ベルベデアさんファンクラブ</h1>
295
+ <div><p>こんにちは</p></div>
296
+ </body>
297
+ </html>
298
+ "
299
+ when "ignore_everything_translated"
300
+ body = "<html lang=\"ja\">
301
+ <head>
302
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
303
+ <script src=\"//j.wovn.io/0\" 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/\">
304
+ </head>
305
+ <body wovn-ignore=\"\">
306
+ <h1>Mr. Belvedere Fan Club</h1>
307
+ <div><p>Hello</p></div>
308
+ </body>
309
+ </html>
310
+ "
311
+ when "empty"
312
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore><p>Hello</p></div></body></html>"
313
+ when "empty_single_quote"
314
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=''><p>Hello</p></div></body></html>"
315
+ when "empty_double_quote"
316
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=""><p>Hello</p></div></body></html>"
317
+ when "value_single_quote"
318
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore='value'><p>Hello</p></div></body></html>"
319
+ when "value_double_quote"
320
+ body = "<html><body><h1>Mr.BelvedereFanClub</h1><div wovn-ignore=\"value\"><p>Hello</p></div></body></html>"
321
+ when "empty_translated"
322
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/0\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=0.1.74\"> </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=\"\"><p>Hello</p></div>\n</body>\n</html>\n"
323
+ when "empty_single_quote_translated"
324
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/0\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=0.1.74\"> </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=\"\"><p>Hello</p></div>\n</body>\n</html>\n"
325
+ when "empty_double_quote_translated"
326
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/0\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=0.1.74\"> </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=\"\"><p>Hello</p></div>\n</body>\n</html>\n"
327
+ when "value_single_quote_translated"
328
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/0\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=0.1.74\"> </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"
329
+ when "value_double_quote_translated"
330
+ body = "<html lang=\"ja\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<script src=\"//j.wovn.io/0\" data-wovnio=\"key=&amp;backend=true&amp;currentLang=ja&amp;defaultLang=en&amp;urlPattern=path&amp;version=0.1.74\"> </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"
331
+ else # "" case
332
+ body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
333
+ <div><p>Hello</p></div>
334
+ </body></html>"
335
+ end
336
+ return [body]
337
+ end
338
+
339
+ def generate_values
340
+ values = {}
341
+ values['text_vals'] = {'Hello' => {'ja' => [{'data' => 'こんにちは'}]},
342
+ 'Mr. Belvedere Fan Club' => {'ja' => [{'data' => 'ベルベデアさんファンクラブ'}]}}
343
+ return values
344
+ end
345
+
346
+ def test_switch_lang
347
+ i = Wovnrb::Interceptor.new(get_app)
348
+ h = Wovnrb::Headers.new(get_env('url' => 'http://page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
349
+ body = generate_body()
350
+ values = generate_values
351
+ url = h.url
352
+ swapped_body = i.switch_lang(body, values, url, 'ja', h)
353
+ assert_equal(generate_body('translated_in_japanese'), swapped_body)
354
+ end
355
+
356
+ def test_switch_lang_wovn_ignore
357
+ i = Wovnrb::Interceptor.new(get_app)
358
+ h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
359
+ body = generate_body('ignore_parent')
360
+ values = generate_values
361
+ url = h.url
362
+ swapped_body = i.switch_lang(body, values, url, 'ja', h)
363
+ assert_equal(generate_body('ignore_parent_translated_in_japanese'), swapped_body)
364
+ end
365
+
366
+ def test_switch_lang_wovn_ignore_everything
367
+ i = Wovnrb::Interceptor.new(get_app)
368
+ h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
369
+ body = generate_body('ignore_everything')
370
+ values = generate_values
371
+ url = h.url
372
+ swapped_body = i.switch_lang(body, values, url, 'ja', h)
373
+ assert_equal(generate_body('ignore_everything_translated'), swapped_body)
374
+ end
375
+
376
+ def test_switch_lang_wovn_ignore_empty
377
+ i = Wovnrb::Interceptor.new(get_app)
378
+ h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
379
+ body = generate_body('empty')
380
+ values = generate_values
381
+ url = h.url
382
+ swapped_body = i.switch_lang(body, values, url, 'ja', h)
383
+ assert_equal(generate_body('empty_translated'), swapped_body)
384
+ end
385
+
386
+ def test_switch_lang_wovn_ignore_empty_single_quote
387
+ i = Wovnrb::Interceptor.new(get_app)
388
+ h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
389
+ body = generate_body('empty_single_quote')
390
+ values = generate_values
391
+ url = h.url
392
+ swapped_body = i.switch_lang(body, values, url, 'ja', h)
393
+ assert_equal(generate_body('empty_single_quote_translated'), swapped_body)
394
+ end
395
+
396
+ def test_switch_lang_wovn_ignore_empty_double_quote
397
+ i = Wovnrb::Interceptor.new(get_app)
398
+ h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
399
+ body = generate_body('empty_double_quote')
400
+ values = generate_values
401
+ url = h.url
402
+ swapped_body = i.switch_lang(body, values, url, 'ja', h)
403
+ assert_equal(generate_body('empty_double_quote_translated'), swapped_body)
404
+ end
405
+
406
+ def test_switch_lang_wovn_ignore_value_single_quote
407
+ i = Wovnrb::Interceptor.new(get_app)
408
+ h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
409
+ body = generate_body('value_single_quote')
410
+ values = generate_values
411
+ url = h.url
412
+ swapped_body = i.switch_lang(body, values, url, 'ja', h)
413
+ assert_equal(generate_body('value_single_quote_translated'), swapped_body)
414
+ end
415
+
416
+ def test_switch_lang_wovn_ignore_value_double_quote
417
+ i = Wovnrb::Interceptor.new(get_app)
418
+ h = Wovnrb::Headers.new(get_env('url' => 'http://ignore-page.com'), get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
419
+ body = generate_body('value_double_quote')
420
+ values = generate_values
421
+ url = h.url
422
+ swapped_body = i.switch_lang(body, values, url, 'ja', h)
423
+ assert_equal(generate_body('value_double_quote_translated'), swapped_body)
424
+ end
266
425
 
267
426
  def get_settings(options={})
268
427
  settings = {}
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.1.73
4
+ version: 0.1.74
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: 2015-11-12 00:00:00.000000000 Z
12
+ date: 2015-11-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogumbo