Class: RailsDrips::Enroll

Inherits:
Object
  • Object
show all
Defined in:
app/services/rails_drips/enroll.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(campaign:, recipient:, actor: nil, source: nil, data: {}, force: false) ⇒ Enroll

Returns a new instance of Enroll.



7
8
9
10
11
12
13
14
# File 'app/services/rails_drips/enroll.rb', line 7

def initialize(campaign:, recipient:, actor: nil, source: nil, data: {}, force: false)
  @campaign = campaign.is_a?(Campaign) ? campaign : Campaign.find_by(key: campaign.to_s)
  @recipient = recipient
  @actor = actor
  @source = source
  @data = data || {}
  @force = force
end

Class Method Details

.callObject



5
# File 'app/services/rails_drips/enroll.rb', line 5

def self.call(...) = new(...).call

Instance Method Details

#callObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'app/services/rails_drips/enroll.rb', line 16

def call
  return result(:campaign_inactive) unless campaign&.active_for_enrollment?

  existing = campaign.enrollments.open.find_by(recipient: recipient)
  return result(:already_open, enrollment: existing) if existing
  return result(:reenrollment_disallowed) if prior_enrollment? && !campaign.allow_reenrollment?

  decision = eligibility_decision
  return result(:ineligible, reason: decision.reason) unless force || decision.allowed

  enrollment = persist_enrollment
  result(:enrolled, enrollment: enrollment)
rescue ActiveRecord::RecordNotUnique
  result(:already_open, enrollment: campaign.enrollments.open.find_by(recipient: recipient))
end