class Item < ApplicationRecord include HasWhatnot enum equip_slot: [:mainhand, :offhand, :head, :neck, :back, :torso, :grip, :left_ring, :right_ring, :waist, :legs, :feet, :curio] validates :gid, :name, :description, presence: true def equipment? self.whatnot && self.whatnot[:equip_slots]&.any? end def usable? self.whatnot && self.whatnot[:use_effects]&.any? end def equip_slots return [] unless self.equipment? self.whatnot[:equip_slots].map { |data| data.to_sym } end def equip_requirements requirements = [] self.whatnot[:equip_requirements]&.each do |req| case req[:type] when "skill" requirements.push "level #{req[:level]} #{Skill.find_by_gid(req[:gid]).name}" else raise "Invalid equip requirement type string (#{req[:type]})" end end requirements end end