Module: Mailkick::Model

Defined in:
lib/mailkick/model.rb

Instance Method Summary collapse

Instance Method Details

#has_subscriptions(prefix: false) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/mailkick/model.rb', line 3

def has_subscriptions(prefix: false)
  prefix = prefix ? "mailkick_" : ""

  class_eval do
    has_many :mailkick_subscriptions, class_name: "Mailkick::Subscription", as: :subscriber
    scope "#{prefix}subscribed", ->(list) { joins(:mailkick_subscriptions).where(mailkick_subscriptions: {list: list}) }

    define_method("#{prefix}subscribe") do |list|
      mailkick_subscriptions.where(list: list).first_or_create!
      nil
    end

    define_method("#{prefix}unsubscribe") do |list|
      mailkick_subscriptions.where(list: list).delete_all
      nil
    end

    define_method("#{prefix}subscribed?") do |list|
      mailkick_subscriptions.where(list: list).exists?
    end
  end
end