module Newsletterable::Subscriber

Public Instance Methods

field_for(list_name) click to toggle source
# File lib/newsletterable/subscriber.rb, line 59
def field_for(list_name)
        if options = options_for(list_name)
                options[:field]
        else
                nil
        end
end
manage_subscription(list_name) click to toggle source
# File lib/newsletterable/subscriber.rb, line 15
def manage_subscription(list_name)
        field = field_for(list_name)
        list_ids = resolve_list(list_name)

        if send(field)
                subscription_service.subscribe(list_ids)
        else
                subscription_service.unsubscribe(list_ids)
        end
end
options_for(list_name) click to toggle source
# File lib/newsletterable/subscriber.rb, line 55
def options_for(list_name)
        self.class.__newsletterable_options[list_name]
end
remove_subscription(list_name) click to toggle source
# File lib/newsletterable/subscriber.rb, line 50
def remove_subscription(list_name)
        list_ids = resolve_list(list_name)
        subscription_service.unsubscribe(list_ids)
end
resolve_list(list_name) click to toggle source
# File lib/newsletterable/subscriber.rb, line 26
def resolve_list(list_name)
        options = options_for(list_name)
        lists = options[:lists] || Newsletterable.configuration.default_lists

        resolver = options[:resolver] || Newsletterable.configuration.list_resolver

        if resolver.is_a?(Symbol)
                self.send(resolver, list_name, lists)
        elsif resolver.respond_to?(:call)
                resolver.call(self, list_name, lists)
        else
                raise ConfigurationError, 'Newsletterable resolver should be a Symbol or callable.'
        end
end
subscription_service() click to toggle source
# File lib/newsletterable/subscriber.rb, line 11
def subscription_service
        @subscription_service ||= Service.new(self)
end
update_subscription(list_name) { || ... } click to toggle source
# File lib/newsletterable/subscriber.rb, line 41
def update_subscription(list_name)
        old_email = Newsletterable.configuration.old_email_getter.call(self)

        yield

        list_ids = resolve_list(list_name)
        subscription_service.update(list_ids, old_email)
end