summaryrefslogtreecommitdiff
path: root/app/models/project.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/project.rb')
-rw-r--r--app/models/project.rb36
1 files changed, 25 insertions, 11 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 2e72de4e447..36b16a53fe8 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -1566,23 +1566,37 @@ class Project < ApplicationRecord
def pages_group_url
# The host in URL always needs to be downcased
- Gitlab.config.pages.url.sub(%r{^https?://}) do |prefix|
- "#{prefix}#{pages_subdomain}."
- end.downcase
+ strong_memoize(:pages_group_url) do
+ Gitlab.config.pages.url.sub(%r{^https?://}) do |prefix|
+ "#{prefix}#{pages_subdomain}."
+ end.downcase
+ end
end
- def pages_url
- url = pages_group_url
- url_path = full_path.partition('/').last
-
- # If the project path is the same as host, we serve it as group page
- return url if url == "#{Settings.pages.protocol}://#{url_path}"
+ def pages_group_root?
+ strong_memoize(:pages_group_root?) do
+ pages_group_url == "#{Settings.pages.protocol}://#{pages_path}"
+ end
+ end
- "#{url}/#{url_path}"
+ def pages_url
+ if pages_group_root?
+ pages_group_url
+ else
+ "#{pages_group_url}/#{pages_path}"
+ end
end
def pages_subdomain
- full_path.partition('/').first
+ strong_memoize(:pages_subdomain) do
+ full_path.partition('/').first
+ end
+ end
+
+ def pages_path
+ strong_memoize(:pages_path) do
+ full_path.partition('/').drop(1).join('/')
+ end
end
def pages_path