noticed 2.4.3 → 2.5.0

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: 6e3f12e1bfdc3fee47e90917d632fc707c0379f3851aa95debcbcd944e0841f0
4
- data.tar.gz: c4dbd8f7cb9f789e45aad0498f1847a2a7cc9941605b0435af63a8ed53b2a663
3
+ metadata.gz: 5d93cc608d5422344ca6aff8b4941508dc76b3192e9052c853677f2bc222a98e
4
+ data.tar.gz: 7932559c8b60c97b0798815872f8146588bfb7bb3b82cb5a3a60e53fbe49bf14
5
5
  SHA512:
6
- metadata.gz: 2df23c79cb20b81a5512ba595d123fa234068699045e08a53bbd37415ae71b926b9a40201e0a85c7d93e7fff373e8cf30dce088f2640d4fed24b8d4f2251d5bd
7
- data.tar.gz: daae0697cd21ac8f1099a08e442cfc48ed637677333a29c61dc79bc8746bf6e8c056f137ce26cacd2ab3f75406fe8dbaa7b319d9bddc387fa7d452592b61b0c2
6
+ metadata.gz: 223e40cacfffb9da94953284319f5fb865161996daf39d0c7b3c5697cd41e1923fc394e3d3ee782d1eba8513adcb91006ef6bc962fb1908672181eb024de880c
7
+ data.tar.gz: aac70f09103d1737c5cef2cbfdf87275cc5f595dc84ffd38500561585c4f89574e427448fc8011cbc0bb16b9b06f191cecbadc9831ed8c60a857b0cf9e2d330b
data/README.md CHANGED
@@ -41,6 +41,7 @@ Delivery methods we officially support:
41
41
 
42
42
  Bulk delivery methods we support:
43
43
 
44
+ * [Bluesky](docs/bulk_delivery_methods/bluesky.md)
44
45
  * [Discord](docs/bulk_delivery_methods/discord.md)
45
46
  * [Slack](docs/bulk_delivery_methods/slack.md)
46
47
  * [Webhook](docs/bulk_delivery_methods/webhook.md)
@@ -107,7 +108,7 @@ class NewCommentNotifier < Noticed::Event
107
108
 
108
109
  deliver_by :email do |config|
109
110
  config.mailer = "CommentMailer"
110
- config.if = ->(recipient) { !!recipient.preferences[:email] }
111
+ config.if = -> { !!recipient.preferences[:email] }
111
112
  end
112
113
 
113
114
  bulk_deliver_by :discord do |config|
@@ -374,9 +375,29 @@ Each of these options are available for every delivery method (individual or bul
374
375
 
375
376
  * `config.if` — Intended for a lambda or method; runs after the `wait` if configured; cancels the delivery method if returns falsey
376
377
  * `config.unless` — Intended for a lambda or method; runs after the `wait` if configured; cancels the delivery method if returns truthy
378
+
379
+ The following are evaluated in the context of the Notification so it can be customize to the recipient:
380
+
377
381
  * `config.wait` — (Should yield an `ActiveSupport::Duration`) Delays the job that runs this delivery method for the given duration of time
378
382
  * `config.wait_until` — (Should yield a specific time object) Delays the job that runs this delivery method until the specific time specified
379
- * `config.queue` — Sets the ActiveJob queue name to be used for the job that runs this delivery method
383
+ * `config.queue` — Sets the ActiveJob queue name to be used for the job that runs this delivery method.
384
+
385
+ When using a symbol, the matching method must be defined inside the `notification_methods` block:
386
+
387
+ ```ruby
388
+ # app/notifiers/message_notifier.rb
389
+ class MessageNotifier < Noticed::Event
390
+ deliver_by :delivery_method do |config|
391
+ config.queue = :queue
392
+ end
393
+
394
+ notification_methods do
395
+ def queue
396
+ "high_priority"
397
+ end
398
+ end
399
+ end
400
+ ```
380
401
 
381
402
  ### 📨 Sending Notifications
382
403
 
@@ -407,8 +428,8 @@ Recipients can also be computed inside a notifier:
407
428
  class NewCommentNotifier < ApplicationNotifier
408
429
  recipients ->{ params[:record].thread.all_authors }
409
430
 
410
- # or
411
- recipients do
431
+ # or
432
+ recipients do
412
433
  params[:record].thread.all_authors
413
434
  end
414
435
 
@@ -465,8 +486,8 @@ module MyApp
465
486
  # ...
466
487
 
467
488
  config.to_prepare do
468
- Noticed::Event.include Noticed::EventExtensions
469
- Noticed::Notification.include Noticed::NotificationExtensions
489
+ Noticed::Event.include EventExtensions
490
+ Noticed::Notification.include NotificationExtensions
470
491
  end
471
492
  end
472
493
  end
@@ -506,6 +527,7 @@ Individual delivery methods:
506
527
 
507
528
  Bulk delivery methods:
508
529
 
530
+ * [Bluesky](docs/bulk_delivery_methods/bluesky.md)
509
531
  * [Discord](docs/bulk_delivery_methods/discord.md)
510
532
  * [Slack](docs/bulk_delivery_methods/slack.md)
511
533
  * [Webhook](docs/bulk_delivery_methods/webhook.md)
@@ -580,7 +602,7 @@ end
580
602
 
581
603
  A common custom delivery method in the Rails world might be to Delivery to the web via turbo stream.
582
604
 
583
- Note: This example users custom methods that extend the `Noticed::Notification` class.
605
+ Note: This example uses custom methods that extend the `Noticed::Notification` class.
584
606
 
585
607
  See the [Custom Noticed Model Methods](#custom-noticed-model-methods) section for more information.
586
608
 
@@ -6,7 +6,7 @@ module Noticed
6
6
  # Generate a Notification class each time a Notifier is defined
7
7
  def inherited(notifier)
8
8
  super
9
- notifier.const_set :Notification, Class.new(Noticed::Notification)
9
+ notifier.const_set :Notification, Class.new(const_defined?(:Notification) ? const_get(:Notification) : Noticed::Notification)
10
10
  end
11
11
 
12
12
  def notification_methods(&block)
@@ -37,8 +37,10 @@ module Noticed
37
37
  const_get(:Notification).class_eval(&block)
38
38
  end
39
39
 
40
- def deliver(recipients)
40
+ def deliver(recipients = nil)
41
+ recipients ||= evaluate_recipients
41
42
  recipients = Array.wrap(recipients)
43
+
42
44
  bulk_delivery_methods.each do |_, deliver_by|
43
45
  deliver_by.ephemeral_perform_later(self.class.name, recipients, params)
44
46
  end
@@ -48,6 +50,8 @@ module Noticed
48
50
  deliver_by.ephemeral_perform_later(self.class.name, recipient, params)
49
51
  end
50
52
  end
53
+
54
+ self
51
55
  end
52
56
 
53
57
  def record
@@ -3,14 +3,17 @@ module Noticed
3
3
  include ApiClient
4
4
  include RequiredOptions
5
5
 
6
+ extend ActiveModel::Callbacks
7
+ define_model_callbacks :deliver
8
+
6
9
  class_attribute :logger, default: Rails.logger
7
10
 
8
11
  attr_reader :config, :event
9
12
 
10
- def perform(delivery_method_name, event, recipients: nil, params: {}, overrides: {})
13
+ def perform(delivery_method_name, event, recipient: nil, params: {}, overrides: {})
11
14
  # Ephemeral notifications
12
15
  if event.is_a? String
13
- @event = @notification.event
16
+ @event = event.constantize.new_with_params(recipient, params)
14
17
  @config = overrides
15
18
  else
16
19
  @event = event
@@ -20,7 +23,9 @@ module Noticed
20
23
  return false if config.has_key?(:if) && !evaluate_option(:if)
21
24
  return false if config.has_key?(:unless) && evaluate_option(:unless)
22
25
 
23
- deliver
26
+ run_callbacks :deliver do
27
+ deliver
28
+ end
24
29
  end
25
30
 
26
31
  def deliver
@@ -0,0 +1,49 @@
1
+ module Noticed
2
+ module BulkDeliveryMethods
3
+ class Bluesky < BulkDeliveryMethod
4
+ required_options :identifier, :password, :json
5
+
6
+ # bulk_deliver_by :bluesky do |config|
7
+ # config.identifier = ENV["BLUESKY_ID"]
8
+ # config.password = ENV["BLUESKY_PASSWORD"]
9
+ # config.json = {text: "...", createdAt: "..."}
10
+ # end
11
+
12
+ def deliver
13
+ Rails.logger.debug(evaluate_option(:json))
14
+ post_request(
15
+ "https://#{host}/xrpc/com.atproto.repo.createRecord",
16
+ headers: {"Authorization" => "Bearer #{token}"},
17
+ json: {
18
+ repo: identifier,
19
+ collection: "app.bsky.feed.post",
20
+ record: evaluate_option(:json)
21
+ }
22
+ )
23
+ end
24
+
25
+ def token
26
+ start_session.dig("accessJwt")
27
+ end
28
+
29
+ def start_session
30
+ response = post_request(
31
+ "https://#{host}/xrpc/com.atproto.server.createSession",
32
+ json: {
33
+ identifier: identifier,
34
+ password: evaluate_option(:password)
35
+ }
36
+ )
37
+ JSON.parse(response.body)
38
+ end
39
+
40
+ def host
41
+ @host ||= evaluate_option(:host) || "bsky.social"
42
+ end
43
+
44
+ def identifier
45
+ @identifier ||= evaluate_option(:identifier)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,10 +1,10 @@
1
1
  module Noticed
2
2
  module BulkDeliveryMethods
3
- class Test < DeliveryMethod
3
+ class Test < BulkDeliveryMethod
4
4
  class_attribute :delivered, default: []
5
5
 
6
6
  def deliver
7
- delivered << notification
7
+ delivered << event
8
8
  end
9
9
  end
10
10
  end
@@ -16,6 +16,7 @@ module Noticed
16
16
  connection_pool.with do |connection|
17
17
  response = connection.push(apn)
18
18
  raise "Timeout sending iOS push notification" unless response
19
+ connection.close
19
20
 
20
21
  if bad_token?(response) && config[:invalid_token]
21
22
  # Allow notification to cleanup invalid iOS device tokens
@@ -62,6 +63,9 @@ module Noticed
62
63
  handler = proc do |connection|
63
64
  connection.on(:error) do |exception|
64
65
  Rails.logger.info "Apnotic exception raised: #{exception}"
66
+ if config[:error_handler].respond_to?(:call)
67
+ notification.instance_exec(exception, &config[:error_handler])
68
+ end
65
69
  end
66
70
  end
67
71
 
@@ -1,3 +1,3 @@
1
1
  module Noticed
2
- VERSION = "2.4.3"
2
+ VERSION = "2.5.0"
3
3
  end
data/lib/noticed.rb CHANGED
@@ -20,6 +20,7 @@ module Noticed
20
20
  autoload :Translation, "noticed/translation"
21
21
 
22
22
  module BulkDeliveryMethods
23
+ autoload :Bluesky, "noticed/bulk_delivery_methods/bluesky"
23
24
  autoload :Discord, "noticed/bulk_delivery_methods/discord"
24
25
  autoload :Slack, "noticed/bulk_delivery_methods/slack"
25
26
  autoload :Test, "noticed/bulk_delivery_methods/test"
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: 2.4.3
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Oliver
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-06 00:00:00.000000000 Z
11
+ date: 2024-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -58,6 +58,7 @@ files:
58
58
  - lib/noticed.rb
59
59
  - lib/noticed/api_client.rb
60
60
  - lib/noticed/bulk_delivery_method.rb
61
+ - lib/noticed/bulk_delivery_methods/bluesky.rb
61
62
  - lib/noticed/bulk_delivery_methods/discord.rb
62
63
  - lib/noticed/bulk_delivery_methods/slack.rb
63
64
  - lib/noticed/bulk_delivery_methods/test.rb
@@ -85,7 +86,7 @@ homepage: https://github.com/excid3/noticed
85
86
  licenses:
86
87
  - MIT
87
88
  metadata: {}
88
- post_install_message:
89
+ post_install_message:
89
90
  rdoc_options: []
90
91
  require_paths:
91
92
  - lib
@@ -100,8 +101,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
101
  - !ruby/object:Gem::Version
101
102
  version: '0'
102
103
  requirements: []
103
- rubygems_version: 3.5.16
104
- signing_key:
104
+ rubygems_version: 3.5.23
105
+ signing_key:
105
106
  specification_version: 4
106
107
  summary: Notifications for Ruby on Rails applications
107
108
  test_files: []