pushpad 0.5.0 → 0.5.1
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/README.md +3 -2
- data/lib/pushpad.rb +9 -11
- data/spec/pushpad_spec.rb +142 -0
- data/spec/spec_helper.rb +9 -0
- metadata +39 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16e079cb71bb9a62497ef67e1d02d8e10ae52ef9
|
4
|
+
data.tar.gz: 8bd989647419688540a10b16f2ee6400f13176fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 239f05ffb94da74b1cf932d3200f4e0267e9b41fa53d937b745a919b78500f6aacec685b920c3c3f45032dbb2b791fb368715ea15dfa9a502d5fbd7f6a8646c7
|
7
|
+
data.tar.gz: 7ec1b731bb3a23a275ffdd76f05cbabc3616a05a1cef98aff83e114918d8f5c41829766363a8add0f288e91af64890d2251a1e93967879e0ee09f06f3c184e2a
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Pushpad - Web Push Notifications Service
|
2
2
|
|
3
|
-
[Pushpad](https://pushpad.xyz) is a service for sending push notifications from your web app. It supports the **Push API** (Chrome
|
3
|
+
[Pushpad](https://pushpad.xyz) is a service for sending push notifications from your web app. It supports the **Push API** (Chrome, Firefox, Opera) and **APNs** (Safari).
|
4
4
|
|
5
5
|
Features:
|
6
6
|
|
@@ -12,6 +12,7 @@ Currently push notifications work on the following browsers:
|
|
12
12
|
|
13
13
|
- Chrome (Desktop and Android)
|
14
14
|
- Firefox (44+)
|
15
|
+
- Opera (42+)
|
15
16
|
- Safari
|
16
17
|
|
17
18
|
## Installation
|
@@ -80,7 +81,7 @@ notification = Pushpad::Notification.new({
|
|
80
81
|
target_url: "http://example.com", # optional, defaults to your project website
|
81
82
|
icon_url: "http://example.com/assets/icon.png", # optional, defaults to the project icon
|
82
83
|
ttl: 604800, # optional, drop the notification after this number of seconds if a device is offline
|
83
|
-
require_interaction: true # optional,
|
84
|
+
require_interaction: true # optional, if true it prevents Chrome from automatically closing the notification after a few seconds
|
84
85
|
})
|
85
86
|
|
86
87
|
# deliver to a user
|
data/lib/pushpad.rb
CHANGED
@@ -51,7 +51,7 @@ module Pushpad
|
|
51
51
|
self.target_url = options[:target_url]
|
52
52
|
self.icon_url = options[:icon_url]
|
53
53
|
self.ttl = options[:ttl]
|
54
|
-
self.require_interaction =
|
54
|
+
self.require_interaction = options[:require_interaction]
|
55
55
|
end
|
56
56
|
|
57
57
|
def broadcast(options = {})
|
@@ -95,16 +95,14 @@ module Pushpad
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def req_body(uids = nil, tags = nil)
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
}
|
107
|
-
}
|
98
|
+
notification_params = { "body" => self.body }
|
99
|
+
notification_params["title"] = self.title if self.title
|
100
|
+
notification_params["target_url"] = self.target_url if self.target_url
|
101
|
+
notification_params["icon_url"] = self.icon_url if self.icon_url
|
102
|
+
notification_params["ttl"] = self.ttl if self.ttl
|
103
|
+
notification_params["require_interaction"] = self.require_interaction unless self.require_interaction.nil?
|
104
|
+
|
105
|
+
body = { "notification" => notification_params }
|
108
106
|
body["uids"] = uids if uids
|
109
107
|
body["tags"] = tags if tags
|
110
108
|
body.to_json
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Pushpad do
|
4
|
+
let!(:auth_token) { Pushpad.auth_token = 'abc123' }
|
5
|
+
let!(:project_id) { Pushpad.project_id = 123 }
|
6
|
+
let(:notification) { Pushpad::Notification.new body: "Example message" }
|
7
|
+
|
8
|
+
describe "#auth_token=" do
|
9
|
+
it "sets the Pushpad auth token globally" do
|
10
|
+
Pushpad.auth_token = 'abc123'
|
11
|
+
expect(Pushpad.auth_token).to eq 'abc123'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#project_id=" do
|
16
|
+
it "sets the Pushpad project id globally" do
|
17
|
+
Pushpad.project_id = 123
|
18
|
+
expect(Pushpad.project_id).to eq 123
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#signature_for" do
|
23
|
+
it "produces the hex-encoded HMAC-SHA1 signature for the data passed as argument" do
|
24
|
+
signature = Pushpad.signature_for('myuid1')
|
25
|
+
expect(signature).to eq '27fbe136f5a4aa0b6be74c0e18fa8ce81ad91b60'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def stub_notification_post project_id, params
|
30
|
+
stub_request(:post, "https://pushpad.xyz/projects/#{project_id}/notifications").
|
31
|
+
with(body: hash_including(params)).
|
32
|
+
to_return(status: 201, body: '{}')
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#deliver_to" do
|
36
|
+
|
37
|
+
shared_examples 'notification params' do
|
38
|
+
it "includes the params in the request" do
|
39
|
+
req = stub_notification_post project_id, notification: notification_params
|
40
|
+
notification.deliver_to [123, 456]
|
41
|
+
expect(req).to have_been_made.once
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "a notification with just the required params" do
|
46
|
+
let(:notification_params) do
|
47
|
+
{ body: "Example message" }
|
48
|
+
end
|
49
|
+
let(:notification) { Pushpad::Notification.new body: notification_params[:body] }
|
50
|
+
include_examples 'notification params'
|
51
|
+
end
|
52
|
+
|
53
|
+
context "a notification with all the optional params" do
|
54
|
+
let(:notification_params) do
|
55
|
+
{
|
56
|
+
body: "Example message",
|
57
|
+
title: "Website Name",
|
58
|
+
target_url: "http://example.com",
|
59
|
+
icon_url: "http://example.com/assets/icon.png",
|
60
|
+
ttl: 604800,
|
61
|
+
require_interaction: true
|
62
|
+
}
|
63
|
+
end
|
64
|
+
let(:notification) { Pushpad::Notification.new notification_params }
|
65
|
+
include_examples 'notification params'
|
66
|
+
end
|
67
|
+
|
68
|
+
context "with a scalar as a param" do
|
69
|
+
it "reaches only that uid" do
|
70
|
+
req = stub_notification_post project_id, uids: [100]
|
71
|
+
notification.deliver_to(100)
|
72
|
+
expect(req).to have_been_made.once
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "with an array as a param" do
|
77
|
+
it "reaches only those uids" do
|
78
|
+
req = stub_notification_post project_id, uids: [123, 456]
|
79
|
+
notification.deliver_to([123, 456])
|
80
|
+
expect(req).to have_been_made.once
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "with uids and tags" do
|
85
|
+
it "filters audience by uids and tags" do
|
86
|
+
req = stub_notification_post project_id, uids: [123, 456], tags: ['tag1']
|
87
|
+
notification.deliver_to([123, 456], tags: ['tag1'])
|
88
|
+
expect(req).to have_been_made.once
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "#broadcast" do
|
94
|
+
|
95
|
+
shared_examples 'notification params' do
|
96
|
+
it "includes the params in the request" do
|
97
|
+
req = stub_notification_post project_id, notification: notification_params
|
98
|
+
notification.broadcast
|
99
|
+
expect(req).to have_been_made.once
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context "a notification with just the required params" do
|
104
|
+
let(:notification_params) do
|
105
|
+
{ body: "Example message" }
|
106
|
+
end
|
107
|
+
let(:notification) { Pushpad::Notification.new body: notification_params[:body] }
|
108
|
+
include_examples 'notification params'
|
109
|
+
end
|
110
|
+
|
111
|
+
context "a notification with all the optional params" do
|
112
|
+
let(:notification_params) do
|
113
|
+
{
|
114
|
+
body: "Example message",
|
115
|
+
title: "Website Name",
|
116
|
+
target_url: "http://example.com",
|
117
|
+
icon_url: "http://example.com/assets/icon.png",
|
118
|
+
ttl: 604800,
|
119
|
+
require_interaction: true
|
120
|
+
}
|
121
|
+
end
|
122
|
+
let(:notification) { Pushpad::Notification.new notification_params }
|
123
|
+
include_examples 'notification params'
|
124
|
+
end
|
125
|
+
|
126
|
+
context "without params" do
|
127
|
+
it "reaches everyone" do
|
128
|
+
req = stub_notification_post project_id, {}
|
129
|
+
notification.broadcast
|
130
|
+
expect(req).to have_been_made.once
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context "with tags" do
|
135
|
+
it "filters audience by tags" do
|
136
|
+
req = stub_notification_post project_id, tags: ['tag1', 'tag2']
|
137
|
+
notification.broadcast tags: ['tag1', 'tag2']
|
138
|
+
expect(req).to have_been_made.once
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pushpad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pushpad
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2017-01-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: webmock
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
13
41
|
description:
|
14
42
|
email:
|
15
43
|
- support@pushpad.xyz
|
@@ -21,6 +49,8 @@ files:
|
|
21
49
|
- LICENSE.txt
|
22
50
|
- README.md
|
23
51
|
- lib/pushpad.rb
|
52
|
+
- spec/pushpad_spec.rb
|
53
|
+
- spec/spec_helper.rb
|
24
54
|
homepage: https://pushpad.xyz
|
25
55
|
licenses:
|
26
56
|
- MIT
|
@@ -31,18 +61,20 @@ require_paths:
|
|
31
61
|
- lib
|
32
62
|
required_ruby_version: !ruby/object:Gem::Requirement
|
33
63
|
requirements:
|
34
|
-
- -
|
64
|
+
- - ">="
|
35
65
|
- !ruby/object:Gem::Version
|
36
66
|
version: '0'
|
37
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
68
|
requirements:
|
39
|
-
- -
|
69
|
+
- - ">="
|
40
70
|
- !ruby/object:Gem::Version
|
41
71
|
version: '0'
|
42
72
|
requirements: []
|
43
73
|
rubyforge_project:
|
44
|
-
rubygems_version: 2.
|
74
|
+
rubygems_version: 2.4.5
|
45
75
|
signing_key:
|
46
76
|
specification_version: 4
|
47
77
|
summary: Web push notifications for Chrome, Firefox and Safari using Pushpad.
|
48
|
-
test_files:
|
78
|
+
test_files:
|
79
|
+
- spec/spec_helper.rb
|
80
|
+
- spec/pushpad_spec.rb
|