app/models/alchemy/page/url_path.rb
# frozen_string_literal: true
module Alchemy
class Page
# = The url_path for this page
#
# Use this to build relative links to this page
#
# It takes several circumstances into account:
#
# 1. It returns just a slash for language root pages of the default langauge
# 2. It returns a url path with a leading slash for regular pages
# 3. It returns a url path with a leading slash and language code prefix for pages not having the default language
# 4. It returns a url path with a leading slash and the language code for language root pages of a non-default language
#
# == Examples
#
# Using Rails' link_to helper
#
# link_to page.url
#
class UrlPath
def initialize(page)
@page = page
@language = @page.language
@site = @language.site
end
def call
if @page.language_root?
language_root_path
elsif @site.languages.count(&:public?) > 1
page_path_with_language_prefix
else
page_path_with_leading_slash
end
end
private
def language_root_path
@language.default? ? root_path : language_path
end
def page_path_with_language_prefix
@language.default? ? page_path : language_path + page_path
end
def page_path_with_leading_slash
@page.language_root? ? root_path : page_path
end
def language_path
"#{root_path}#{@page.language_code}"
end
def page_path
"#{root_path}#{@page.urlname}"
end
def root_path
Engine.routes.url_helpers.root_path
end
end
end
end