module SalesReporter class Sale attr_reader :date, :amount, :quantity, :country, :shop def initialize(date_, amount, quantity, country, shop) @date = sanitize_date(date_) raise TypeError('sanitize failed') unless @date.is_a? Date @amount = amount @quantity = quantity @country = country @shop = shop end private def sanitize_date(d) case d.class.to_s when "String" return Date.parse(d) when "Date" return d else raise TypeError.new('Expected date argument to be of type Date or String') end end end end