otwarchive-symphonyarchive/app/models/fandom.rb

51 lines
1.8 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
class Fandom < Tag
NAME = ArchiveConfig.FANDOM_CATEGORY_NAME
has_many :wrangling_assignments
has_many :wranglers, through: :wrangling_assignments, source: :user
has_many :parents, through: :common_taggings, source: :filterable, source_type: 'Tag', after_remove: :check_media
has_many :medias, -> { where(type: 'Media') }, through: :common_taggings, source: :filterable, source_type: 'Tag'
has_many :characters, -> { where(type: 'Character') }, through: :child_taggings, source: :common_tag
has_many :relationships, -> { where(type: 'Relationship') }, through: :child_taggings, source: :common_tag
has_many :freeforms, -> { where(type: 'Freeform') }, through: :child_taggings, source: :common_tag
scope :by_media, lambda {|media| where(media_id: media.id)}
def unwrangled?
Media.uncategorized.fandoms.include?(self)
end
# An association callback to add the default media if all others have been removed
def check_media(media)
self.add_media_for_uncategorized
end
after_save :add_media_for_uncategorized
def add_media_for_uncategorized
if self.medias.empty? && self.type == "Fandom" # type could be something else if the tag is in the process of being re-categorised (re-sorted)
self.parents << Media.uncategorized
end
end
before_update :check_wrangling_status
def check_wrangling_status
if self.canonical_changed? && !self.canonical?
if !self.canonical? && self.merger_id
self.merger.wranglers = (self.wranglers + self.merger.wranglers).uniq
end
self.wranglers = []
end
end
# Types of tags to which a fandom tag can belong via common taggings or meta taggings
def parent_types
['Media', 'MetaTag']
end
def child_types
['Character', 'Relationship', 'Freeform', 'SubTag', 'Merger']
end
end