このコミットが含まれているのは:
2026-10-15 02:45:41 +09:00
コミット 2ef872bd33
18個のファイルの変更、99行の追加、640行の削除
+12 -63
ファイルの表示
@@ -1,7 +1,7 @@
class WikiPagesController < ApplicationController
# 互換性のための Facade API
rescue_from Wiki::Commit::Conflict, with: :render_wiki_conflict
rescue_from TagDescriptionOperation::Conflict, with: :render_wiki_conflict
def index
title = params[:title].to_s.strip
@@ -38,7 +38,7 @@ class WikiPagesController < ApplicationController
tag_group = TagGroup.find_by(id: params[:id])
return render_tag_group tag_group if tag_group
render_wiki_page_or_404 nil
head :not_found
end
def show_by_title
@@ -55,7 +55,7 @@ class WikiPagesController < ApplicationController
return render_wiki_page_by_tag_description tag_description if tag_description
render_wiki_page_or_404 nil
head :not_found
end
def exists
@@ -134,15 +134,15 @@ class WikiPagesController < ApplicationController
if title.start_with?(TagGroupRepr::PREFIX)
name = title.delete_prefix(TagGroupRepr::PREFIX)
parsed = TagGroupMarkdownParser.parse(body:, group: nil)
group = TagGroupOperation.create!(name:, **parsed, actor: current_user,
require_compatibility: true)
group = TagGroupOperation.create!(
name:, **parsed.except(:compatibility_body), actor: current_user)
version = current_group_version(group)
return render_group_representation(TagGroupRepr.one(group), version,
body: parsed.fetch(:compatibility_body),
status: :created)
end
page =
description =
if title.include?(':')
return render_unprocessable_entity field: :title
else
@@ -153,7 +153,6 @@ class WikiPagesController < ApplicationController
tag: tag_name.tag, body:, created_by_user: current_user, message:)
end
description = TagDescription.find_by!(tag_id: page.tag_name.tag_id, language_code: 'ja')
render json: WikiPageRepr.tag_description(description), status: :created
rescue ActiveRecord::RecordInvalid => e
render_validation_error e.record
@@ -179,22 +178,21 @@ class WikiPagesController < ApplicationController
name = title.delete_prefix(TagGroupRepr::PREFIX)
parsed = TagGroupMarkdownParser.parse(body:, group:)
TagGroupOperation.update!(group:, name:, **parsed, actor: current_user,
require_compatibility: true)
TagGroupOperation.update!(
group:, name:, **parsed.except(:compatibility_body), actor: current_user)
return head :ok
end
return render_unprocessable_entity field: :title if title.include?(':')
description = TagDescription.find_by(id: params[:id])
unless description
return render_unprocessable_entity field: :title if group || WikiPage.exists?(id: params[:id])
return render_unprocessable_entity field: :title if group
return head :not_found
end
tag = description.tag
tag_name = TagDescriptionOperation.compatibility_tag_name(tag)
if tag_name.name.include?(':') || (group && title != tag_name.name)
return render_unprocessable_entity field: :title
end
tag_name = tag.tag_name('ja')
return render_unprocessable_entity field: :title unless tag_name
return render_unprocessable_entity field: :title if tag_name.name.include?(':')
base_revision_id = params[:base_revision_id].presence
@@ -251,26 +249,6 @@ class WikiPagesController < ApplicationController
private
def legacy_group_page? page
return false unless page
return true if page.title.start_with?(TagGroupRepr::PREFIX)
prefix = ApplicationRecord.sanitize_sql_like(TagGroupRepr::PREFIX)
page.wiki_versions.where('title LIKE ?', "#{ prefix }%").exists?
end
def legacy_update_identified? page, title, group
return false unless page
return true if page.title == title
return false if title == group.name
namespace = page.title.split(':', 2)
return true if namespace.size == 2 && title.start_with?("#{ namespace.first }:")
base = params[:base_revision_id].presence
base && page.wiki_revisions.exists?(id: base)
end
def render_tag_group group
version = if params[:version].present?
group_version(group, params[:version])
@@ -357,27 +335,6 @@ class WikiPagesController < ApplicationController
end
end
def render_wiki_page_or_404 page
return head :not_found unless page
rev = find_revision(page)
return head :not_found unless rev
if rev.redirect?
return (
redirect_to wiki_page_by_title_path(title: rev.redirect_page.title),
status: :moved_permanently)
end
body = rev.body
revision_id = rev.id
pred = page.pred_revision_id(revision_id)
succ = page.succ_revision_id(revision_id)
updated_at = rev.created_at
render json: WikiPageRepr.base(page).merge(body:, revision_id:, pred:, succ:, updated_at:)
end
def render_wiki_page_by_tag_description description
versions = description_versions(description)
historical = params[:version].present?
@@ -432,14 +389,6 @@ class WikiPagesController < ApplicationController
end
end
def find_revision page
if params[:version].present?
page.wiki_revisions.find_by(id: params[:version])
else
page.current_revision
end
end
def render_wiki_conflict err
render json: { error: 'conflict', message: err.message }, status: :conflict
end