caffeinate 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ee66cd0cefbff81f194970176755cde5fe49ccc8acd9307f3081bc13f71bd2f
|
4
|
+
data.tar.gz: 25380078f2edd4c8ccb7fdd4adc5903a783ce1f123ea59981def0bf5ee08698c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fe9f92105e1acf59ce7f931a75a3e5d7e7a7ed5a58ee19d1b9cd1ce661c3f86011e3e910576fdad058009a8a2b2e54ab1e99eb073f11ec5a4d6bd27a9c30f47
|
7
|
+
data.tar.gz: 397e39515c8d7bf8e7bfb1d794b0beb434bb916af1f4ac310a027c9a9f21fb8ef0a74abf99acc53f6f59e8efd6b32ac50239e75cb329241d5d3ca8cc3a876405
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ Caffeinate is a drip email engine for managing, creating, and sending scheduled
|
|
20
20
|
|
21
21
|
Caffeinate provides a simple DSL to create scheduled email sequences which can be used by ActionMailer without any additional configuration.
|
22
22
|
|
23
|
-
There's a cool demo
|
23
|
+
There's a cool demo app you can spin up [here](https://github.com/joshmn/caffeinate-marketing).
|
24
24
|
|
25
25
|
## Is this thing dead?
|
26
26
|
|
@@ -16,6 +16,7 @@
|
|
16
16
|
# created_at :datetime not null
|
17
17
|
# updated_at :datetime not null
|
18
18
|
#
|
19
|
+
|
19
20
|
module Caffeinate
|
20
21
|
# If a record tries to be `unsubscribed!` or `ended!` or `resubscribe!` and it's in a state that is not
|
21
22
|
# correct, raise this
|
@@ -59,6 +60,22 @@ module Caffeinate
|
|
59
60
|
|
60
61
|
after_commit :on_complete, if: :completed?
|
61
62
|
|
63
|
+
# Add (new) drips to a `CampaignSubscriber`.
|
64
|
+
#
|
65
|
+
# Useful if you added new drips to a `Campaign` and have existing `CampaignSubscription`
|
66
|
+
# which you want to add them to.
|
67
|
+
#
|
68
|
+
# Pass `:created_at` if you want to offset `Mailing#send_at` time from the time the `CampaignSubscription`
|
69
|
+
# was originally created. That is to say that if you add a new drip for 5 days from now, the mailing will be sent
|
70
|
+
# 5 days from when the `CampaignSubscription` was created.
|
71
|
+
#
|
72
|
+
# Pass `:current` to offset from the current time (doesn't offset anything, actually)
|
73
|
+
def refuel!(offset: :created_at)
|
74
|
+
::CampaignSubscriptions::RefuelService.new(self, offset: offset).call
|
75
|
+
|
76
|
+
true
|
77
|
+
end
|
78
|
+
|
62
79
|
# Actually deliver and process the mail
|
63
80
|
def deliver!(mailing)
|
64
81
|
caffeinate_campaign.to_dripper.deliver!(mailing)
|
@@ -32,6 +32,14 @@ module Caffeinate
|
|
32
32
|
|
33
33
|
after_touch :end_if_no_mailings!
|
34
34
|
|
35
|
+
def self.find_or_initialize_from_drip(campaign_subscription, drip)
|
36
|
+
find_or_initialize_by(
|
37
|
+
caffeinate_campaign_subscription: campaign_subscription,
|
38
|
+
mailer_class: drip.options[:mailer_class],
|
39
|
+
mailer_action: drip.action
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
35
43
|
def initialize_dup(args)
|
36
44
|
super
|
37
45
|
self.send_at = nil
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module CampaignSubscriptions
|
2
|
+
class RefuelService
|
3
|
+
|
4
|
+
def initialize(campaign_subscription, offset: :created_at)
|
5
|
+
raise ArgumentError, "must be either :current or :created_at" unless [:created_at, :current].include?(offset.to_sym)
|
6
|
+
|
7
|
+
@campaign_subscription = campaign_subscription
|
8
|
+
@campaign = @campaign_subscription.caffeinate_campaign
|
9
|
+
@offset = offset.to_sym
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
mailings = []
|
14
|
+
|
15
|
+
@campaign.to_dripper.drips.each do |drip|
|
16
|
+
mailing = Caffeinate::Mailing.find_or_initialize_from_drip(@campaign_subscription, drip)
|
17
|
+
if mailing.new_record?
|
18
|
+
mailing.send_at = drip.send_at(@campaign_subscription)
|
19
|
+
if @offset == :created_at
|
20
|
+
mailing.send_at + (Caffeinate.config.now.call - @campaign_subscription.created_at)
|
21
|
+
elsif @offset == :current
|
22
|
+
# do nothing on purpose!
|
23
|
+
end
|
24
|
+
|
25
|
+
mailing.save!
|
26
|
+
mailings << mailing
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
mailings
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/caffeinate/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caffeinate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Brody
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -153,6 +153,7 @@ files:
|
|
153
153
|
- app/models/caffeinate/campaign.rb
|
154
154
|
- app/models/caffeinate/campaign_subscription.rb
|
155
155
|
- app/models/caffeinate/mailing.rb
|
156
|
+
- app/services/campaign_subscriptions/refuel_service.rb
|
156
157
|
- app/views/caffeinate/campaign_subscriptions/subscribe.html.erb
|
157
158
|
- app/views/caffeinate/campaign_subscriptions/unsubscribe.html.erb
|
158
159
|
- app/views/layouts/_caffeinate.html.erb
|