gitlab-org--gitlab-foss/lib/gitlab/static_site_editor/config/generated_config.rb

71 lines
1.8 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module StaticSiteEditor
module Config
class GeneratedConfig
def initialize(repository, ref, path, return_url)
@repository = repository
@ref = ref
@path = path
@return_url = return_url
end
def data
merge_requests_illustration_path = ActionController::Base.helpers.image_path('illustrations/merge_requests.svg')
{
branch: ref,
path: path,
commit_id: commit_id,
project_id: project.id,
project: project.path,
namespace: project.namespace.full_path,
return_url: sanitize_url(return_url),
is_supported_content: supported_content?,
base_url: Gitlab::Routing.url_helpers.project_show_sse_path(project, full_path),
merge_requests_illustration_path: merge_requests_illustration_path
}
end
private
attr_reader :repository, :ref, :path, :return_url
delegate :project, to: :repository
def supported_extensions
%w[.md .md.erb].freeze
end
def commit_id
repository.commit(ref)&.id
end
def supported_content?
branch_supported? && extension_supported? && file_exists?
end
def branch_supported?
ref.in?(%w[master main])
end
def extension_supported?
supported_extensions.any? { |ext| path.end_with?(ext) }
end
def file_exists?
commit_id.present? && !repository.blob_at(commit_id, path).nil?
end
def full_path
"#{ref}/#{path}"
end
def sanitize_url(url)
url if Gitlab::UrlSanitizer.valid_web?(url)
end
end
end
end
end