33 行
943 B
Ruby
33 行
943 B
Ruby
class Locale < ApplicationRecord
|
|
attr_accessor :certified_tag_names_path
|
|
|
|
around_save :save_with_tag_names!, if: :will_generate_tag_names?
|
|
|
|
belongs_to :language, foreign_key: :language_code, primary_key: :code
|
|
belongs_to :script, foreign_key: :script_code, primary_key: :code
|
|
|
|
enum :code, ja: 'ja', ain_kana: 'ain-Kana'
|
|
|
|
def self.nipponese = Locale.find('ja')
|
|
|
|
private
|
|
|
|
def will_generate_tag_names?
|
|
deprecated_at.nil? && (will_save_change_to_code? || will_save_change_to_deprecated_at?)
|
|
end
|
|
|
|
def save_with_tag_names!
|
|
completed = self.class.transaction(requires_new: true) do
|
|
SharedResourceIdAllocator.lock_space!(Tag, 'tags')
|
|
saved = yield
|
|
raise ActiveRecord::RecordNotSaved, 'Locale save was halted' unless saved
|
|
|
|
TagNameCompletion.for_locale!(self)
|
|
true
|
|
end
|
|
unless completed
|
|
raise ActiveRecord::RecordNotSaved, 'Locale tag completion was rolled back'
|
|
end
|
|
end
|
|
end
|