Module: HasWikiPageMetaAttributes

Extended by:
ActiveSupport::Concern
Includes:
Gitlab::Utils::StrongMemoize
Included in:
WikiPage::Meta
Defined in:
app/models/concerns/has_wiki_page_meta_attributes.rb

Constant Summary collapse

CanonicalSlugConflictError =
Class.new(ActiveRecord::RecordInvalid)
WikiPageInvalid =
Class.new(ArgumentError)

Instance Method Summary collapse

Instance Method Details

#canonical_slugObject



89
90
91
# File 'app/models/concerns/has_wiki_page_meta_attributes.rb', line 89

def canonical_slug
  strong_memoize(:canonical_slug) { slugs.canonical.take&.slug }
end

#canonical_slug=(slug) ⇒ Object

rubocop:disable Gitlab/ModuleWithInstanceVariables



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'app/models/concerns/has_wiki_page_meta_attributes.rb', line 94

def canonical_slug=(slug)
  return if @canonical_slug == slug

  if persisted?
    transaction do
      slugs.canonical.update_all(canonical: false)
      page_slug = slugs.create_with(canonical: true).find_or_create_by(slug: slug)
      page_slug.update_columns(canonical: true) unless page_slug.canonical?
    end
  else
    slugs.new(slug: slug, canonical: true)
  end

  @canonical_slug = slug
end

#update_state(created, known_slugs, wiki_page, updates) ⇒ Object

rubocop:enable Gitlab/ModuleWithInstanceVariables



111
112
113
114
115
# File 'app/models/concerns/has_wiki_page_meta_attributes.rb', line 111

def update_state(created, known_slugs, wiki_page, updates)
  update_wiki_page_attributes(updates)
  insert_slugs(known_slugs, created, wiki_page.slug)
  self.canonical_slug = wiki_page.slug
end