Class: EmailControllerHelper::DigestEmailUnsubscriber

Inherits:
BaseEmailUnsubscriber show all
Defined in:
lib/email_controller_helper/digest_email_unsubscriber.rb

Instance Attribute Summary

Attributes inherited from BaseEmailUnsubscriber

#unsubscribe_key

Instance Method Summary collapse

Methods inherited from BaseEmailUnsubscriber

#initialize

Constructor Details

This class inherits a constructor from EmailControllerHelper::BaseEmailUnsubscriber

Instance Method Details

#prepare_unsubscribe_options(controller) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/email_controller_helper/digest_email_unsubscriber.rb', line 5

def prepare_unsubscribe_options(controller)
  super(controller)
  controller.instance_variable_set(:@digest_unsubscribe, !SiteSetting.disable_digest_emails)

  frequency_in_minutes = key_owner.user_option.digest_after_minutes
  email_digests = key_owner.user_option.email_digests
  frequencies = DigestEmailSiteSetting.values.dup
  never = frequencies.delete_at(0)
  allowed_frequencies = %w[never weekly every_month every_six_months]

  result =
    frequencies.reduce(
      frequencies: [],
      current: nil,
      selected: nil,
      take_next: false,
    ) do |memo, v|
      memo[:current] = v[:name] if v[:value] == frequency_in_minutes && email_digests
      next(memo) unless allowed_frequencies.include?(v[:name])

      memo.tap do |m|
        m[:selected] = v[:value] if m[:take_next] && email_digests
        m[:frequencies] << [I18n.t("unsubscribe.digest_frequency.#{v[:name]}"), v[:value]]
        m[:take_next] = !m[:take_next] && m[:current]
      end
    end

  digest_frequencies =
    result
      .slice(:frequencies, :current, :selected)
      .tap do |r|
        r[:frequencies] << [
          I18n.t("unsubscribe.digest_frequency.#{never[:name]}"),
          never[:value],
        ]
        r[:selected] ||= never[:value]
        r[:current] ||= never[:name]
      end

  controller.instance_variable_set(:@digest_frequencies, digest_frequencies)
end

#unsubscribe(params) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/email_controller_helper/digest_email_unsubscriber.rb', line 47

def unsubscribe(params)
  updated = super(params)

  if params[:digest_after_minutes]
    digest_frequency = params[:digest_after_minutes].to_i

    unsubscribe_key.user.user_option.update_columns(
      digest_after_minutes: digest_frequency,
      email_digests: digest_frequency.positive?,
    )
    updated = true
  end

  updated
end