caffeinate 0.8.5 → 0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f2ea2b9f5f03fdeb85614ae404df166822797d18861bd1c6ea5c4c867f44618
4
- data.tar.gz: 38b8cd78227cc1eecffe4e09ee01fd8e26a7fc46314d30956ce29230b1209f7f
3
+ metadata.gz: fa3c41f5c5af2ed5a8733c8c5f8614a99c2df6cfa6549bce48b6c521aedfc647
4
+ data.tar.gz: b8585a93022bbf70657f8d81485d9691b6a0c90192fb9b632da2a11fde45579b
5
5
  SHA512:
6
- metadata.gz: 3fd342f50ad5394c5253d1c7c00efa7ce25e1d1f90571fe16658bed9f0d251893f4953d746daf4db48728541d13fc67ee505529aae18711e491ca0819f66d6a1
7
- data.tar.gz: 8ec91a5b080a1420f090a4c538c1fd1cd05def80c5aa5395ce2a2d985063e4ef7d26e935ec1131496525d44bd745abbac90cbbc749e9ec6b55d1c0f3a99d8e49
6
+ metadata.gz: 1cd7ab9dced54ac5cdc6be24498253bf95230d78301d1fecad21c9e74e325ad4bb05eea4cf22e50214448c304a25068f879f12ea2e9af5a6ce59b41e28aab654
7
+ data.tar.gz: d066b26a02543079a9a9571d71042216e3ccb69d8440b6efccb93fb47bf78e3367b58d681c7312c0c806b96d829edca1114f67951eb2c97f0c7aec9c818a38c3
@@ -54,6 +54,14 @@ module Caffeinate
54
54
  #
55
55
  # Just... mintier.
56
56
  def unsubscribe(subscriber, **args)
57
+ reason = args.delete(:reason)
58
+ subscription = subscriber(subscriber, **args)
59
+ return false if subscription.nil?
60
+
61
+ subscription.unsubscribe(reason)
62
+ end
63
+
64
+ def unsubscribe!(subscriber, **args)
57
65
  reason = args.delete(:reason)
58
66
  subscription = subscriber(subscriber, **args)
59
67
  raise ::ActiveRecord::RecordInvalid, subscription if subscription.nil?
@@ -64,12 +72,12 @@ module Caffeinate
64
72
  # Creates a `CampaignSubscription` object for the present Campaign. Allows passing `**args` to
65
73
  # delegate additional arguments to the record. Uses `find_or_create_by`.
66
74
  def subscribe(subscriber, **args)
67
- caffeinate_campaign_subscriptions.find_or_create_by(subscriber: subscriber, **args)
75
+ caffeinate_campaign_subscriptions.create(subscriber: subscriber, **args)
68
76
  end
69
77
 
70
78
  # Subscribes an object to a campaign. Raises `ActiveRecord::RecordInvalid` if the record was invalid.
71
79
  def subscribe!(subscriber, **args)
72
- subscribe(subscriber, **args)
80
+ caffeinate_campaign_subscriptions.create!(subscriber: subscriber, **args)
73
81
  end
74
82
  end
75
83
  end
@@ -83,6 +83,16 @@ module Caffeinate
83
83
  true
84
84
  end
85
85
 
86
+ # Updates `ended_at` and runs `on_complete` callbacks
87
+ def end(reason = nil)
88
+ return false if unsubscribed?
89
+
90
+ result = update(ended_at: ::Caffeinate.config.time_now, ended_reason: reason)
91
+
92
+ caffeinate_campaign.to_dripper.run_callbacks(:on_end, self)
93
+ result
94
+ end
95
+
86
96
  # Updates `unsubscribed_at` and runs `on_subscribe` callbacks
87
97
  def unsubscribe!(reason = nil)
88
98
  raise ::Caffeinate::InvalidState, 'CampaignSubscription is already ended.' if ended?
@@ -93,6 +103,16 @@ module Caffeinate
93
103
  true
94
104
  end
95
105
 
106
+ # Updates `unsubscribed_at` and runs `on_subscribe` callbacks
107
+ def unsubscribe(reason = nil)
108
+ return false if ended?
109
+
110
+ result = update(unsubscribed_at: ::Caffeinate.config.time_now, unsubscribe_reason: reason)
111
+
112
+ caffeinate_campaign.to_dripper.run_callbacks(:on_unsubscribe, self)
113
+ result
114
+ end
115
+
96
116
  # Updates `unsubscribed_at` to nil and runs `on_subscribe` callbacks.
97
117
  # Use `force` to forcefully reset. Does not create the mailings.
98
118
  def resubscribe!(force = false)
@@ -105,6 +125,18 @@ module Caffeinate
105
125
  true
106
126
  end
107
127
 
128
+ # Updates `unsubscribed_at` to nil and runs `on_subscribe` callbacks.
129
+ # Use `force` to forcefully reset. Does not create the mailings.
130
+ def resubscribe!(force = false)
131
+ return false if ended? && !force
132
+ return false if unsubscribed? && !force
133
+
134
+ result = update(unsubscribed_at: nil, resubscribed_at: ::Caffeinate.config.time_now)
135
+
136
+ caffeinate_campaign.to_dripper.run_callbacks(:on_resubscribe, self)
137
+ result
138
+ end
139
+
108
140
  def completed?
109
141
  caffeinate_mailings.unsent.count.zero?
110
142
  end
@@ -12,25 +12,28 @@ module Caffeinate
12
12
  def call(&block)
13
13
  return true unless block
14
14
 
15
- instance_eval(&block)
15
+ catch(:abort) do
16
+ return instance_eval(&block)
17
+ end
18
+ false
16
19
  end
17
20
 
18
21
  # Ends the CampaignSubscription
19
- def end!(msg)
20
- mailing.caffeinate_campaign_subscription.end!(msg)
21
- false
22
+ def end!(*args)
23
+ mailing.caffeinate_campaign_subscription.end!(*args)
24
+ throw(:abort)
22
25
  end
23
26
 
24
27
  # Unsubscribes the CampaignSubscription
25
- def unsubscribe!(msg)
26
- mailing.caffeinate_campaign_subscription.unsubscribe!(msg)
27
- false
28
+ def unsubscribe!(*args)
29
+ mailing.caffeinate_campaign_subscription.unsubscribe!(*args)
30
+ throw(:abort)
28
31
  end
29
32
 
30
33
  # Skips the mailing
31
34
  def skip!
32
35
  mailing.skip!
33
- false
36
+ throw(:abort)
34
37
  end
35
38
  end
36
39
  end
@@ -31,10 +31,10 @@ module Caffeinate
31
31
  #
32
32
  # @return [Caffeinate::CampaignSubscriber] the created CampaignSubscriber
33
33
  def subscribe(subscriber, **args)
34
- caffeinate_campaign.subscribe(subscriber, **args)
34
+ caffeinate_campaign.subscribe!(subscriber, **args)
35
35
  end
36
36
 
37
- # Unsubscribes from the campaign.
37
+ # Unsubscribes from the campaign. Returns false if something's wrong.
38
38
  #
39
39
  # OrderDripper.unsubscribe(order, user: order.user)
40
40
  #
@@ -46,6 +46,18 @@ module Caffeinate
46
46
  caffeinate_campaign.unsubscribe(subscriber, **args)
47
47
  end
48
48
 
49
+ # Unsubscribes from the campaign. Raises error if somerthing's wrong.
50
+ #
51
+ # OrderDripper.unsubscribe(order, user: order.user)
52
+ #
53
+ # @param [ActiveRecord::Base] subscriber The object subscribing
54
+ # @option [ActiveRecord::Base] :user The associated user (optional)
55
+ #
56
+ # @return [Caffeinate::CampaignSubscriber] the CampaignSubscriber
57
+ def unsubscribe!(subscriber, **args)
58
+ caffeinate_campaign.unsubscribe!(subscriber, **args)
59
+ end
60
+
49
61
  # :nodoc:
50
62
  def subscribes_block
51
63
  raise(NotImplementedError, 'Define subscribes') unless @subscribes_block
@@ -9,6 +9,13 @@ module Mail
9
9
  class Message
10
10
  attr_accessor :caffeinate_mailing
11
11
 
12
+ def caffeinate_mailing=(mailing)
13
+ @caffeinate_mailing = mailing
14
+ if mailing.is_a?(::Caffeinate::Mailing)
15
+ header['List-Unsubscribe'] = "<#{Caffeinate::UrlHelpers.caffeinate_subscribe_url(mailing.subscription)}>"
16
+ end
17
+ end
18
+
12
19
  def caffeinate?
13
20
  caffeinate_mailing.present?
14
21
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Caffeinate
4
- VERSION = '0.8.5'
4
+ VERSION = '0.9'
5
5
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Caffeinate
4
+ module Generators
5
+ # Creates a mailer from a dripper.
6
+ class MailerGenerator < Rails::Generators::Base
7
+ source_root File.expand_path('templates', __dir__)
8
+ include ::Rails::Generators::Migration
9
+ argument :dripper, banner: "dripper"
10
+
11
+ desc 'Creates a Mailer class from a dripper.'
12
+
13
+ def create_mailer
14
+ @dripper_klass = @dripper.safe_constantize
15
+ if @dripper_klass.nil?
16
+ raise ArgumentError, "Unknown dripper #{@dripper}"
17
+ end
18
+ @mailer_class = @dripper_klass.defaults[:mailer_class] || @dripper_klass.defaults[:mailer]
19
+ template 'mailer.rb', "app/mailers/#{@mailer_class.underscore}.rb"
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ class <%= @mailer_class %> < ApplicationMailer
2
+ <% @dripper_klass.drips.each do |action| -%>
3
+ def <%= action.action %><% if action.options[:using].nil? %>(mailing)<% end %>
4
+ <% if action.options[:using].nil? -%>
5
+ @mailing = mailing
6
+ <% end -%>
7
+ end
8
+ <% end -%>
9
+ end
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: 0.8.5
4
+ version: '0.9'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Brody
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-23 00:00:00.000000000 Z
11
+ date: 2020-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -175,8 +175,10 @@ files:
175
175
  - lib/caffeinate/url_helpers.rb
176
176
  - lib/caffeinate/version.rb
177
177
  - lib/generators/caffeinate/install_generator.rb
178
+ - lib/generators/caffeinate/mailer_generator.rb
178
179
  - lib/generators/caffeinate/templates/application_dripper.rb
179
180
  - lib/generators/caffeinate/templates/caffeinate.rb
181
+ - lib/generators/caffeinate/templates/mailer.rb.tt
180
182
  - lib/generators/caffeinate/views_generator.rb
181
183
  homepage: https://github.com/joshmn/caffeinate
182
184
  licenses: