noticed 1.2.12 → 1.2.13

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: 6fca882449d4696c1551badc82383f789610f19898dec345a64f33a225ca9f81
4
- data.tar.gz: 8751afe5063970449573719d7bedb957d7c88e52f1efef96357d8754d48cec21
3
+ metadata.gz: 177af67cbc18228368b1046461e97ec0046ab7be37dcd528d0834456184d3dbc
4
+ data.tar.gz: 4b68f5ad47ac4cde2fb48f0738792c8d70332a0bf3b2a5bc4c6c0a830bd9b030
5
5
  SHA512:
6
- metadata.gz: 8ab4f29e4611ee0e5c3f548562e0265dc991ca45cb4789fbf7eb780430b21eddaef3407fbc7946f21bbff411149dd8e796197d9d0b334d85d8085aaea7beb54a
7
- data.tar.gz: 7c6ce9b53092a182e405fc26274daae30e8ec6e2149c5f5794d3fa5c3728210f013f632c844dd00f9ad5f1d64cba12b09de6c311b9d367b580d91f899affb4c4
6
+ metadata.gz: 127fb40a8e97d833c01d8f35586aee3ae5be6b673e20670306a5c94982ea4b2f358d7d471020460689483c326c7caf5a9f9bd3854b2c4052f47f2714a4aa8b92
7
+ data.tar.gz: 5f285005c9e5553e9cde3203a7b7b646c3448edb9fdb0335e0286dc2bee14d09f7001644733caa8a5795f5291380fc4e65aa37ab5c89e9c752a54d2dd35a8a61
data/README.md CHANGED
@@ -78,7 +78,7 @@ To add delivery methods, simply `include` the module for the delivery methods yo
78
78
  class CommentNotification < Noticed::Base
79
79
  deliver_by :database
80
80
  deliver_by :action_cable
81
- deliver_by :email, if: :email_notifications?
81
+ deliver_by :email, mailer: 'CommentMailer', if: :email_notifications?
82
82
 
83
83
  # I18n helpers
84
84
  def message
@@ -120,7 +120,7 @@ Like ActiveRecord, notifications have several different types of callbacks.
120
120
  ```ruby
121
121
  class CommentNotification < Noticed::Base
122
122
  deliver_by :database
123
- deliver_by :email
123
+ deliver_by :email, mailer: 'CommentMailer'
124
124
 
125
125
  # Callbacks for the entire delivery
126
126
  before_deliver :whatever
@@ -158,7 +158,7 @@ For example:
158
158
 
159
159
  ```ruby
160
160
  class CommentNotification < Noticed::Base
161
- deliver_by :email, if: :email_notifications?
161
+ deliver_by :email, mailer: 'CommentMailer', if: :email_notifications?
162
162
 
163
163
  def email_notifications?
164
164
  recipient.email_notifications?
@@ -340,6 +340,40 @@ Delivery methods have access to the following methods and attributes:
340
340
  * `recipient` - The object who should receive the notification. This is typically a User, Account, or other ActiveRecord model.
341
341
  * `params` - The params passed into the notification. This is details about the event that happened. For example, a user commenting on a post would have params of `{ user: User.first }`
342
342
 
343
+ #### Validating options passed to Custom Delivery methods
344
+
345
+ You can validate the options passed to the custom delivery method and raise validation errors. This is helpful for debugging to make sure valid and required options were passed in.
346
+
347
+ To do this, simply override the `self.validate!(options)` method from the `Noticed::DeliveryMethods::Base` class in your Custom Delivery method.
348
+
349
+ ```ruby
350
+ class DeliveryMethods::Discord < Noticed::DeliveryMethods::Base
351
+ def deliver
352
+ # Logic for sending a Discord notification
353
+ end
354
+
355
+ def self.validate!(options)
356
+ unless options.key?(:sent_by)
357
+ raise Noticed::ValidationError, 'the `sent_by` option is missing'
358
+ end
359
+ end
360
+ end
361
+
362
+ class CommentNotification < Noticed::Base
363
+ deliver_by :discord, class: 'DeliveryMethods::Discord'
364
+ end
365
+ ```
366
+
367
+ Now it will raise an error because a required argument is missing.
368
+
369
+ To fix the error, the argument has to be passed correctly. For example:
370
+
371
+ ```ruby
372
+ class CommentNotification < Noticed::Base
373
+ deliver_by :discord, class: 'DeliveryMethods::Discord', sent_by: User.admin.first
374
+ end
375
+ ```
376
+
343
377
  #### Callbacks
344
378
 
345
379
  Callbacks for delivery methods wrap the *actual* delivery of the notification. You can use `before_deliver`, `around_deliver` and `after_deliver` in your custom delivery methods.
@@ -22,6 +22,15 @@ module Noticed
22
22
  inject_into_class model_path, class_name, " include Noticed::Model\n"
23
23
  end
24
24
 
25
+ def add_not_nullable
26
+ migration_path = Dir.glob(Rails.root.join("db/migrate/*")).max_by { |f| File.mtime(f) }
27
+
28
+ # Force is required because null: false already exists in the file and Thor isn't smart enough to tell the difference
29
+ insert_into_file migration_path, after: "t.string :type", force: true do
30
+ ", null: false"
31
+ end
32
+ end
33
+
25
34
  def done
26
35
  readme "README" if behavior == :invoke
27
36
  end
@@ -2,4 +2,11 @@ class DeliveryMethods::<%= class_name %> < Noticed::DeliveryMethods::Base
2
2
  def deliver
3
3
  # Logic for sending the notification
4
4
  end
5
+
6
+ # You may override this method to validate options for the delivery method
7
+ # Invalid options should raise a ValidationError
8
+ #
9
+ # def self.validate!(options)
10
+ # raise ValidationError, "required_option missing" unless options[:required_option]
11
+ # end
5
12
  end
@@ -97,13 +97,12 @@ module Noticed
97
97
  }
98
98
 
99
99
  run_callbacks delivery_method[:name] do
100
- klass = get_class(delivery_method[:name], delivery_method[:options])
101
- enqueue ? klass.perform_later(args) : klass.perform_now(args)
100
+ method = delivery_method_for(delivery_method[:name], delivery_method[:options])
101
+ enqueue ? method.perform_later(args) : method.perform_now(args)
102
102
  end
103
103
  end
104
104
 
105
- # Retrieves the correct class for a delivery method
106
- def get_class(name, options)
105
+ def delivery_method_for(name, options)
107
106
  if options[:class]
108
107
  options[:class].constantize
109
108
  else
@@ -111,13 +110,25 @@ module Noticed
111
110
  end
112
111
  end
113
112
 
114
- # Validates that all params are present
115
113
  def validate!
114
+ validate_params_present!
115
+ validate_options_of_delivery_methods!
116
+ end
117
+
118
+ # Validates that all params are present
119
+ def validate_params_present!
116
120
  self.class.param_names.each do |param_name|
117
121
  if params[param_name].nil?
118
122
  raise ValidationError, "#{param_name} is missing."
119
123
  end
120
124
  end
121
125
  end
126
+
127
+ def validate_options_of_delivery_methods!
128
+ delivery_methods.each do |delivery_method|
129
+ method = delivery_method_for(delivery_method[:name], delivery_method[:options])
130
+ method.validate!(delivery_method[:options])
131
+ end
132
+ end
122
133
  end
123
134
  end
@@ -25,6 +25,11 @@ module Noticed
25
25
  raise NotImplementedError, "Delivery methods must implement a deliver method"
26
26
  end
27
27
 
28
+ def self.validate!(options)
29
+ # Override this method in your custom DeliveryMethod class to validate the options
30
+ # and raise error, if invalid.
31
+ end
32
+
28
33
  private
29
34
 
30
35
  # Helper method for making POST requests from delivery methods
@@ -5,6 +5,12 @@ module Noticed
5
5
  mailer.with(format).send(method.to_sym).deliver_later
6
6
  end
7
7
 
8
+ def self.validate!(options)
9
+ unless options.key?(:mailer)
10
+ raise ValidationError, "email delivery method requires a 'mailer' to be specified"
11
+ end
12
+ end
13
+
8
14
  private
9
15
 
10
16
  def mailer
@@ -1,3 +1,3 @@
1
1
  module Noticed
2
- VERSION = "1.2.12"
2
+ VERSION = "1.2.13"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: noticed
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.12
4
+ version: 1.2.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Oliver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-24 00:00:00.000000000 Z
11
+ date: 2020-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails