#45 差分 API 作成

This commit is contained in:
2025-06-24 07:05:21 +09:00
parent 053dae0c25
commit 5afee2f344
5 changed files with 84 additions and 7 deletions
@@ -7,10 +7,51 @@ class WikiPagesController < ApplicationController
end
def show_by_title
wiki_page = WikiPage.find_by(title: params[:title])
title = params[:title]
version = params[:version].presence
wiki_page = WikiPage.find_by(title:)
return head :not_found unless wiki_page
render json: wiki_page.as_json.merge(body: wiki_page.body)
wiki_page.sha = version
body = wiki_page.body
sha = wiki_page.sha
pred = wiki_page.pred
succ = wiki_page.succ
render json: wiki_page.as_json.merge(body:, sha:, pred:, succ:)
end
def diff
id = params[:id]
from = params[:from]
to = params[:to].presence
return head :bad_request if id.blank? || from.blank?
wiki_page_from = WikiPage.find(id)
wiki_page_to = wiki_page_from.clone
wiki_page_from.sha = from
wiki_page_to.sha = to
diffs = Diff::LCS.sdiff(wiki_page_from.body, wiki_page_to.body)
diff_json = diffs.map { |change|
case change.action
when ?=
{ type: 'context', content: change.old_element }
when ?|
[{ type: 'removed', content: change.old_element },
{ type: 'added', content: change.new_element }]
when ?+
{ type: 'added', content: change.new_element }
when ?-
{ type: 'removed', content: change.old_element }
end }.flatten.compact
render json: { wiki_page_id: wiki_page_from.id,
title: wiki_page_from.title,
older_sha: wiki_page_from.sha,
newer_sha: wiki_page_to.sha,
diff: diff_json }
end
def create
@@ -57,8 +98,12 @@ class WikiPagesController < ApplicationController
render json: log.map { |commit|
wiki_page = WikiPage.find(commit.message.split(' ')[1].to_i)
wiki_page.sha = commit.id
user = User.find(commit.author.name.to_i)
{ sha: commit.id,
{ sha: wiki_page.sha,
pred: wiki_page.pred,
succ: wiki_page.succ,
wiki_page: wiki_page && { id: wiki_page.id, title: wiki_page.title },
user: user && { id: user.id, name: user.name },
change_type: commit.message.split(' ')[0].downcase[0...(-1)],