42 lines
1.4 KiB
Ruby
42 lines
1.4 KiB
Ruby
|
|
class PotentialMatchSettings < ApplicationRecord
|
||
|
|
ALL = -1
|
||
|
|
REQUIRED_MATCH_OPTIONS = [
|
||
|
|
[ts("All"), ALL],
|
||
|
|
["0", 0],
|
||
|
|
["1", 1],
|
||
|
|
["2", 2],
|
||
|
|
["3", 3],
|
||
|
|
["4", 4],
|
||
|
|
["5", 5]
|
||
|
|
]
|
||
|
|
|
||
|
|
# VALIDATION
|
||
|
|
REQUIRED_TAG_ATTRIBUTES = %w(num_required_fandoms num_required_characters num_required_relationships num_required_freeforms num_required_categories
|
||
|
|
num_required_ratings num_required_archive_warnings)
|
||
|
|
|
||
|
|
REQUIRED_TAG_ATTRIBUTES.each do |tag_limit_field|
|
||
|
|
validates_inclusion_of tag_limit_field, in: REQUIRED_MATCH_OPTIONS.collect {|entry| entry[1]},
|
||
|
|
message: "%{value} is not a valid match setting"
|
||
|
|
end
|
||
|
|
|
||
|
|
# must have at least one matching request
|
||
|
|
validates_inclusion_of :num_required_prompts, in: REQUIRED_MATCH_OPTIONS.collect {|entry| entry[1]}.delete_if {|elem| elem == 0}, message: "%{value} is not a valid match setting"
|
||
|
|
|
||
|
|
# are all settings 0
|
||
|
|
def no_match_required?
|
||
|
|
REQUIRED_TAG_ATTRIBUTES.all? {|attrib| self.send("#{attrib}") == 0}
|
||
|
|
end
|
||
|
|
|
||
|
|
def required_types
|
||
|
|
TagSet::TAG_TYPES.select {|type| self.send("num_required_#{type.tableize}") != 0}
|
||
|
|
end
|
||
|
|
|
||
|
|
def topmost_required_type
|
||
|
|
required_types.first
|
||
|
|
end
|
||
|
|
|
||
|
|
def include_optional?(type)
|
||
|
|
send("include_optional_#{type.tableize}")
|
||
|
|
end
|
||
|
|
end
|