This commit is contained in:
2025-12-30 10:09:13 +09:00
parent 23d6303b49
commit 83fb6ee456
4 changed files with 84 additions and 8 deletions
@@ -31,17 +31,20 @@ class WikiPagesController < ApplicationController
def diff
id = params[:id]
from = params[:from]
return head :bad_request if id.blank?
from = params[:from].presence
to = params[:to].presence
return head :bad_request if id.blank? || from.blank?
page = WikiPage.find(id)
from_rev = page.wiki_revisions.find(from)
from_rev = from && page.wiki_revisions.find(from)
to_rev = to ? page.wiki_revisions.find(to) : page.current_revision
return head :unprocessable_entity if !(from_rev&.content?) || !(to_rev&.content?)
if ((from_rev && !(from_rev.content?)) || !(to_rev&.content?))
return head :unprocessable_entity
end
diffs = Diff::LCS.sdiff(from_rev.body.lines, to_rev.body.lines)
diffs = Diff::LCS.sdiff(from_rev&.body&.lines || [], to_rev.body.lines)
diff_json = diffs.map { |change|
case change.action
when ?=
@@ -58,7 +61,7 @@ class WikiPagesController < ApplicationController
render json: { wiki_page_id: page.id,
title: page.title,
older_revision_id: from_rev.id,
older_revision_id: from_rev&.id,
newer_revision_id: to_rev.id,
diff: diff_json }
end