Class: Spree::Newsletter::Subscribe

Inherits:
Object
  • Object
show all
Defined in:
app/services/spree/newsletter/subscribe.rb

Instance Method Summary collapse

Constructor Details

#initialize(email:, current_user: nil, current_store: nil, redirect_url: nil) ⇒ Subscribe

Returns a new instance of Subscribe.



4
5
6
7
8
9
# File 'app/services/spree/newsletter/subscribe.rb', line 4

def initialize(email:, current_user: nil, current_store: nil, redirect_url: nil)
  @email = email
  @current_user = current_user
  @current_store = current_store || Spree::Store.current
  @redirect_url = redirect_url
end

Instance Method Details

#callObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/services/spree/newsletter/subscribe.rb', line 11

def call
  if existed_subscription.present?
    Spree::Newsletter::LinkUser.new(subscriber: existed_subscription, user: known_user).call
    return existed_subscription
  end

  ActiveRecord::Base.transaction do
    upsert_subscriber
    return subscriber if subscriber.errors.any?

    Spree::Newsletter::LinkUser.new(subscriber: subscriber, user: known_user).call

    if subscriber.email == current_user&.email
      # User's email is already verified by login — skip the double opt-in.
      Spree::Newsletter::Verify.new(subscriber: subscriber).call
    end
  end

  subscriber.publish_event('newsletter_subscriber.subscription_requested', subscription_requested_payload) unless subscriber.verified?
  subscriber
end