このコミットが含まれているのは:
2026-10-15 20:20:00 +09:00
コミット 1e464107a8
36個のファイルの変更、566行の追加、2082行の削除
+9 -36
ファイルの表示
@@ -7,8 +7,7 @@ module TagGroupRecords
'tag_groups', 'tag_group_tags', 'tag_group_groups',
'tag_group_placements', 'tag_group_versions'].freeze
WRITE_TABLES = GROUP_TABLES + [
'wiki_pages', 'wiki_revisions', 'wiki_versions', 'wiki_lines',
'wiki_revision_lines', 'tag_names', 'tag_description_versions',
'tag_names', 'tag_description_versions',
'tag_descriptions']
def group_connection = ApplicationRecord.connection
@@ -34,13 +33,11 @@ module TagGroupRecords
WRITE_TABLES.to_h { |table| [table, group_rows(table)] }
end
def expect_noop_group_update group_id:, page:
def expect_noop_group_update group_id:
before_state = group_state
group = TagGroup.find(group_id)
version_id = TagGroupVersion.find_by!(
tag_group_id: group_id, version_no: group.version_no).id
revision_id = page.reload.current_revision.id
wiki_version_id = page.wiki_versions.order(version_no: :desc).first.id
writes = []
tables = Regexp.union(WRITE_TABLES)
subscriber = lambda do |*args|
@@ -59,8 +56,6 @@ module TagGroupRecords
end
expect(TagGroupVersion.find_by!(
tag_group_id: group_id, version_no: group.reload.version_no).id).to eq(version_id)
expect(page.reload.current_revision.id).to eq(revision_id)
expect(page.wiki_versions.order(version_no: :desc).first.id).to eq(wiki_version_id)
expect(writes).to be_empty
end
end
@@ -99,25 +94,13 @@ module TagGroupRecords
tag.reload
end
def legacy_group name, body
# Historical fixtures preserve blank lines independently of today's writer.
body = body.sub(/\n+\z/, '')
page = WikiPage.create!(
tag_name: create(:tag_name, name: "タググループ:#{ name }"),
body:, created_user: user, updated_user: user)
WikiVersionRecorder.record!(page:, event_type: :create, created_by_user: user)
lines = body.split("\n")
shas = lines.map { Digest::SHA256.hexdigest(_1) }
revision = WikiRevision.create!(
wiki_page: page, kind: :content, created_user: user, lines_count: lines.size,
tree_sha256: Digest::SHA256.hexdigest(shas.join(',')))
lines.each_with_index do |line, position|
sha = shas.fetch(position)
line_id = WikiLine.find_by(sha256: sha)&.id || insert_group_row('wiki_lines', {
body: line, sha256: sha, created_at: Time.current, updated_at: Time.current })
WikiRevisionLine.create!(wiki_revision: revision, wiki_line_id: line_id, position:)
end
page
def create_markdown_group name, body
parsed = TagGroupMarkdownParser.parse(body:)
TagGroupOperation.create!(name:, actor: user, **parsed.slice(:description, :members, :placements))
end
def group_markdown group
TagGroupMarkdownRenderer.render(TagGroupRepr.one(group.reload))
end
def seed_group name:, placements: [], members: [], description: nil, id: nil
@@ -176,16 +159,6 @@ module TagGroupRecords
"/wiki/title/#{ CGI.escapeURIComponent("タググループ:#{ name }") }"
end
def migrate_groups
require_relative '../../db/migrate/20261008010000_migrate_tag_groups_from_wiki_pages'
migration = MigrateTagGroupsFromWikiPages.new
@group_migration_messages = []
allow(migration).to receive(:say) do |message, *_args|
@group_migration_messages << message if message.start_with?('Wiki #', 'Tag Group')
end
migration.suppress_messages { migration.up }
end
def expect_group_snapshot group_id, number:, placements:, members:, description: nil
current = group_rows('tag_groups', id: group_id).sole
version = group_version(group_id, number)
+11 -17
ファイルの表示
@@ -1,20 +1,14 @@
# Historical records must remain seedable after application creation is frozen.
module WikiRecords
def seed_wiki_page(tag_name:, body:, created_by_user:, message: nil)
page = WikiPage.create!(tag_name:, body:,
created_user: created_by_user, updated_user: created_by_user)
revision = Wiki::Commit.legacy_content!(
page:, body:, created_user: created_by_user, message:)
if tag_name.tag && tag_name.language_code == 'ja'
TagDescription.create!(
id: page.id, tag: tag_name.tag, language_code: 'ja', body: page.reload.body,
version_no: 1, created_by_user_id: created_by_user.id,
updated_by_user_id: created_by_user.id)
TagDescriptionVersion.create!(
id: revision.id, tag_id: tag_name.tag_id, language_code: 'ja',
version_no: 1, event_type: 'create', body: page.body,
created_by_user_id: created_by_user.id, created_at: revision.created_at)
end
page
def seed_description(tag_name:, body:, created_by_user:, message: nil)
TagDescriptionOperation.create!(tag: tag_name.tag, body:, created_by_user:, message:)
end
def description_versions(description)
TagDescriptionVersion.where(
tag_id: description.tag_id, language_code: description.language_code)
end
def current_description_version(description)
description_versions(description).find_by!(version_no: description.reload.version_no)
end
end