DEV Community

Cover image for I built a gem that makes it easy to automatically unsubscribe from emails in Rails.
Steve Polito
Steve Polito

Posted on • Originally published at github.com

I built a gem that makes it easy to automatically unsubscribe from emails in Rails.

Source Code

https://github.com/stevepolitodesign/unsubscribe

Demo

Demo

Docs

📭 Unsubscribe

Automatically unsubscribe from emails in Rails.

🚀 Installation

Add this line to your application's Gemfile:

gem 'unsubscribe'
Enter fullscreen mode Exit fullscreen mode

And then execute:

$ bundle
Enter fullscreen mode Exit fullscreen mode

Or install it yourself as:

$ gem install unsubscribe
Enter fullscreen mode Exit fullscreen mode

Then run the installation commands:

rails g unsubscribe:install
rails unsubscribe:install:migrations
rails db:migrate
Enter fullscreen mode Exit fullscreen mode

📚 Usage

Unsubscribe::Owner

  • Add include Unsubscribe::Owner to a Model. The Model must have an email column.
class User < ApplicationRecord
  include Unsubscribe::Owner
end
Enter fullscreen mode Exit fullscreen mode
Available Methods
User.first.mailer_subscriptions
# => #<ActiveRecord::Associations::CollectionProxy [#<Unsubscribe::MailerSubscription>, #<Unsubscribe::MailerSubscription>] >

User.first.subscribed_to_mailer? "MarketingMailer"
# => true/false

User.first.to_sgid_for_mailer_subscription
# => #<SignedGlobalID:123 ...>
Enter fullscreen mode Exit fullscreen mode

Unsubscribe::Mailer

  • Add include Unsubscribe::Mailer to a Mailer.
  • Optionally call unsubscribe_settings to set a name and description. This will be used in the unsubscribe page.
  • Set mail to: to @recipient.email. The @recipient is an instance of whatever Class include Unsubscribe::Owner was added to.
class MarketingMailer < ApplicationMailer  
  include Unsubscribe::Mailer

  unsubscribe_settings name: "Marketing Emails", description: "Updates on promotions and sales."

  def promotion
    mail to: @recipient.email
  end  
end
Enter fullscreen mode Exit fullscreen mode
  • Call the Mailer with a recipient parameter.
  MarketingMailer.with(
    recipient: User.first
  ).promotion.deliver_now
Enter fullscreen mode Exit fullscreen mode

Available Methods

Unsubscribe::MailerSubscription.first.action
# => "Unsubscribe from"/"Subscribe to"

Unsubscribe::MailerSubscription.first.call_to_action
# => "Unsubscribe from Marketing Emails"/"Subscribe to Marketing Emails"

Unsubscribe::MailerSubscription.first.description
# => "Updates on promotions and sales."

Unsubscribe::MailerSubscription.first.name
# => "Marketing Emails"
Enter fullscreen mode Exit fullscreen mode

Unsubscribe Link

  • Add the @unsubscribe_url link to the Mailer.
<%= link_to "Unsubscribe", @unsubscribe_url %>
Enter fullscreen mode Exit fullscreen mode

⚙️ Customize Templates

Run rails g unsubscribe:views if you want to modify the existing templates.

🌐 I18n

The language used for Unsubscribe::MailerSubscription#action can be translated.

# config/locales/en.yml
en:
  unsubscribe:
    action:
      subscribe: "Subscribe to"
      unsubscribe: "Unsubscribe from"
Enter fullscreen mode Exit fullscreen mode

🙏 Contributing

If you'd like to open a PR please make sure the following things pass:

bin/rails test
bundle exec standardrb
Enter fullscreen mode Exit fullscreen mode

📜 License

The gem is available as open source under the terms of the MIT License.

Top comments (0)