45 lines
885 B
Ruby
45 lines
885 B
Ruby
![]() |
# frozen_string_literal: true
|
||
|
|
||
|
module HasWiki
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
included do
|
||
|
validate :check_wiki_path_conflict
|
||
|
end
|
||
|
|
||
|
def create_wiki
|
||
|
wiki.wiki
|
||
|
true
|
||
|
rescue Wiki::CouldNotCreateWikiError
|
||
|
errors.add(:base, _('Failed to create wiki'))
|
||
|
false
|
||
|
end
|
||
|
|
||
|
def wiki
|
||
|
strong_memoize(:wiki) do
|
||
|
Wiki.for_container(self, self.owner)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def wiki_repository_exists?
|
||
|
wiki.repository_exists?
|
||
|
end
|
||
|
|
||
|
def after_wiki_activity
|
||
|
true
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def check_wiki_path_conflict
|
||
|
return if path.blank?
|
||
|
|
||
|
path_to_check = path.ends_with?('.wiki') ? path.chomp('.wiki') : "#{path}.wiki"
|
||
|
|
||
|
if Project.in_namespace(parent_id).where(path: path_to_check).exists? ||
|
||
|
GroupsFinder.new(nil, parent: parent_id).execute.where(path: path_to_check).exists?
|
||
|
errors.add(:name, _('has already been taken'))
|
||
|
end
|
||
|
end
|
||
|
end
|