Class: RailsDrips::Enroll
- Inherits:
-
Object
- Object
- RailsDrips::Enroll
- Defined in:
- app/services/rails_drips/enroll.rb
Class Method Summary collapse
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(campaign:, recipient:, actor: nil, source: nil, data: {}, force: false) ⇒ Enroll
constructor
A new instance of Enroll.
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
.call ⇒ Object
5 |
# File 'app/services/rails_drips/enroll.rb', line 5 def self.call(...) = new(...).call |
Instance Method Details
#call ⇒ Object
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 |