class Newsletterable::Service

Attributes

subscribable[R]

Public Class Methods

new(subscribable) click to toggle source
# File lib/newsletterable/service.rb, line 5
def initialize(subscribable)
        @subscribable = subscribable
end

Public Instance Methods

subscribe(lists) click to toggle source
# File lib/newsletterable/service.rb, line 9
def subscribe(lists)
        lists.each do |list|
                subscription = orm_adapter.query_subscription({
                        subscribable: subscribable,
                        list: list
                }, true)

                if subscription.unsubscribed? || subscription.error?
                        subscription.pending!
                end

                orm_adapter.save(subscription) unless subscription.subscribed?
        end
end
unsubscribe(lists) click to toggle source
# File lib/newsletterable/service.rb, line 24
def unsubscribe(lists)
        lists.each do |list|
                subscription = orm_adapter.query_subscription(
                        subscribable: subscribable,
                        list: list
                )
                if !subscription.nil? && subscription.subscribed?
                        subscription.old_email = subscribable.email
                        subscription.unsubscribed!
                        orm_adapter.save(subscription)
                end
        end
end
update(lists, old_email) click to toggle source
# File lib/newsletterable/service.rb, line 38
def update(lists, old_email)
        lists.each do |list|
                subscription = orm_adapter.query_subscription(
                        subscribable: subscribable,
                        list: list
                )

                if subscription.nil?
                        raise RuntimeError, "No subscription to update for subscribable #{subscribable.id}."
                end

                subscription.out_of_date!
                subscription.old_email = old_email
                orm_adapter.save(subscription)
        end
end

Private Instance Methods

orm_adapter() click to toggle source
# File lib/newsletterable/service.rb, line 57
def orm_adapter
        @orm_adapter ||= OrmAdapters::Adapter.factory(Newsletterable.configuration.orm_adapter)
end