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 infixable?(skill = nil) skill = Skill.find_by_gid(skill) if skill.is_a? String return false unless self.whatnot && self.whatnot[:infix_skills]&.any? return true unless skill self.whatnot[:infix_skills].select { |data| data[:gid] == skill.gid }.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