class Cart def initialize @items_by_id = {} end def [](string_id) @items_by_id[string_id] end def add(item) if @items_by_id[item.string_id] @items_by_id[item.string_id].increment_quantity else @items_by_id[item.string_id] = CartItem.new item end end def empty? size.zero? end def items @items_by_id.values end def remove(string_id) @items_by_id.delete string_id end def size items.size end def total items.inject(0) { |sum,item| sum + item.total } end def update_quantities(quantity_by_string_id) quantity_by_string_id.each do |string_id, quantity| @items_by_id[string_id.to_s].quantity = quantity.to_i end end end