class Hearth < ApplicationRecord belongs_to :character has_many :built_hearth_amenities has_many :hearth_amenities, through: :built_hearth_amenities has_many :hearth_plantings def has_amenity?(hearth_amenity, level = 1) hearth_amenity = HearthAmenity.find_by_gid(hearth_amenity) if hearth_amenity.is_a? String bhi = self.built_hearth_amenities.find_by(hearth_amenity: hearth_amenity) return false unless bhi bhi.level >= level end def amenity_level(hearth_amenity) hearth_amenity = HearthAmenity.find_by_gid(hearth_amenity) if hearth_amenity.is_a? String bhi = self.built_hearth_amenities.find_by(hearth_amenity: hearth_amenity) bhi ? bhi.level : 0 end def available_planting_spots character.planting_spots - hearth_plantings.count end def ripe_hearth_plantings_of(item) item = Item.find_by_gid(item) if item.is_a? String # TODO: Proper querey instead of loading all into memory. hearth_plantings.all.select { |hp| hp.item == item && hp.ripens_at < Time.now } end end