このコミットが含まれているのは:
2026-09-28 00:30:03 +09:00
コミット 28e638e360
18個のファイルの変更、209行の追加、68行の削除
+1
ファイルの表示
@@ -18,6 +18,7 @@ class PostCreatePreflight
def run locale
preview = PostImportPreviewer.new.preview_rows(
rows: [preview_row],
locale:,
fetch_metadata: false).first
if preview[:existing_post_id].present?
return {
+5 -4
ファイルの表示
@@ -16,7 +16,7 @@ class PostImportPreviewer
THUMBNAIL_FETCH_WARNING = 'サムネールを取得できませんでした.'.freeze
METADATA_FETCH_WARNING = '自動取得に失敗しました.'.freeze
def preview_rows locale, rows:, fetch_metadata: true, metadata_cache: { }
def preview_rows rows:, locale: Locale.nipponese, fetch_metadata: true, metadata_cache: { }
prepared_rows = rows.map { prepare_row(_1) }
url_counts = prepared_rows.filter_map { _1[:normal_url] }.tally
existing_posts =
@@ -30,6 +30,7 @@ class PostImportPreviewer
url_counts)
known_tags =
preload_known_tags(
locale,
prepared_rows,
fetch_metadata,
metadata_cache,
@@ -347,7 +348,7 @@ class PostImportPreviewer
{ data: { }, warnings: { 'url' => [METADATA_FETCH_WARNING] }, validation_errors: { } }
end
def preload_known_tags prepared_rows, fetch_metadata, metadata_cache, existing_posts, url_counts
def preload_known_tags locale, prepared_rows, fetch_metadata, metadata_cache, existing_posts, url_counts
names = prepared_rows.flat_map { |row|
attributes = initial_attributes(row)
provenance = initial_provenance(row)
@@ -359,11 +360,11 @@ class PostImportPreviewer
metadata = metadata_for(row[:normal_url], metadata_cache)
apply_metadata!(attributes, provenance, tag_sources, metadata[:data])
end
preview_tag_names(merged_tags(tag_sources, provenance['tags']))
preview_tag_names(locale, merged_tags(tag_sources, provenance['tags']))
}.compact.uniq
return { } if names.empty?
TagName.where(language_code: 'ja', primary_flg: true, name: names)
TagName.where(language_code: locale.language_code, primary_flg: true, name: names)
.includes(:tag)
.each_with_object({ }) { |tag_name, tags| tags[tag_name.name] = tag_name.tag }
end
+19 -6
ファイルの表示
@@ -1,11 +1,10 @@
class TagVersionRecorder < VersionRecorder
def self.record! tag:, event_type:, created_by_user:, language_code: 'ja'
new(tag:, event_type:, created_by_user:, language_code:).record!
def self.record! tag:, event_type:, created_by_user:, **_options
new(tag:, event_type:, created_by_user:).record!
end
def initialize tag:, event_type:, created_by_user:, language_code:
def initialize tag:, event_type:, created_by_user:
super(record: tag, event_type:, created_by_user:)
@language_code = language_code
end
private
@@ -15,10 +14,24 @@ class TagVersionRecorder < VersionRecorder
def record_key = :tag
def snapshot_attributes
{ name: @record.name(@language_code),
names = snapshot_names
japanese_names = names.select { _1[:language_code] == 'ja' }
compatibility_names = japanese_names.presence || names
{ name: compatibility_names.find { _1[:primary_flg] }[:name],
category: @record.category,
deprecated_at: @record.deprecated_at,
aliases: @record.snapshot_aliases(@language_code).join(' '),
aliases: compatibility_names.reject { _1[:primary_flg] }.map { _1[:name] }.join(' '),
names:,
parent_tag_ids: @record.snapshot_parent_tag_ids.join(' ') }
end
def snapshot_names
@record.tag_names.order(:language_code, primary_flg: :desc).order(:name).map { |tag_name|
{ language_code: tag_name.language_code,
name: tag_name.name,
script_code: tag_name.script_code,
primary_flg: tag_name.primary_flg }
}
end
end