otwarchive-symphonyarchive/app/models/external_author_name.rb

35 lines
1.1 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
class ExternalAuthorName < ApplicationRecord
NAME_LENGTH_MIN = 1
NAME_LENGTH_MAX = 100
belongs_to :external_author, inverse_of: :external_author_names
has_many :external_creatorships, inverse_of: :external_author_name
has_many :works, -> { uniq }, through: :external_creatorships, source: :creation, source_type: 'Work'
validates_presence_of :name
validates_length_of :name,
within: NAME_LENGTH_MIN..NAME_LENGTH_MAX,
too_short: ts("is too short (minimum is %{min} characters)", min: NAME_LENGTH_MIN),
too_long: ts("is too long (maximum is %{max} characters)", max: NAME_LENGTH_MAX)
validates :name, uniqueness: { scope: :external_author_id }
validates_format_of :name,
message: ts('can contain letters, numbers, spaces, underscores, @-signs, dots, and dashes.'),
with: /\A\w[ \w\-\@\.]*\Z/
validates_format_of :name,
message: ts('must contain at least one letter or number.'),
with: /[a-zA-Z0-9]/
def to_s
self.name + ' <' + self.external_author.email + '>'
end
def external_work_creatorships
external_creatorships.where("external_creatorships.creation_type = 'Work'")
end
end