andela-amagana
11/23/2017 - 11:07 AM

Single responsiblity principle violation

Single responsiblity principle violation

# This class violates single responsibilty principle
# since it handles 2 tasks i.e generating a report
# (generate_report) and sending a report (send_report)
class FinancialReportMailer
  def initialize(transactions, account)
    @transactions = transactions
    @account = account
    @report = ''
  end

  def generate_report!
    @report = @transactions.map {
      |t| "amount: #{t.amount} type: #{t.type} date: #{t.created_at}"
    }.join("\n")
  end

  def send_report
    Mailer.deliver(
      from: 'reporter@example.com',
      to: @account.email,
      subject: 'your report',
      body: @report
    )
  end
end

mailer = FinancialReportMailer.new(transactions, account)
mailer.generate_report!
mailer.send_report