class RuboCop::Cop::Rails::MailerName

This cop enforces that mailer names end with `Mailer` suffix.

Without the `Mailer` suffix it isn't immediately apparent what's a mailer and which views are related to the mailer.

@example

# bad
class User < ActionMailer::Base
end

class User < ApplicationMailer
end

# good
class UserMailer < ActionMailer::Base
end

class UserMailer < ApplicationMailer
end

Constants

MSG

Public Instance Methods

on_class(node) click to toggle source
# File lib/rubocop/cop/rails/mailer_name.rb, line 46
def on_class(node)
  class_definition?(node) do |name_node|
    add_offense(name_node) do |corrector|
      autocorrect(corrector, name_node)
    end
  end
end
on_send(node) click to toggle source
# File lib/rubocop/cop/rails/mailer_name.rb, line 54
def on_send(node)
  return unless class_new_definition?(node)

  casgn_parent = node.each_ancestor(:casgn).first
  return unless casgn_parent

  name = casgn_parent.children[1]
  return if mailer_suffix?(name)

  add_offense(casgn_parent.loc.name) do |corrector|
    autocorrect(corrector, casgn_parent)
  end
end

Private Instance Methods

autocorrect(corrector, node) click to toggle source
# File lib/rubocop/cop/rails/mailer_name.rb, line 70
def autocorrect(corrector, node)
  if node.casgn_type?
    name = node.children[1]
    corrector.replace(node.loc.name, "#{name}Mailer")
  else
    name = node.children.last
    corrector.replace(node.source_range, "#{name}Mailer")
  end
end
mailer_suffix?(mailer_name) click to toggle source
# File lib/rubocop/cop/rails/mailer_name.rb, line 80
def mailer_suffix?(mailer_name)
  mailer_name.to_s.end_with?('Mailer')
end