103 lines
1.8 KiB
Ruby
103 lines
1.8 KiB
Ruby
#!/usr/bin/env ruby
|
|
|
|
class Gecko
|
|
attr_reader :name
|
|
|
|
def initialize(name)
|
|
@name = name
|
|
@meals = []
|
|
end
|
|
|
|
def eat(prey, quantity, calcium)
|
|
return false unless prey.is_a?(String)
|
|
|
|
prey = prey.strip
|
|
|
|
return false if prey.empty?
|
|
return false unless quantity.is_a?(Integer) && quantity.positive?
|
|
return false unless calcium == true || calcium == false
|
|
|
|
@meals << [prey, quantity, calcium]
|
|
true
|
|
end
|
|
|
|
def display_meals
|
|
puts "#{@name} a mangé :"
|
|
|
|
@meals.each do |prey, quantity, calcium|
|
|
suffix = calcium ? " (calcium)" : ""
|
|
puts "- #{quantity} #{prey}#{suffix}"
|
|
end
|
|
|
|
puts
|
|
puts "Total : #{total_prey} proies"
|
|
end
|
|
|
|
def display_last_meal
|
|
puts
|
|
|
|
if @meals.empty?
|
|
puts "Aucun repas enregistré."
|
|
return
|
|
end
|
|
|
|
puts "Dernier repas :"
|
|
|
|
prey, quantity, calcium = @meals.last
|
|
suffix = calcium ? " (calcium)" : ""
|
|
puts "- #{quantity} #{prey}#{suffix}"
|
|
end
|
|
|
|
def meal_count
|
|
@meals.length
|
|
end
|
|
|
|
def total_prey
|
|
total = 0
|
|
|
|
@meals.each do |_prey, quantity, _calcium|
|
|
total += quantity
|
|
end
|
|
|
|
total
|
|
end
|
|
|
|
def ate?(searched_prey)
|
|
@meals.any? do |prey, _quantity, _calcium|
|
|
prey == searched_prey
|
|
end
|
|
end
|
|
|
|
def calcium_meal_count
|
|
@meals.count do |_prey, _quantity, calcium|
|
|
calcium
|
|
end
|
|
end
|
|
end
|
|
|
|
delta = Gecko.new("Delta")
|
|
|
|
delta.eat("dubia", 2, true)
|
|
delta.eat("ver de farine", 3, false)
|
|
delta.eat("cloporte", 1, true)
|
|
|
|
delta.display_meals
|
|
delta.display_last_meal
|
|
|
|
puts
|
|
puts "Delta a fait #{delta.meal_count} repas."
|
|
puts "Delta a mangé #{delta.total_prey} proies."
|
|
|
|
puts
|
|
puts delta.ate?("dubia")
|
|
|
|
puts
|
|
puts delta.calcium_meal_count
|
|
|
|
puts
|
|
puts delta.name
|
|
|
|
puts
|
|
puts delta.eat("dubia", -2, true) # false
|
|
puts delta.eat("dubia", 2, true) # true
|