ankane / mailkick

Email subscriptions for Rails

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Support for Opt-in by default?

daveharris opened this issue · comments

Hi,

We are using mailkick in our Rails app to great effect and sound it to be a simple tool to add to our arsenal. However, with some recent privacy changes around the world but primarily here in New Zealand we now have the need to create an opt-in by default list, as we need to user's express permission first.

While we can reverse the logic in our code to mean the existence of an Mailkick::OptOut means they are actually opt-ed in, it's going to get really confusing really quickly, with high chance of accidental error, especially in production in the heat of the moment.

Therefore, looking at how "simple" the gem in (I mean no disrespect by that at all) we are considering duplicating some of the functionality:

  • creating a mailkick_opt_ins database table
  • adding a opted_in scope
  • adding a opted_in? method

Do you have any advice or plans to add support for this in the future? If you did a first-party solution you probably won't need 2 tables but we're wanting to keep things separate on purpose so we don't trample on each other's feet!

Thanks for all the hard work on myriad of gems, we use a lot of them and plan on using more in the future.

Thanks,
Dave

Hey @daveharris, thanks for the suggestion! I did some prototyping and think it makes sense for the 1.0 release, but don't have a timeline on when that'll be. I'm currently thinking:

class User < ApplicationRecord
  has_subscriptions
end

and

create_table :mailkick_subscriptions do |t|
  t.references :subscriber, polymorphic: true, index: false
  t.string :list
  t.timestamps
end

add_index :mailkick_subscriptions, [:subscriber_type, :subscriber_id, :list], unique: true, name: "index_mailkick_subscriptions_on_subscrib
er_and_list"

And subscribe(list)/subscribed?(list)/unsubscribe(list) for the high level design.

Hi @ankane,

Yeah that's exactly what I had done in the end, turned out to be really simple.

The thing that makes the subscriptions (potentially) easier than opt-outs is the fact that you may not have to deal with list: nil which makes the DB logic a lot simpler!

Just pushed 1.0 with this change. Thanks again for the suggestion!