module Newsletterable::Worker
Public Instance Methods
perform(subscription_id)
click to toggle source
# File lib/newsletterable/worker.rb, line 7 def perform(subscription_id) @subscription = orm_adapter.query_subscription(id: subscription_id) if @subscription.nil? logger.warn "No subscription with id #{subscription_id} exists. Ignoring." else process end end
process()
click to toggle source
# File lib/newsletterable/worker.rb, line 17 def process logger.info "Processing mailing list subscription for #{@subscription.email}..." logger.debug "Status: [#{@subscription.state}]" case @subscription.state.to_sym when :pending || :error logger.info "Subscribing #{@subscription.email} to '#{@subscription.list}' list" logger.info "Trying to subscribe after previous error!" if @subscription.error? add(@subscription) @subscription.subscribed! @subscription.save! when :unsubscribed logger.info "Unsubscribing #{@subscription.email} from '#{@subscription.list}' list" remove(@subscription) @subscription.destroy! when :out_of_date logger.info "Updating subscription for #{@subscription.email}" update(@subscription) @subscription.old_email = nil @subscription.subscribed! @subscription.save! end rescue Mailchimp::Error => ex logger.error "#{@subscription.email}: #{ex.message || 'Unknown error.'}" @subscription.error! @subscription.save raise end
Private Instance Methods
add(subscription)
click to toggle source
# File lib/newsletterable/worker.rb, line 57 def add(subscription) mailchimp.lists.subscribe(subscription.list, { email: subscription.email }, {}, 'html', false) rescue Mailchimp::ListAlreadySubscribedError logger.warn "#{subscription.email} already subscribed to '#{subscription.list}'." end
mailchimp()
click to toggle source
# File lib/newsletterable/worker.rb, line 53 def mailchimp @mailchimp_api ||= Mailchimp::API.new(Newsletterable.configuration.api_key) end
orm_adapter()
click to toggle source
# File lib/newsletterable/worker.rb, line 49 def orm_adapter @orm_adapter ||= OrmAdapters::Adapter.factory(Newsletterable.configuration.orm_adapter) end
remove(subscription)
click to toggle source
# File lib/newsletterable/worker.rb, line 63 def remove(subscription) mailchimp.lists.unsubscribe(subscription.list, { email: subscription.email }) rescue Mailchimp::ListNotSubscribedError logger.warn "#{subscription.email} is not subscribed to '#{subscription.list}'." end
update(subscription)
click to toggle source
# File lib/newsletterable/worker.rb, line 69 def update(subscription) raise UpdateError, "old_email required to update subscription for subscription #{subscription.id}." if subscription.old_email.nil? mailchimp.lists.subscribe(subscription.list, { email: subscription.old_email }, { 'new-email' => subscription.email }, 'html', true, true) end