diff --git a/lib/wovnrb/url_language_switcher.rb b/lib/wovnrb/url_language_switcher.rb index 1b2e08a..2314c5a 100644 --- a/lib/wovnrb/url_language_switcher.rb +++ b/lib/wovnrb/url_language_switcher.rb @@ -44,7 +44,11 @@ def remove_lang_from_uri_component(uri, lang) rp = Regexp.new("(^|(//))#{lang_code}\\.", 'i') uri.sub(rp, '\1') when 'path' - uri.sub(%r{/#{lang_code}(/|$)}, '/') + # ^(.*://|//)? 1: schema (optional) like https:// + # ([^/]*/)? 2: host (optional) like wovn.io, with trailing '/' (mandatory) + # (/|$) 3: path or end-of-string + lang_code_pattern = %r{^(.*://|//)?([^/]*/)?#{lang_code}(/|$)} + uri.sub(lang_code_pattern, '\1\2') else raise RuntimeError("Invalid URL pattern: #{@store.settings['url_pattern']}") end diff --git a/lib/wovnrb/version.rb b/lib/wovnrb/version.rb index 55c7929..50ba191 100644 --- a/lib/wovnrb/version.rb +++ b/lib/wovnrb/version.rb @@ -1,3 +1,3 @@ module Wovnrb - VERSION = '3.7.1'.freeze + VERSION = '3.7.2'.freeze end diff --git a/test/lib/url_language_switcher_test.rb b/test/lib/url_language_switcher_test.rb index e507ce3..e66298d 100644 --- a/test/lib/url_language_switcher_test.rb +++ b/test/lib/url_language_switcher_test.rb @@ -876,17 +876,20 @@ def test_remove_lang_subdomain_with_custom_lang_alias def test_remove_lang_path settings = Wovnrb.get_settings store = Wovnrb.get_store(settings) - url_lang_switcher = UrlLanguageSwitcher.new(store) + sut = UrlLanguageSwitcher.new(store) keys = Wovnrb::Lang::LANG.keys assert_equal(77, keys.size) keys.each do |key| - uri_without_scheme = url_lang_switcher.remove_lang_from_uri_component("wovn.io/#{key}", key) - assert_equal('wovn.io/', uri_without_scheme) - - uri_with_scheme = url_lang_switcher.remove_lang_from_uri_component("https://wovn.io/#{key}/", key) - assert_equal('https://wovn.io/', uri_with_scheme) + assert_equal('/', sut.remove_lang_from_uri_component("/#{key}", key)) + assert_equal("/dir/#{key}/page.html", sut.remove_lang_from_uri_component("/#{key}/dir/#{key}/page.html", key)) + assert_equal('?query', sut.remove_lang_from_uri_component('?query', key)) + assert_equal('wovn.io/', sut.remove_lang_from_uri_component("wovn.io/#{key}", key)) + assert_equal("wovn.io/dir/#{key}/page.html", sut.remove_lang_from_uri_component("wovn.io/#{key}/dir/#{key}/page.html", key)) + assert_equal("wovn.io:5000/dir/#{key}/page.html", sut.remove_lang_from_uri_component("wovn.io:5000/#{key}/dir/#{key}/page.html", key)) + assert_equal('https://wovn.io/', sut.remove_lang_from_uri_component("https://wovn.io/#{key}/", key)) + assert_equal("https://wovn.io/dir/#{key}/page.html", sut.remove_lang_from_uri_component("https://wovn.io/#{key}/dir/#{key}/page.html", key)) end end