class Checkout class InvalidItem < StandardError; end AVAILABLE_ITEMS = { PI5: 60.00, ZERO2W: 15.00, PICO2: 4.00 } def initialize @items = [] end def add(item) raise InvalidItem unless valid_item?(item) @items.push item end def items @items end def total pre_discount_total - current_discount end private def valid_item?(item) return AVAILABLE_ITEMS.keys.include?(item) end def current_discount # BOGOF ZERO2W discount = (@items.count(:ZERO2W) / 2.0).floor * AVAILABLE_ITEMS[:ZERO2W] # TODO: Bulk PICO2 return discount end def pre_discount_total @items.reduce(0.00) do |running_total, item| running_total + AVAILABLE_ITEMS[item] end end end