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) ⇒ Subscribe

Returns a new instance of Subscribe.



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

def initialize(email:, current_user: nil)
  @email = email
  @current_user = current_user
end

Instance Method Details

#callObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/services/spree/newsletter/subscribe.rb', line 9

def call
  return existed_subscription if existed_subscription.present?

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

    if subscriber.email == current_user&.email
      # no need to verified since user email is already verified
      Spree::Newsletter::Verify.new(subscriber: subscriber).call
    end
  end

  # deliver confirmation email after the transaction is completed
  subscriber.deliver_newsletter_email_verification unless subscriber.verified?
  subscriber
end