I have a method that checks to see if a hash of given items should have discounts applied and if so, determines and returns the discount def get_discounts @items.each do |name, attr| @specials.each do |special| while name == special.sale_item && attr[:quantity] >= special.quantity @discounts << special.discount attr[:quantity] = attr[:quantity] - special.quantity end end end determine_discount end def determine_discount if @discounts.empty? @discounts = 0 else @discounts = @discounts.inject(:+) end end This works perfectly, but is there a more concise way to write it? I'm looking especially at the two `each` loops. I'm also a bit iffy about the while loop - it was an `if` statement (`if name == special.sale_item`) but it felt like too much so I combined it into the while loop.