Я пытаюсь улучшить метод release_bike
.Я вошел в irb, и первое условие защиты работает, и release_working_bikes работает, но второе условие защиты продолжает возвращать ноль в irb, даже когда я запускаю тест характеристик и знаю, что доступен только сломанный велосипед.
Что-то не так с тем, как я формулирую свою вторую строку с ошибкой, или есть ошибка в broken_bikes
?
Метод release_bike
должен работать следующим образом;если на док-станции нет велосипедов, то должно быть предупреждение: No bikes available
если на док-станции есть велосипеды, но они ALL сломаны, то должно быть предупреждение:No working bikes available
если есть какие-то рабочие велосипеды, то release_bike
должен выпустить один из рабочих велосипедов.
Ниже приведены два участвующих класса;
require_relative 'bike'
class DockingStation
DEFAULT_CAPACITY = 20
attr_reader :capacity, :bikes
def initialize(capacity = DEFAULT_CAPACITY)
@bikes = []
@capacity = capacity
end
def release_bike
fail 'No bikes available' if empty?
fail 'No working bikes available' unless broken_bikes
release_working_bikes
end
def dock(bike)
fail 'Docking Station Full' if full?
@bikes << bike
end
private
def working_bikes
@bikes.each { |bike| return bike unless bike.broken? }
end
def broken_bikes
not_working = []
not_working << @bikes.each { |bike| return bike if bike.broken? }
not_working.empty?
end
def release_working_bikes
bike = working_bikes
@bikes.delete(bike)
end
def full?
@bikes.count >= @capacity
end
def empty?
@bikes.empty?
end
end
class Bike
attr_accessor :broken
def initialize
@broken = false
end
def working?
@working
end
def report_broken
@broken = true
end
def broken?
@broken
end
end