Skip to content

Commit

Permalink
Skip mailer setup when Action Mailer is not loaded
Browse files Browse the repository at this point in the history
When people are using 3rd-party services for delivering emails (e.g.
Mailgun), some choose not to load Action Mailer in their app, since it's
not used. Previously rodauth-rails would error when Action Mailer wasn't
loaded, so in this commit we make it work.

Closes #148
  • Loading branch information
janko committed Sep 10, 2022
1 parent d1d3dd4 commit cd5a39c
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 4 deletions.
2 changes: 2 additions & 0 deletions lib/generators/rodauth/install_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ def create_account_model
end

def create_mailer
return unless defined?(ActionMailer)

template "app/mailers/rodauth_mailer.rb"

MAILER_VIEWS.each do |view|
Expand Down
2 changes: 2 additions & 0 deletions lib/generators/rodauth/templates/app/misc/rodauth_main.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class RodauthMain < Rodauth::Rails::Auth
# Redirect to the app from login and registration pages if already logged in.
# already_logged_in { redirect login_redirect }
<% if defined?(ActionMailer) -%>
# ==> Emails
# Use a custom mailer for delivering authentication emails.
create_reset_password_email do
Expand All @@ -81,6 +82,7 @@ class RodauthMain < Rodauth::Rails::Auth
db.after_commit { email.deliver_later }
end
<% end -%>
# ==> Flash
<% unless json? || jwt? -%>
# Match flash keys with ones already used in the Rails app.
Expand Down
4 changes: 2 additions & 2 deletions lib/rodauth/rails/feature.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ module Rodauth
require "rodauth/rails/feature/callbacks"
require "rodauth/rails/feature/csrf"
require "rodauth/rails/feature/render"
require "rodauth/rails/feature/email"
require "rodauth/rails/feature/email" if defined?(ActionMailer)
require "rodauth/rails/feature/instrumentation"
require "rodauth/rails/feature/internal_request"

include Rodauth::Rails::Feature::Base
include Rodauth::Rails::Feature::Callbacks
include Rodauth::Rails::Feature::Csrf
include Rodauth::Rails::Feature::Render
include Rodauth::Rails::Feature::Email
include Rodauth::Rails::Feature::Email if defined?(ActionMailer)
include Rodauth::Rails::Feature::Instrumentation
include Rodauth::Rails::Feature::InternalRequest
end
Expand Down
6 changes: 4 additions & 2 deletions lib/rodauth/rails/feature/internal_request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ module Rails
module Feature
module InternalRequest
def domain
return super unless missing_host?
return super unless missing_host? && rails_url_options

rails_url_options.fetch(:host)
end

def base_url
return super unless missing_host? && domain
return super unless missing_host? && domain && rails_url_options

scheme = rails_url_options[:protocol] || "http"
port = rails_url_options[:port]
Expand Down Expand Up @@ -43,6 +43,8 @@ def missing_host?
end

def rails_url_options
return nil unless defined?(ActionMailer)

::Rails.application.config.action_mailer.default_url_options or
fail Error, "There is no information to set the URL host from. Please set config.action_mailer.default_url_options in your Rails application, or configure #domain and #base_url in your Rodauth configuration."
end
Expand Down

0 comments on commit cd5a39c

Please sign in to comment.