wovnrb 2.2.3 → 3.0.1
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/.rubocop_todo.yml +5 -0
- data/README.en.md +198 -0
- data/README.ja.md +180 -0
- data/README.md +1 -0
- data/docker/docker-compose.yml +11 -0
- data/docker/rails/Dockerfile +6 -0
- data/docker/rails/TestSite/.browserslistrc +1 -0
- data/docker/rails/TestSite/.gitignore +63 -0
- data/docker/rails/TestSite/Gemfile +56 -0
- data/docker/rails/TestSite/README.md +24 -0
- data/docker/rails/TestSite/Rakefile +6 -0
- data/docker/rails/TestSite/app/assets/config/manifest.js +2 -0
- data/docker/rails/TestSite/app/assets/images/.keep +0 -0
- data/docker/rails/TestSite/app/assets/stylesheets/application.css +15 -0
- data/docker/rails/TestSite/app/assets/stylesheets/redirects.scss +3 -0
- data/docker/rails/TestSite/app/channels/application_cable/channel.rb +4 -0
- data/docker/rails/TestSite/app/channels/application_cable/connection.rb +4 -0
- data/docker/rails/TestSite/app/controllers/application_controller.rb +2 -0
- data/docker/rails/TestSite/app/controllers/concerns/.keep +0 -0
- data/docker/rails/TestSite/app/controllers/pages_controller.rb +7 -0
- data/docker/rails/TestSite/app/controllers/redirects_controller.rb +5 -0
- data/docker/rails/TestSite/app/helpers/application_helper.rb +2 -0
- data/docker/rails/TestSite/app/helpers/pages_helper.rb +2 -0
- data/docker/rails/TestSite/app/helpers/redirects_helper.rb +2 -0
- data/docker/rails/TestSite/app/javascript/channels/consumer.js +6 -0
- data/docker/rails/TestSite/app/javascript/channels/index.js +5 -0
- data/docker/rails/TestSite/app/javascript/packs/application.js +17 -0
- data/docker/rails/TestSite/app/jobs/application_job.rb +7 -0
- data/docker/rails/TestSite/app/mailers/application_mailer.rb +4 -0
- data/docker/rails/TestSite/app/models/application_record.rb +3 -0
- data/docker/rails/TestSite/app/models/concerns/.keep +0 -0
- data/docker/rails/TestSite/app/views/layouts/application.html.erb +15 -0
- data/docker/rails/TestSite/app/views/layouts/mailer.html.erb +13 -0
- data/docker/rails/TestSite/app/views/layouts/mailer.text.erb +1 -0
- data/docker/rails/TestSite/babel.config.js +72 -0
- data/docker/rails/TestSite/bin/bundle +114 -0
- data/docker/rails/TestSite/bin/rails +4 -0
- data/docker/rails/TestSite/bin/rake +4 -0
- data/docker/rails/TestSite/bin/setup +36 -0
- data/docker/rails/TestSite/bin/webpack +18 -0
- data/docker/rails/TestSite/bin/webpack-dev-server +18 -0
- data/docker/rails/TestSite/bin/yarn +11 -0
- data/docker/rails/TestSite/config.ru +5 -0
- data/docker/rails/TestSite/config/application.rb +26 -0
- data/docker/rails/TestSite/config/boot.rb +4 -0
- data/docker/rails/TestSite/config/cable.yml +10 -0
- data/docker/rails/TestSite/config/credentials.yml.enc +1 -0
- data/docker/rails/TestSite/config/database.yml +25 -0
- data/docker/rails/TestSite/config/environment.rb +5 -0
- data/docker/rails/TestSite/config/environments/development.rb +62 -0
- data/docker/rails/TestSite/config/environments/production.rb +112 -0
- data/docker/rails/TestSite/config/environments/test.rb +49 -0
- data/docker/rails/TestSite/config/initializers/application_controller_renderer.rb +8 -0
- data/docker/rails/TestSite/config/initializers/assets.rb +14 -0
- data/docker/rails/TestSite/config/initializers/backtrace_silencers.rb +7 -0
- data/docker/rails/TestSite/config/initializers/content_security_policy.rb +30 -0
- data/docker/rails/TestSite/config/initializers/cookies_serializer.rb +5 -0
- data/docker/rails/TestSite/config/initializers/filter_parameter_logging.rb +4 -0
- data/docker/rails/TestSite/config/initializers/inflections.rb +16 -0
- data/docker/rails/TestSite/config/initializers/mime_types.rb +4 -0
- data/docker/rails/TestSite/config/initializers/wrap_parameters.rb +14 -0
- data/docker/rails/TestSite/config/locales/en.yml +33 -0
- data/docker/rails/TestSite/config/puma.rb +38 -0
- data/docker/rails/TestSite/config/routes.rb +4 -0
- data/docker/rails/TestSite/config/spring.rb +6 -0
- data/docker/rails/TestSite/config/storage.yml +34 -0
- data/docker/rails/TestSite/config/webpack/development.js +5 -0
- data/docker/rails/TestSite/config/webpack/environment.js +3 -0
- data/docker/rails/TestSite/config/webpack/production.js +5 -0
- data/docker/rails/TestSite/config/webpack/test.js +5 -0
- data/docker/rails/TestSite/config/webpacker.yml +96 -0
- data/docker/rails/TestSite/db/seeds.rb +7 -0
- data/docker/rails/TestSite/lib/assets/.keep +0 -0
- data/docker/rails/TestSite/lib/tasks/.keep +0 -0
- data/docker/rails/TestSite/log/.keep +0 -0
- data/docker/rails/TestSite/package.json +15 -0
- data/docker/rails/TestSite/postcss.config.js +12 -0
- data/docker/rails/TestSite/public/index.html +9 -0
- data/docker/rails/TestSite/public/page.html +13 -0
- data/docker/rails/TestSite/public/pages/files/plaintext_unicode.txt +204 -0
- data/docker/rails/TestSite/public/pages/files/simple_css.css +8 -0
- data/docker/rails/TestSite/public/pages/files/simple_javascript.js +2 -0
- data/docker/rails/TestSite/public/pages/html5test.html +555 -0
- data/docker/rails/TestSite/public/pages/oldhtml.html +335 -0
- data/docker/rails/TestSite/public/pages/xhtml.xhtml +726 -0
- data/docker/rails/TestSite/public/redirection_target.html +10 -0
- data/docker/rails/TestSite/public/testdir/testpage-dir.html +9 -0
- data/docker/rails/TestSite/public/testdir/testpage-redirect-destination.html +9 -0
- data/docker/rails/TestSite/public/testpage.html +9 -0
- data/docker/rails/TestSite/public/wovn_index.html +24 -0
- data/docker/rails/TestSite/start.sh +13 -0
- data/docker/rails/TestSite/storage/.keep +0 -0
- data/docker/rails/TestSite/test/application_system_test_case.rb +5 -0
- data/docker/rails/TestSite/test/channels/application_cable/connection_test.rb +11 -0
- data/docker/rails/TestSite/test/controllers/.keep +0 -0
- data/docker/rails/TestSite/test/controllers/pages_controller_test.rb +7 -0
- data/docker/rails/TestSite/test/controllers/redirects_controller_test.rb +7 -0
- data/docker/rails/TestSite/test/fixtures/.keep +0 -0
- data/docker/rails/TestSite/test/fixtures/files/.keep +0 -0
- data/docker/rails/TestSite/test/helpers/.keep +0 -0
- data/docker/rails/TestSite/test/integration/.keep +0 -0
- data/docker/rails/TestSite/test/mailers/.keep +0 -0
- data/docker/rails/TestSite/test/models/.keep +0 -0
- data/docker/rails/TestSite/test/system/.keep +0 -0
- data/docker/rails/TestSite/test/test_helper.rb +13 -0
- data/docker/rails/TestSite/yarn.lock +7642 -0
- data/lib/wovnrb.rb +1 -1
- data/lib/wovnrb/api_translator.rb +1 -1
- data/lib/wovnrb/headers.rb +1 -23
- data/lib/wovnrb/lang.rb +77 -40
- data/lib/wovnrb/railtie.rb +1 -15
- data/lib/wovnrb/services/html_converter.rb +9 -10
- data/lib/wovnrb/store.rb +3 -3
- data/lib/wovnrb/version.rb +1 -1
- data/makefile +16 -0
- data/test/lib/headers_test.rb +7 -25
- data/test/lib/lang_test.rb +10 -40
- data/test/lib/services/html_converter_test.rb +39 -17
- data/test/lib/store_test.rb +2 -1
- data/wovnrb.gemspec +3 -3
- metadata +114 -11
- data/README.md +0 -182
data/lib/wovnrb.rb
CHANGED
data/lib/wovnrb/headers.rb
CHANGED
@@ -8,7 +8,6 @@ module Wovnrb
|
|
8
8
|
attr_reader :unmasked_pathname
|
9
9
|
attr_reader :pathname
|
10
10
|
attr_reader :pathname_with_trailing_slash_if_present
|
11
|
-
attr_reader :redis_url
|
12
11
|
|
13
12
|
# Generates new instance of Wovnrb::Headers.
|
14
13
|
# Its parameters are set by parsing env variable.
|
@@ -62,7 +61,6 @@ module Wovnrb
|
|
62
61
|
@query = remove_lang(@query, lang_code)
|
63
62
|
@pathname_with_trailing_slash_if_present = @pathname
|
64
63
|
@pathname = @pathname.gsub(/\/$/, '')
|
65
|
-
@redis_url = "#{@host}#{@pathname}#{@query}"
|
66
64
|
end
|
67
65
|
|
68
66
|
def unmasked_pathname_without_trailing_slash
|
@@ -98,27 +96,7 @@ module Wovnrb
|
|
98
96
|
@path_lang
|
99
97
|
end
|
100
98
|
|
101
|
-
def
|
102
|
-
if @browser_lang.nil?
|
103
|
-
match = (@env['HTTP_COOKIE'] || '').match(/wovn_selected_lang\s*=\s*(?<lang>[^;\s]+)/)
|
104
|
-
if match && match[:lang] && Lang.get_lang(match[:lang])
|
105
|
-
@browser_lang = match[:lang]
|
106
|
-
else
|
107
|
-
# IS THIS RIGHT?
|
108
|
-
@browser_lang = ''
|
109
|
-
accept_langs = (@env['HTTP_ACCEPT_LANGUAGE'] || '').split(/[,;]/)
|
110
|
-
accept_langs.each do |l|
|
111
|
-
if Lang.get_lang(l)
|
112
|
-
@browser_lang = l
|
113
|
-
break
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
@browser_lang
|
119
|
-
end
|
120
|
-
|
121
|
-
def redirect(lang = browser_lang)
|
99
|
+
def redirect(lang)
|
122
100
|
redirect_headers = {}
|
123
101
|
redirect_headers['location'] = redirect_location(lang)
|
124
102
|
redirect_headers['content-length'] = '0'
|
data/lib/wovnrb/lang.rb
CHANGED
@@ -3,46 +3,83 @@ require 'addressable'
|
|
3
3
|
module Wovnrb
|
4
4
|
class Lang
|
5
5
|
LANG = {
|
6
|
-
|
7
|
-
'
|
8
|
-
'
|
9
|
-
'
|
10
|
-
'
|
11
|
-
'
|
12
|
-
'zh-CHS' => { name: '简体中文',
|
13
|
-
'zh-
|
14
|
-
'
|
15
|
-
'
|
16
|
-
'
|
17
|
-
'
|
18
|
-
'
|
19
|
-
'
|
20
|
-
'
|
21
|
-
'
|
22
|
-
'
|
23
|
-
'
|
24
|
-
'
|
25
|
-
'
|
26
|
-
'
|
27
|
-
'
|
28
|
-
'
|
29
|
-
'
|
30
|
-
'
|
31
|
-
'
|
32
|
-
'
|
33
|
-
'
|
34
|
-
'
|
35
|
-
'
|
36
|
-
'
|
37
|
-
'
|
38
|
-
'
|
39
|
-
'
|
40
|
-
'
|
41
|
-
'
|
42
|
-
'
|
43
|
-
'
|
44
|
-
'
|
45
|
-
'
|
6
|
+
'ar' => { name: 'العربية', code: 'ar', en: 'Arabic' },
|
7
|
+
'eu' => { name: 'Euskara', code: 'eu', en: 'Basque' },
|
8
|
+
'bn' => { name: 'বাংলা ভাষা', code: 'bn', en: 'Bengali' },
|
9
|
+
'bg' => { name: 'Български', code: 'bg', en: 'Bulgarian' },
|
10
|
+
'ca' => { name: 'Català', code: 'ca', en: 'Catalan' },
|
11
|
+
'zh-CN' => { name: '简体中文(中国)', code: 'zh-CN', en: 'Simp Chinese (China)' },
|
12
|
+
'zh-CHS' => { name: '简体中文', code: 'zh-CHS', en: 'Simp Chinese' },
|
13
|
+
'zh-Hant-HK' => { name: '繁體中文(香港)', code: 'zh-Hant-HK', en: 'Trad Chinese (Hong Kong)' },
|
14
|
+
'zh-Hant-TW' => { name: '繁體中文(台湾)', code: 'zh-Hant-TW', en: 'Trad Chinese (Taiwan)' },
|
15
|
+
'zh-CHT' => { name: '繁體中文', code: 'zh-CHT', en: 'Trad Chinese' },
|
16
|
+
'da' => { name: 'Dansk', code: 'da', en: 'Danish' },
|
17
|
+
'nl' => { name: 'Nederlands', code: 'nl', en: 'Dutch' },
|
18
|
+
'en' => { name: 'English', code: 'en', en: 'English' },
|
19
|
+
'en-AU' => { name: 'English (Australia)', code: 'en-AU', en: 'English (Australia)' },
|
20
|
+
'en-CA' => { name: 'English (Canada)', code: 'en-CA', en: 'English (Canada)' },
|
21
|
+
'en-IN' => { name: 'English (India)', code: 'en-IN', en: 'English (India)' },
|
22
|
+
'en-NZ' => { name: 'English (New Zealand)', code: 'en-NZ', en: 'English (New Zealand)' },
|
23
|
+
'en-ZA' => { name: 'English (South Africa)', code: 'en-ZA', en: 'English (South Africa)' },
|
24
|
+
'en-GB' => { name: 'English (United Kingdom)', code: 'en-GB', en: 'English (United Kingdom)' },
|
25
|
+
'en-SG' => { name: 'English (Singapore)', code: 'en-SG', en: 'English (Singapore)' },
|
26
|
+
'en-US' => { name: 'English (United States)', code: 'en-US', en: 'English (United States)' },
|
27
|
+
'fi' => { name: 'Suomi', code: 'fi', en: 'Finnish' },
|
28
|
+
'fr' => { name: 'Français', code: 'fr', en: 'French' },
|
29
|
+
'fr-CA' => { name: 'Français (Canada)', code: 'fr-CA', en: 'French (Canada)' },
|
30
|
+
'fr-FR' => { name: 'Français (France)', code: 'fr-FR', en: 'French (France)' },
|
31
|
+
'fr-CH' => { name: 'Français (Suisse)', code: 'fr-CH', en: 'French (Switzerland)' },
|
32
|
+
'gl' => { name: 'Galego', code: 'gl', en: 'Galician' },
|
33
|
+
'de' => { name: 'Deutsch', code: 'de', en: 'German' },
|
34
|
+
'de-AT' => { name: 'Deutsch (Österreich)', code: 'de-AT', en: 'German (Austria)' },
|
35
|
+
'de-DE' => { name: 'Deutsch (Deutschland)', code: 'de-DE', en: 'German (Germany)' },
|
36
|
+
'de-LI' => { name: 'Deutsch (Liechtenstien)', code: 'de-LI', en: 'German (Liechtenstien)' },
|
37
|
+
'de-CH' => { name: 'Deutsch (Schweiz)', code: 'de-CH', en: 'German (Switzerland)' },
|
38
|
+
'el' => { name: 'Ελληνικά', code: 'el', en: 'Greek' },
|
39
|
+
'he' => { name: 'עברית', code: 'he', en: 'Hebrew' },
|
40
|
+
'hu' => { name: 'Magyar', code: 'hu', en: 'Hungarian' },
|
41
|
+
'id' => { name: 'Bahasa Indonesia', code: 'id', en: 'Indonesian' },
|
42
|
+
'it' => { name: 'Italiano', code: 'it', en: 'Italian' },
|
43
|
+
'it-IT' => { name: 'Italiano (Italia)', code: 'it-IT', en: 'Italian (Italy)' },
|
44
|
+
'it-CH' => { name: 'Italiano (Svizzera)', code: 'it-CH', en: 'Italian (Switzerland)' },
|
45
|
+
'ja' => { name: '日本語', code: 'ja', en: 'Japanese' },
|
46
|
+
'ko' => { name: '한국어', code: 'ko', en: 'Korean' },
|
47
|
+
'lv' => { name: 'Latviešu', code: 'lv', en: 'Latvian' },
|
48
|
+
'ms' => { name: 'Bahasa Melayu', code: 'ms', en: 'Malay' },
|
49
|
+
'my' => { name: 'ဗမာစာ', code: 'my', en: 'Burmese' },
|
50
|
+
'ne' => { name: 'नेपाली भाषा', code: 'ne', en: 'Nepali' },
|
51
|
+
'no' => { name: 'Norsk', code: 'no', en: 'Norwegian' },
|
52
|
+
'fa' => { name: 'زبان_فارسی', code: 'fa', en: 'Persian' },
|
53
|
+
'pl' => { name: 'Polski', code: 'pl', en: 'Polish' },
|
54
|
+
'pt' => { name: 'Português', code: 'pt', en: 'Portuguese' },
|
55
|
+
'pt-BR' => { name: 'Português (Brasil)', code: 'pt-BR', en: 'Portuguese (Brazil)' },
|
56
|
+
'pt-PT' => { name: 'Português (Portugal)', code: 'pt-PT', en: 'Portuguese (Portugal)' },
|
57
|
+
'ru' => { name: 'Русский', code: 'ru', en: 'Russian' },
|
58
|
+
'es' => { name: 'Español', code: 'es', en: 'Spanish' },
|
59
|
+
'es-RA' => { name: 'Español (Argentina)', code: 'es-RA', en: 'Spanish (Argentina)' },
|
60
|
+
'es-CL' => { name: 'Español (Chile)', code: 'es-CL', en: 'Spanish (Chile)' },
|
61
|
+
'es-CO' => { name: 'Español (Colombia)', code: 'es-CO', en: 'Spanish (Colombia)' },
|
62
|
+
'es-CR' => { name: 'Español (Costa Rica)', code: 'es-CR', en: 'Spanish (Costa Rica)' },
|
63
|
+
'es-HN' => { name: 'Español (Honduras)', code: 'es-HN', en: 'Spanish (Honduras)' },
|
64
|
+
'es-419' => { name: 'Español (Latinoamérica)', code: 'es-419', en: 'Spanish (Latin America)' },
|
65
|
+
'es-MX' => { name: 'Español (México)', code: 'es-MX', en: 'Spanish (Mexico)' },
|
66
|
+
'es-PE' => { name: 'Español (Perú)', code: 'es-PE', en: 'Spanish (Peru)' },
|
67
|
+
'es-ES' => { name: 'Español (España)', code: 'es-ES', en: 'Spanish (Spain)' },
|
68
|
+
'es-US' => { name: 'Español (Estados Unidos)', code: 'es-US', en: 'Spanish (United States)' },
|
69
|
+
'es-UY' => { name: 'Español (Uruguay)', code: 'es-UY', en: 'Spanish (Uruguay)' },
|
70
|
+
'es-VE' => { name: 'Español (Venezuela)', code: 'es-VE', en: 'Spanish (Venezuela)' },
|
71
|
+
'sw' => { name: 'Kiswahili', code: 'sw', en: 'Swahili' },
|
72
|
+
'sv' => { name: 'Svensk', code: 'sv', en: 'Swedish' },
|
73
|
+
'tl' => { name: 'Tagalog', code: 'tl', en: 'Tagalog' },
|
74
|
+
'th' => { name: 'ภาษาไทย', code: 'th', en: 'Thai' },
|
75
|
+
'hi' => { name: 'हिन्दी', code: 'hi', en: 'Hindi' },
|
76
|
+
'tr' => { name: 'Türkçe', code: 'tr', en: 'Turkish' },
|
77
|
+
'uk' => { name: 'Українська', code: 'uk', en: 'Ukrainian' },
|
78
|
+
'ur' => { name: 'اردو', code: 'ur', en: 'Urdu' },
|
79
|
+
'vi' => { name: 'Tiếng Việt', code: 'vi', en: 'Vietnamese' },
|
80
|
+
'km' => { name: 'ភាសាខ្មែរ', code: 'km', en: 'Khmer' },
|
81
|
+
'ta' => { name: 'தமிழ்', code: 'ta', en: 'Tamil' },
|
82
|
+
'si' => { name: 'සිංහල', code: 'si', en: 'Sinhala' }
|
46
83
|
}.freeze
|
47
84
|
|
48
85
|
# Provides the ISO639-1 code for a given lang code.
|
data/lib/wovnrb/railtie.rb
CHANGED
@@ -1,21 +1,7 @@
|
|
1
1
|
module Wovnrb
|
2
|
-
def self.middleware_inserted?(app, middleware)
|
3
|
-
app.middleware.send(:operations).each do |_, middlewares, _|
|
4
|
-
return true if middlewares.include?(middleware)
|
5
|
-
end
|
6
|
-
|
7
|
-
false
|
8
|
-
end
|
9
|
-
|
10
2
|
class Railtie < Rails::Railtie
|
11
3
|
initializer 'wovnrb.configure_rails_initialization' do |app|
|
12
|
-
|
13
|
-
if defined?(Rack::Deflater) && Wovnrb.middleware_inserted?(app, Rack::Deflater)
|
14
|
-
app.middleware.insert_after(Rack::Deflater, Wovnrb::Interceptor)
|
15
|
-
else
|
16
|
-
app.middleware.insert_before(0, Wovnrb::Interceptor)
|
17
|
-
end
|
18
|
-
end
|
4
|
+
app.middleware.insert_before(0, Wovnrb::Interceptor) if Rails.configuration.wovnrb[:install_middleware]
|
19
5
|
end
|
20
6
|
end
|
21
7
|
end
|
@@ -43,6 +43,7 @@ module Wovnrb
|
|
43
43
|
|
44
44
|
insert_snippet(true)
|
45
45
|
insert_hreflang_tags
|
46
|
+
inject_lang_html_tag
|
46
47
|
|
47
48
|
html
|
48
49
|
end
|
@@ -84,7 +85,7 @@ module Wovnrb
|
|
84
85
|
end
|
85
86
|
|
86
87
|
def strip_wovn_ignore(node, marker)
|
87
|
-
put_replace_marker(node, marker) if node && node.get_attribute('wovn-ignore')
|
88
|
+
put_replace_marker(node, marker) if node && (node.get_attribute('wovn-ignore') || node.get_attribute('data-wovn-ignore'))
|
88
89
|
end
|
89
90
|
|
90
91
|
def put_replace_marker(node, marker)
|
@@ -108,15 +109,9 @@ module Wovnrb
|
|
108
109
|
def inject_lang_html_tag
|
109
110
|
root = @dom.at_css('html')
|
110
111
|
return unless root
|
112
|
+
return if root['lang']
|
111
113
|
|
112
|
-
|
113
|
-
default_lang = @store.default_lang
|
114
|
-
|
115
|
-
if current_lang != default_lang
|
116
|
-
root['lang'] = current_lang
|
117
|
-
else
|
118
|
-
root.delete('lang')
|
119
|
-
end
|
114
|
+
root['lang'] = @store.default_lang
|
120
115
|
end
|
121
116
|
|
122
117
|
def replace_hreflangs
|
@@ -147,10 +142,14 @@ module Wovnrb
|
|
147
142
|
# Remove wovn snippet code from dom
|
148
143
|
def strip_snippet
|
149
144
|
@dom.xpath('//script').each do |script_node|
|
150
|
-
script_node.remove if script_node['src'] && script_node['src']
|
145
|
+
script_node.remove if (script_node['src'] && widget_urls.any? { |url| script_node['src'].include? url }) || script_node['data-wovnio'].present?
|
151
146
|
end
|
152
147
|
end
|
153
148
|
|
149
|
+
def widget_urls
|
150
|
+
[@store.settings['api_url'] + '/widget', 'j.wovn.io', 'j.dev-wovn.io:3000']
|
151
|
+
end
|
152
|
+
|
154
153
|
def insert_snippet(adds_backend_error_mark = true)
|
155
154
|
parent_node = @dom.at_css('head') || @dom.at_css('body') || @dom.at_css('html')
|
156
155
|
return unless parent_node
|
data/lib/wovnrb/store.rb
CHANGED
@@ -23,7 +23,7 @@ module Wovnrb
|
|
23
23
|
'lang_param_name' => 'wovn',
|
24
24
|
'query' => [],
|
25
25
|
'ignore_class' => [],
|
26
|
-
'api_url' => 'https://wovn.global.ssl.fastly.net
|
26
|
+
'api_url' => 'https://wovn.global.ssl.fastly.net',
|
27
27
|
'api_timeout_seconds' => 1.0,
|
28
28
|
'default_lang' => 'en',
|
29
29
|
'supported_langs' => ['en'],
|
@@ -157,7 +157,7 @@ module Wovnrb
|
|
157
157
|
|
158
158
|
if @settings['wovn_dev_mode']
|
159
159
|
if @settings['api_url'] == self.class.default_settings['api_url']
|
160
|
-
@settings['api_url'] = 'http://dev-wovn.io:3001
|
160
|
+
@settings['api_url'] = 'http://dev-wovn.io:3001'
|
161
161
|
end
|
162
162
|
|
163
163
|
if @settings['api_timeout_seconds'] == self.class.default_settings['api_timeout_seconds']
|
@@ -185,7 +185,7 @@ module Wovnrb
|
|
185
185
|
|
186
186
|
def wovn_host
|
187
187
|
if @settings['wovn_dev_mode']
|
188
|
-
'dev-wovn.io
|
188
|
+
'dev-wovn.io'
|
189
189
|
else
|
190
190
|
'wovn.io'
|
191
191
|
end
|
data/lib/wovnrb/version.rb
CHANGED
data/makefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
DOCKER_COMPOSE_YML = docker/docker-compose.yml
|
2
|
+
|
3
|
+
.PHONY: build stop start clean
|
4
|
+
|
5
|
+
build:
|
6
|
+
docker-compose -f $(DOCKER_COMPOSE_YML) build
|
7
|
+
|
8
|
+
stop:
|
9
|
+
docker-compose -f $(DOCKER_COMPOSE_YML) rm -sf
|
10
|
+
|
11
|
+
start:
|
12
|
+
docker-compose -f $(DOCKER_COMPOSE_YML) up
|
13
|
+
|
14
|
+
clean:
|
15
|
+
docker-compose -f $(DOCKER_COMPOSE_YML) down --rmi all --volumes
|
16
|
+
|
data/test/lib/headers_test.rb
CHANGED
@@ -74,24 +74,6 @@ module Wovnrb
|
|
74
74
|
assert_equal('localhost', env['SERVER_NAME'])
|
75
75
|
end
|
76
76
|
|
77
|
-
def test_initialize_without_query
|
78
|
-
env = Wovnrb.get_env
|
79
|
-
h = Wovnrb::Headers.new(env, Wovnrb.get_settings)
|
80
|
-
assert_equal('wovn.io/dashboard', h.redis_url)
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_initialize_with_query
|
84
|
-
env = Wovnrb.get_env
|
85
|
-
h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['param']))
|
86
|
-
assert_equal('wovn.io/dashboard?param=val', h.redis_url)
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_initialize_with_not_matching_query
|
90
|
-
env = Wovnrb.get_env
|
91
|
-
h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['aaa']))
|
92
|
-
assert_equal('wovn.io/dashboard', h.redis_url)
|
93
|
-
end
|
94
|
-
|
95
77
|
def test_initialize_with_proto_header
|
96
78
|
env = Wovnrb.get_env('url' => 'http://page.com', 'HTTP_X_FORWARDED_PROTO' => 'https')
|
97
79
|
h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['aaa']))
|
@@ -6232,7 +6214,7 @@ module Wovnrb
|
|
6232
6214
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
|
6233
6215
|
|
6234
6216
|
keys = Wovnrb::Lang::LANG.keys
|
6235
|
-
assert_equal(
|
6217
|
+
assert_equal(77, keys.size)
|
6236
6218
|
|
6237
6219
|
for key in keys
|
6238
6220
|
uri_without_scheme = h.remove_lang("wovn.io/#{key}", key)
|
@@ -6246,7 +6228,7 @@ module Wovnrb
|
|
6246
6228
|
def test_remove_lang_path_with_nil_lang
|
6247
6229
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
|
6248
6230
|
keys = Wovnrb::Lang::LANG.keys
|
6249
|
-
assert_equal(
|
6231
|
+
assert_equal(77, keys.size)
|
6250
6232
|
|
6251
6233
|
uri_without_scheme = h.remove_lang('wovn.io', nil)
|
6252
6234
|
assert_equal('wovn.io', uri_without_scheme)
|
@@ -6269,7 +6251,7 @@ module Wovnrb
|
|
6269
6251
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
|
6270
6252
|
|
6271
6253
|
keys = Wovnrb::Lang::LANG.keys
|
6272
|
-
assert_equal(
|
6254
|
+
assert_equal(77, keys.size)
|
6273
6255
|
|
6274
6256
|
for key in keys
|
6275
6257
|
uri_without_scheme = h.remove_lang("wovn.io/?wovn=#{key}", key)
|
@@ -6284,7 +6266,7 @@ module Wovnrb
|
|
6284
6266
|
sut = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query', 'lang_param_name' => 'lang'))
|
6285
6267
|
|
6286
6268
|
keys = Wovnrb::Lang::LANG.keys
|
6287
|
-
assert_equal(
|
6269
|
+
assert_equal(77, keys.size)
|
6288
6270
|
|
6289
6271
|
for key in keys
|
6290
6272
|
uri_without_custom_lang_param = "wovn.io/?wovn=#{key}"
|
@@ -6302,7 +6284,7 @@ module Wovnrb
|
|
6302
6284
|
def test_remove_lang_query_with_nil_lang
|
6303
6285
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
|
6304
6286
|
keys = Wovnrb::Lang::LANG.keys
|
6305
|
-
assert_equal(
|
6287
|
+
assert_equal(77, keys.size)
|
6306
6288
|
|
6307
6289
|
uri_without_scheme = h.remove_lang('wovn.io', nil)
|
6308
6290
|
assert_equal('wovn.io', uri_without_scheme)
|
@@ -6325,7 +6307,7 @@ module Wovnrb
|
|
6325
6307
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
|
6326
6308
|
|
6327
6309
|
keys = Wovnrb::Lang::LANG.keys
|
6328
|
-
assert_equal(
|
6310
|
+
assert_equal(77, keys.size)
|
6329
6311
|
|
6330
6312
|
for key in keys
|
6331
6313
|
uri_without_scheme = h.remove_lang("#{key.downcase}.wovn.io/", key)
|
@@ -6339,7 +6321,7 @@ module Wovnrb
|
|
6339
6321
|
def test_remove_lang_subdomain_with_nil_lang
|
6340
6322
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
|
6341
6323
|
keys = Wovnrb::Lang::LANG.keys
|
6342
|
-
assert_equal(
|
6324
|
+
assert_equal(77, keys.size)
|
6343
6325
|
|
6344
6326
|
uri_without_scheme = h.remove_lang('wovn.io', nil)
|
6345
6327
|
assert_equal('wovn.io', uri_without_scheme)
|
data/test/lib/lang_test.rb
CHANGED
@@ -7,7 +7,7 @@ module Wovnrb
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def test_langs_length
|
10
|
-
assert_equal(
|
10
|
+
assert_equal(77, Wovnrb::Lang::LANG.length)
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_keys_exist
|
@@ -20,45 +20,15 @@ module Wovnrb
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def test_iso_639_1_normalization
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
assert_equal('en', Lang.iso_639_1_normalization('en'))
|
33
|
-
assert_equal('fi', Lang.iso_639_1_normalization('fi'))
|
34
|
-
assert_equal('fr', Lang.iso_639_1_normalization('fr'))
|
35
|
-
assert_equal('gl', Lang.iso_639_1_normalization('gl'))
|
36
|
-
assert_equal('de', Lang.iso_639_1_normalization('de'))
|
37
|
-
assert_equal('el', Lang.iso_639_1_normalization('el'))
|
38
|
-
assert_equal('he', Lang.iso_639_1_normalization('he'))
|
39
|
-
assert_equal('hu', Lang.iso_639_1_normalization('hu'))
|
40
|
-
assert_equal('id', Lang.iso_639_1_normalization('id'))
|
41
|
-
assert_equal('it', Lang.iso_639_1_normalization('it'))
|
42
|
-
assert_equal('ja', Lang.iso_639_1_normalization('ja'))
|
43
|
-
assert_equal('ko', Lang.iso_639_1_normalization('ko'))
|
44
|
-
assert_equal('lv', Lang.iso_639_1_normalization('lv'))
|
45
|
-
assert_equal('ms', Lang.iso_639_1_normalization('ms'))
|
46
|
-
assert_equal('my', Lang.iso_639_1_normalization('my'))
|
47
|
-
assert_equal('ne', Lang.iso_639_1_normalization('ne'))
|
48
|
-
assert_equal('fa', Lang.iso_639_1_normalization('fa'))
|
49
|
-
assert_equal('no', Lang.iso_639_1_normalization('no'))
|
50
|
-
assert_equal('pl', Lang.iso_639_1_normalization('pl'))
|
51
|
-
assert_equal('pt', Lang.iso_639_1_normalization('pt'))
|
52
|
-
assert_equal('ru', Lang.iso_639_1_normalization('ru'))
|
53
|
-
assert_equal('es', Lang.iso_639_1_normalization('es'))
|
54
|
-
assert_equal('sw', Lang.iso_639_1_normalization('sw'))
|
55
|
-
assert_equal('sv', Lang.iso_639_1_normalization('sv'))
|
56
|
-
assert_equal('th', Lang.iso_639_1_normalization('th'))
|
57
|
-
assert_equal('hi', Lang.iso_639_1_normalization('hi'))
|
58
|
-
assert_equal('tr', Lang.iso_639_1_normalization('tr'))
|
59
|
-
assert_equal('uk', Lang.iso_639_1_normalization('uk'))
|
60
|
-
assert_equal('ur', Lang.iso_639_1_normalization('ur'))
|
61
|
-
assert_equal('vi', Lang.iso_639_1_normalization('vi'))
|
23
|
+
Wovnrb::Lang::LANG.each do |_, l|
|
24
|
+
if l[:code] == 'zh-CHS'
|
25
|
+
assert_equal('zh-Hans', Lang.iso_639_1_normalization('zh-CHS'))
|
26
|
+
elsif l[:code] == 'zh-CHT'
|
27
|
+
assert_equal('zh-Hant', Lang.iso_639_1_normalization('zh-CHT'))
|
28
|
+
else
|
29
|
+
assert_equal(l[:code], Lang.iso_639_1_normalization(l[:code]))
|
30
|
+
end
|
31
|
+
end
|
62
32
|
end
|
63
33
|
|
64
34
|
def test_get_code_with_valid_code
|