You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
616 B
33 lines
616 B
class Creature < ApplicationRecord
|
|
scope :alive, -> { where('health_points > 0') }
|
|
|
|
enum :size, [:small, :big, :giant]
|
|
|
|
validates :name, presence: true
|
|
validates :health_points, numericality: { greater_than_or_equal_to: 0 }
|
|
|
|
def alive?
|
|
self.health_points > 0
|
|
end
|
|
|
|
def to_label
|
|
"#{name} (#{health_points})"
|
|
end
|
|
|
|
def get_hit(damage)
|
|
self.health_points -= damage
|
|
self.health_points = 0 if self.health_points < 0
|
|
end
|
|
|
|
before_create do
|
|
self.size = case health_points
|
|
when 0..10
|
|
:small
|
|
when 11..30
|
|
:big
|
|
else
|
|
:giant
|
|
end
|
|
end
|
|
end
|