pushpad 1.0.0 → 1.1.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 +4 -4
- data/.github/workflows/ci.yml +1 -1
- data/README.md +62 -18
- data/lib/pushpad/notification.rb +11 -0
- data/lib/pushpad/request.rb +4 -0
- data/pushpad.gemspec +1 -1
- data/spec/pushpad/notification_spec.rb +32 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dccdac2f6334014fc3b1a7fa42b5cc0644135df02b3e58f9c44f17e7fe00a27e
|
4
|
+
data.tar.gz: 69c4ea4985bdd6c120445e36c58e8adf0f572874dd7fd3ef929ad90176c84b18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9ab88edcae1bcb44f8e6e1b388d25ee47459c81b6f2c72c9b450a1bf64b08dd874b019d518733a1cb4cf53c7f4f3c8feec7ffc418a144c81cc6b0864c1b67d2
|
7
|
+
data.tar.gz: 6540c56bb6cbaa46e496098669d081c7c66f35c20e1cc82bb4602510a696179c9fa71ba381dd1693c181fe32adf8a05ef5224ca9a2ea22f16648e35b2eca138b
|
data/.github/workflows/ci.yml
CHANGED
data/README.md
CHANGED
@@ -3,13 +3,9 @@
|
|
3
3
|
[](https://badge.fury.io/rb/pushpad)
|
4
4
|

|
5
5
|
|
6
|
-
[Pushpad](https://pushpad.xyz) is a service for sending push notifications from
|
6
|
+
[Pushpad](https://pushpad.xyz) is a service for sending push notifications from websites and web apps. It uses the **Push API**, which is a standard supported by all major browsers (Chrome, Firefox, Opera, Edge, Safari).
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
- notifications are delivered even when the user is not on your website
|
11
|
-
- users don't need to install any app or plugin
|
12
|
-
- you can target specific users or send bulk notifications
|
8
|
+
The notifications are delivered in real time even when the users are not on your website and you can target specific users or send bulk notifications.
|
13
9
|
|
14
10
|
## Installation
|
15
11
|
|
@@ -55,17 +51,40 @@ Pushpad.signature_for current_user.id
|
|
55
51
|
|
56
52
|
```ruby
|
57
53
|
notification = Pushpad::Notification.new({
|
54
|
+
# required, the main content of the notification
|
58
55
|
body: "Hello world!",
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
56
|
+
|
57
|
+
# optional, the title of the notification (defaults to your project name)
|
58
|
+
title: "Website Name",
|
59
|
+
|
60
|
+
# optional, open this link on notification click (defaults to your project website)
|
61
|
+
target_url: "https://example.com",
|
62
|
+
|
63
|
+
# optional, the icon of the notification (defaults to the project icon)
|
64
|
+
icon_url: "https://example.com/assets/icon.png",
|
65
|
+
|
66
|
+
# optional, the small icon displayed in the status bar (defaults to the project badge)
|
67
|
+
badge_url: "https://example.com/assets/badge.png",
|
68
|
+
|
69
|
+
# optional, an image to display in the notification content
|
70
|
+
# see https://pushpad.xyz/docs/sending_images
|
71
|
+
image_url: "https://example.com/assets/image.png",
|
72
|
+
|
73
|
+
# optional, drop the notification after this number of seconds if a device is offline
|
74
|
+
ttl: 604800,
|
75
|
+
|
76
|
+
# optional, prevent Chrome on desktop from automatically closing the notification after a few seconds
|
77
|
+
require_interaction: true,
|
78
|
+
|
79
|
+
# optional, enable this option if you want a mute notification without any sound
|
80
|
+
silent: false,
|
81
|
+
|
82
|
+
# optional, enable this option only for time-sensitive alerts (e.g. incoming phone call)
|
83
|
+
urgent: false,
|
84
|
+
|
85
|
+
# optional, a string that is passed as an argument to action button callbacks
|
86
|
+
custom_data: "123",
|
87
|
+
|
69
88
|
# optional, add some action buttons to the notification
|
70
89
|
# see https://pushpad.xyz/docs/action_buttons
|
71
90
|
actions: [
|
@@ -76,10 +95,14 @@ notification = Pushpad::Notification.new({
|
|
76
95
|
action: "myActionName" # optional
|
77
96
|
}
|
78
97
|
],
|
79
|
-
|
98
|
+
|
99
|
+
# optional, bookmark the notification in the Pushpad dashboard (e.g. to highlight manual notifications)
|
100
|
+
starred: true,
|
101
|
+
|
80
102
|
# optional, use this option only if you need to create scheduled notifications (max 5 days)
|
81
103
|
# see https://pushpad.xyz/docs/schedule_notifications
|
82
104
|
send_at: Time.utc(2016, 7, 25, 10, 9),
|
105
|
+
|
83
106
|
# optional, add the notification to custom categories for stats aggregation
|
84
107
|
# see https://pushpad.xyz/docs/monitoring
|
85
108
|
custom_metrics: ['examples', 'another_metric'] # up to 3 metrics per notification
|
@@ -100,7 +123,8 @@ notification.deliver_to users, tags: ['events']
|
|
100
123
|
notification.broadcast tags: ['segment1', 'segment2']
|
101
124
|
|
102
125
|
# you can use boolean expressions
|
103
|
-
# they
|
126
|
+
# they can include parentheses and the operators !, &&, || (from highest to lowest precedence)
|
127
|
+
# https://pushpad.xyz/docs/tags
|
104
128
|
notification.broadcast tags: ['zip_code:28865 && !optout:local_events || friend_of:Organizer123']
|
105
129
|
notification.deliver_to users, tags: ['tag1 && tag2', 'tag3'] # equal to 'tag1 && tag2 || tag3'
|
106
130
|
|
@@ -177,6 +201,26 @@ to get the full list in multiple requests.
|
|
177
201
|
notifications = Pushpad::Notification.find_all(project_id: 5, page: 2)
|
178
202
|
```
|
179
203
|
|
204
|
+
## Scheduled notifications
|
205
|
+
|
206
|
+
You can create scheduled notifications that will be sent in the future:
|
207
|
+
|
208
|
+
```ruby
|
209
|
+
notification = Pushpad::Notification.new({
|
210
|
+
body: "This notification will be sent after 60 seconds",
|
211
|
+
send_at: Time.now.utc + 60
|
212
|
+
})
|
213
|
+
|
214
|
+
notification.broadcast
|
215
|
+
```
|
216
|
+
|
217
|
+
You can also cancel a scheduled notification:
|
218
|
+
|
219
|
+
```ruby
|
220
|
+
notification = Pushpad::Notification.find(5)
|
221
|
+
notification.cancel
|
222
|
+
```
|
223
|
+
|
180
224
|
## Getting subscription count
|
181
225
|
|
182
226
|
You can retrieve the number of subscriptions for a given project,
|
data/lib/pushpad/notification.rb
CHANGED
@@ -8,6 +8,9 @@ module Pushpad
|
|
8
8
|
|
9
9
|
class FindError < RuntimeError
|
10
10
|
end
|
11
|
+
|
12
|
+
class CancelError < RuntimeError
|
13
|
+
end
|
11
14
|
|
12
15
|
class ReadonlyError < RuntimeError
|
13
16
|
end
|
@@ -87,6 +90,14 @@ module Pushpad
|
|
87
90
|
end
|
88
91
|
deliver req_body(uids, options[:tags]), options
|
89
92
|
end
|
93
|
+
|
94
|
+
def cancel
|
95
|
+
response = Request.delete("https://pushpad.xyz/api/v1/notifications/#{id}/cancel")
|
96
|
+
|
97
|
+
unless response.code == "204"
|
98
|
+
raise CancelError, "Response #{response.code} #{response.message}: #{response.body}"
|
99
|
+
end
|
100
|
+
end
|
90
101
|
|
91
102
|
private
|
92
103
|
|
data/lib/pushpad/request.rb
CHANGED
data/pushpad.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "pushpad"
|
3
|
-
spec.version = '1.
|
3
|
+
spec.version = '1.1.0'
|
4
4
|
spec.authors = ["Pushpad"]
|
5
5
|
spec.email = ["support@pushpad.xyz"]
|
6
6
|
spec.summary = "Web push notifications for Chrome, Firefox, Opera, Edge and Safari using Pushpad."
|
@@ -28,7 +28,6 @@ module Pushpad
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def stub_notification_post(project_id, params = {}, response_body = "{}")
|
31
|
-
|
32
31
|
stub_request(:post, "https://pushpad.xyz/api/v1/projects/#{project_id}/notifications").
|
33
32
|
with(body: hash_including(params)).
|
34
33
|
to_return(status: 201, body: response_body)
|
@@ -38,6 +37,16 @@ module Pushpad
|
|
38
37
|
stub_request(:post, "https://pushpad.xyz/api/v1/projects/#{project_id}/notifications").
|
39
38
|
to_return(status: 403)
|
40
39
|
end
|
40
|
+
|
41
|
+
def stub_notification_delete(notification_id)
|
42
|
+
stub_request(:delete, "https://pushpad.xyz/api/v1/notifications/#{notification_id}/cancel").
|
43
|
+
to_return(status: 204)
|
44
|
+
end
|
45
|
+
|
46
|
+
def stub_failing_notification_delete(notification_id)
|
47
|
+
stub_request(:delete, "https://pushpad.xyz/api/v1/notifications/#{notification_id}/cancel").
|
48
|
+
to_return(status: 404)
|
49
|
+
end
|
41
50
|
|
42
51
|
describe ".new" do
|
43
52
|
it "allows delivering notifications even if an id attribute is supplied" do
|
@@ -409,5 +418,27 @@ module Pushpad
|
|
409
418
|
end
|
410
419
|
end
|
411
420
|
end
|
421
|
+
|
422
|
+
describe "#cancel" do
|
423
|
+
it "cancels a scheduled notification" do
|
424
|
+
stub_notification_delete(5)
|
425
|
+
|
426
|
+
notification = Notification.new(id: 5)
|
427
|
+
|
428
|
+
res = notification.cancel
|
429
|
+
expect(res).to be_nil
|
430
|
+
end
|
431
|
+
|
432
|
+
it "fails with CancelError if response status code is not 204" do
|
433
|
+
stub_failing_notification_delete(5)
|
434
|
+
|
435
|
+
notification = Notification.new(id: 5)
|
436
|
+
|
437
|
+
expect {
|
438
|
+
notification.cancel
|
439
|
+
}.to raise_error(Notification::CancelError)
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
412
443
|
end
|
413
444
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pushpad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pushpad
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -81,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
requirements: []
|
84
|
-
rubygems_version: 3.
|
84
|
+
rubygems_version: 3.5.16
|
85
85
|
signing_key:
|
86
86
|
specification_version: 4
|
87
87
|
summary: Web push notifications for Chrome, Firefox, Opera, Edge and Safari using
|