module SalesReporter module Reports class SalesByCountry def initialize @countries = Hash.new { |h,k| h[k] = { :count => 0, :total => 0, :sales => [] } } end def add_sale(sale, row) c = row['Country'] @countries[c][:sales] << sale @countries[c][:count] += sale.quantity @countries[c][:total] += sale.amount end def render sorted = @countries.sort { |a,b| b[1][:count] <=> a[1][:count] } puts "Country: Streams: Revenue:" puts "------------------------------------------" total_rev = 0 total_streams = 0 sorted.each do |key, row| puts "#{key}: #{row[:count].to_s.rjust(7)} #{row[:total].round(5).to_s.rjust(10)} EUR" total_rev += row[:total] total_streams += row[:count] end puts "------------------------------------------" puts "Total: #{total_streams.to_s.rjust(7)} #{total_rev.round(5).to_s.rjust(10)} EUR" end end end end