QutBioacoustics/baw-server

View on GitHub
app/mailers/public_mailer.rb

Summary

Maintainability
A
1 hr
Test Coverage
# frozen_string_literal: true

class PublicMailer < ActionMailer::Base
  default from: Settings.mailer.emails.sender_address

  # @param [User] logged_in_user
  # @param [DataClass::ContactUs] model
  # @param [ActionDispatch::Request] rails_request
  def contact_us_message(logged_in_user, model, rails_request)
    send_message(logged_in_user, model, rails_request, 'Contact Us', 'contact_us_message')
  end

  # @param [User] logged_in_user
  # @param [DataClass::BugReport] model
  # @param [ActionDispatch::Request] rails_request
  def bug_report_message(logged_in_user, model, rails_request)
    send_message(logged_in_user, model, rails_request, 'Bug Report', 'bug_report_message')
  end

  # @param [User] logged_in_user
  # @param [DataClass::DataRequest] model
  # @param [ActionDispatch::Request] rails_request
  def data_request_message(logged_in_user, model, rails_request)
    send_message(logged_in_user, model, rails_request, 'Data Request', 'data_request_message')
  end

  # @param [User] logged_in_user
  # @param [DataClass::NewUserInfo] model
  def new_user_message(logged_in_user, model)
    send_message(logged_in_user, model, nil, 'New User Notification', 'new_user_message')
  end

  private

  # Construct the email.
  # @param [User] logged_in_user
  # @param [Object] model
  # @param [ActionDispatch::Request] rails_request
  # @param [string] subject_prefix
  # @param [string] template_name
  def send_message(logged_in_user, model, rails_request, subject_prefix, template_name)
    @info = {
      logged_in_user_name: logged_in_user.blank? ? nil : logged_in_user.user_name,
      model: model,
      sender_email: model.email.blank? ? nil : model.email,
      sender_name: model.name.blank? ? "someone (who didn't include their name)" : model.name,
      client_ip: rails_request.blank? ? '' : rails_request.remote_ip,
      client_browser: rails_request.blank? ? '' : rails_request.user_agent,
      datestamp: Time.zone.now.utc.iso8601
    }

    # email gets sent to required recipients (e.g. admins)
    mail(
      to: Settings.mailer.emails.required_recipients,
      subject: "#{Settings.mailer.emails.email_prefix} [#{subject_prefix}] Form submission from #{@info[:sender_name]}.",
      template_path: 'public_mailer',
      template_name: template_name
    )
  end
end