pushover 3.0.2 → 4.0.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 +28 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +11 -24
- data/.ruby-version +1 -0
- data/CONVENTIONS.md +19 -0
- data/Gemfile +1 -2
- data/Guardfile +3 -3
- data/README.md +236 -44
- data/Rakefile +9 -59
- data/exe/pushover +6 -5
- data/lib/pushover/client.rb +53 -0
- data/lib/pushover/glances.rb +86 -0
- data/lib/pushover/groups.rb +137 -0
- data/lib/pushover/licenses.rb +67 -0
- data/lib/pushover/limits.rb +18 -0
- data/lib/pushover/message.rb +29 -32
- data/lib/pushover/message_encryption.rb +48 -0
- data/lib/pushover/message_validator.rb +167 -0
- data/lib/pushover/messages.rb +20 -0
- data/lib/pushover/receipt.rb +23 -10
- data/lib/pushover/receipts.rb +60 -0
- data/lib/pushover/response.rb +8 -3
- data/lib/pushover/sounds.rb +18 -0
- data/lib/pushover/subscriptions.rb +48 -0
- data/lib/pushover/teams.rb +93 -0
- data/lib/pushover/users.rb +37 -0
- data/lib/pushover/version.rb +1 -1
- data/lib/pushover.rb +14 -1
- data/pushover.gemspec +9 -7
- data/spec/gem/specification_spec.rb +19 -0
- data/spec/pushover/client_spec.rb +149 -0
- data/spec/pushover/glances_spec.rb +206 -0
- data/spec/pushover/groups_spec.rb +486 -0
- data/spec/pushover/licenses_spec.rb +238 -0
- data/spec/pushover/limits_spec.rb +92 -0
- data/spec/pushover/message_spec.rb +146 -26
- data/spec/pushover/messages_spec.rb +199 -0
- data/spec/pushover/receipt_spec.rb +119 -11
- data/spec/pushover/receipts_spec.rb +232 -0
- data/spec/pushover/response_spec.rb +21 -16
- data/spec/pushover/sounds_spec.rb +92 -0
- data/spec/pushover/subscriptions_spec.rb +185 -0
- data/spec/pushover/teams_spec.rb +325 -0
- data/spec/pushover/users_spec.rb +115 -0
- data/spec/spec_helper.rb +2 -3
- metadata +54 -18
- data/.travis.yml +0 -8
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Pushover::Users do
|
|
4
|
+
subject(:users) { Pushover::Client.new(token: 'app-token').users }
|
|
5
|
+
|
|
6
|
+
let(:user) { 'u' * 30 }
|
|
7
|
+
|
|
8
|
+
after { Excon.stubs.clear }
|
|
9
|
+
|
|
10
|
+
describe '#validate' do
|
|
11
|
+
context 'with a valid user and device' do
|
|
12
|
+
let(:request) { {} }
|
|
13
|
+
let(:response) { users.validate(user: user, device: 'phone-1') }
|
|
14
|
+
|
|
15
|
+
before do
|
|
16
|
+
captured_request = request
|
|
17
|
+
Excon.stub(method: :post, path: '/1/users/validate.json') do |params|
|
|
18
|
+
captured_request.replace(params)
|
|
19
|
+
{
|
|
20
|
+
body: Oj.dump(
|
|
21
|
+
'status' => 1, 'request' => 'request-id', 'devices' => ['phone-1'], 'licenses' => ['Android']
|
|
22
|
+
),
|
|
23
|
+
headers: { 'X-Limit-App-Remaining' => '9' },
|
|
24
|
+
status: 200
|
|
25
|
+
}
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'posts the token, user, and device as JSON' do
|
|
30
|
+
response
|
|
31
|
+
|
|
32
|
+
expect(Oj.strict_load(request[:body])).to eq(
|
|
33
|
+
'token' => 'app-token', 'user' => user, 'device' => 'phone-1'
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'uses the JSON content type' do
|
|
38
|
+
response
|
|
39
|
+
|
|
40
|
+
expect(request[:headers]).to include('Content-Type' => 'application/json')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'returns response metadata' do
|
|
44
|
+
expect(response).to have_attributes(status: 1, request: 'request-id')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'returns active devices and licensed platforms' do
|
|
48
|
+
expect(response.attributes).to eq('devices' => ['phone-1'], 'licenses' => ['Android'])
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'preserves response headers' do
|
|
52
|
+
expect(response.headers).to include('X-Limit-App-Remaining' => '9')
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context 'without a device' do
|
|
57
|
+
let(:request) { {} }
|
|
58
|
+
|
|
59
|
+
before do
|
|
60
|
+
captured_request = request
|
|
61
|
+
Excon.stub(method: :post, path: '/1/users/validate.json') do |params|
|
|
62
|
+
captured_request.replace(params)
|
|
63
|
+
{ body: Oj.dump('status' => 1, 'request' => 'request-id'), status: 200 }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
users.validate(user: user)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'omits the device from the JSON body' do
|
|
70
|
+
expect(Oj.strict_load(request[:body])).to eq('token' => 'app-token', 'user' => user)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
context 'when Pushover rejects the user' do
|
|
75
|
+
let(:response) { users.validate(user: user) }
|
|
76
|
+
|
|
77
|
+
before do
|
|
78
|
+
Excon.stub(method: :post, path: '/1/users/validate.json') do |_params|
|
|
79
|
+
{
|
|
80
|
+
body: Oj.dump('status' => 0, 'errors' => ['user identifier is invalid'], 'user' => 'invalid'),
|
|
81
|
+
status: 400
|
|
82
|
+
}
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'returns errors from the 4xx response' do
|
|
87
|
+
expect(response).to have_attributes(status: 0, errors: ['user identifier is invalid'])
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'preserves endpoint-specific error details' do
|
|
91
|
+
expect(response.attributes).to eq('user' => 'invalid')
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
[nil, ''].each do |invalid_user|
|
|
96
|
+
it 'requires a user or group identifier' do
|
|
97
|
+
expect { users.validate(user: invalid_user) }.to raise_error ArgumentError, /user must be supplied/
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
[123, 'u' * 29, 'u' * 31, "#{'u' * 29}-"].each do |invalid_user|
|
|
102
|
+
it 'requires a 30-character alphanumeric user or group identifier' do
|
|
103
|
+
expect { users.validate(user: invalid_user) }
|
|
104
|
+
.to raise_error ArgumentError, /user must be 30 alphanumeric characters/
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
['', 123, 'a' * 26, 'invalid device'].each do |invalid_device|
|
|
109
|
+
it 'validates an optional device name' do
|
|
110
|
+
expect { users.validate(user: user, device: invalid_device) }
|
|
111
|
+
.to raise_error ArgumentError, /device must be 1 to 25 letters, numbers, underscores, or hyphens/
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
require 'excon'
|
|
2
2
|
require 'simplecov'
|
|
3
|
-
require 'codecov'
|
|
4
3
|
Excon.defaults[:mock] = true
|
|
5
4
|
|
|
6
5
|
RSpec.configure do |config|
|
|
@@ -11,7 +10,7 @@ end
|
|
|
11
10
|
|
|
12
11
|
RSpec::Matchers.alias_matcher :return_a_kind_of, :be_a_kind_of
|
|
13
12
|
|
|
14
|
-
SimpleCov.
|
|
15
|
-
SimpleCov.start {
|
|
13
|
+
SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
|
|
14
|
+
SimpleCov.start { skip "/spec/" }
|
|
16
15
|
|
|
17
16
|
require 'pushover'
|
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pushover
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 4.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ernie Brodeur
|
|
8
|
-
autorequire:
|
|
9
|
-
bindir:
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-08-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: base64
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: excon
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -56,16 +70,18 @@ description: Api (and CLI) to interface with pushover.net
|
|
|
56
70
|
email:
|
|
57
71
|
- ebrodeur@ujami.net
|
|
58
72
|
executables:
|
|
59
|
-
-
|
|
73
|
+
- pushover
|
|
60
74
|
extensions: []
|
|
61
75
|
extra_rdoc_files: []
|
|
62
76
|
files:
|
|
63
77
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
|
64
78
|
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
|
79
|
+
- ".github/workflows/ci.yml"
|
|
65
80
|
- ".gitignore"
|
|
66
81
|
- ".rubocop.yml"
|
|
67
|
-
- ".
|
|
82
|
+
- ".ruby-version"
|
|
68
83
|
- CODE_OF_CONDUCT.md
|
|
84
|
+
- CONVENTIONS.md
|
|
69
85
|
- Gemfile
|
|
70
86
|
- Guardfile
|
|
71
87
|
- LICENSE
|
|
@@ -74,22 +90,48 @@ files:
|
|
|
74
90
|
- bin/add
|
|
75
91
|
- exe/pushover
|
|
76
92
|
- lib/pushover.rb
|
|
93
|
+
- lib/pushover/client.rb
|
|
94
|
+
- lib/pushover/glances.rb
|
|
95
|
+
- lib/pushover/groups.rb
|
|
96
|
+
- lib/pushover/licenses.rb
|
|
97
|
+
- lib/pushover/limits.rb
|
|
77
98
|
- lib/pushover/message.rb
|
|
99
|
+
- lib/pushover/message_encryption.rb
|
|
100
|
+
- lib/pushover/message_validator.rb
|
|
101
|
+
- lib/pushover/messages.rb
|
|
78
102
|
- lib/pushover/receipt.rb
|
|
103
|
+
- lib/pushover/receipts.rb
|
|
79
104
|
- lib/pushover/response.rb
|
|
105
|
+
- lib/pushover/sounds.rb
|
|
106
|
+
- lib/pushover/subscriptions.rb
|
|
107
|
+
- lib/pushover/teams.rb
|
|
108
|
+
- lib/pushover/users.rb
|
|
80
109
|
- lib/pushover/version.rb
|
|
81
110
|
- pushover.gemspec
|
|
111
|
+
- spec/gem/specification_spec.rb
|
|
82
112
|
- spec/lib/pushover_spec.rb
|
|
113
|
+
- spec/pushover/client_spec.rb
|
|
114
|
+
- spec/pushover/glances_spec.rb
|
|
115
|
+
- spec/pushover/groups_spec.rb
|
|
116
|
+
- spec/pushover/licenses_spec.rb
|
|
117
|
+
- spec/pushover/limits_spec.rb
|
|
83
118
|
- spec/pushover/message_spec.rb
|
|
119
|
+
- spec/pushover/messages_spec.rb
|
|
84
120
|
- spec/pushover/receipt_spec.rb
|
|
121
|
+
- spec/pushover/receipts_spec.rb
|
|
85
122
|
- spec/pushover/response_spec.rb
|
|
123
|
+
- spec/pushover/sounds_spec.rb
|
|
124
|
+
- spec/pushover/subscriptions_spec.rb
|
|
125
|
+
- spec/pushover/teams_spec.rb
|
|
126
|
+
- spec/pushover/users_spec.rb
|
|
86
127
|
- spec/spec_helper.rb
|
|
87
128
|
- spec/vscode_formatter.rb
|
|
88
129
|
homepage: https://github.com/erniebrodeur/pushover
|
|
89
130
|
licenses:
|
|
90
131
|
- MIT
|
|
91
|
-
metadata:
|
|
92
|
-
|
|
132
|
+
metadata:
|
|
133
|
+
rubygems_mfa_required: 'true'
|
|
134
|
+
post_install_message:
|
|
93
135
|
rdoc_options: []
|
|
94
136
|
require_paths:
|
|
95
137
|
- lib
|
|
@@ -97,21 +139,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
97
139
|
requirements:
|
|
98
140
|
- - ">="
|
|
99
141
|
- !ruby/object:Gem::Version
|
|
100
|
-
version:
|
|
142
|
+
version: 3.3.0
|
|
101
143
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
144
|
requirements:
|
|
103
145
|
- - ">="
|
|
104
146
|
- !ruby/object:Gem::Version
|
|
105
147
|
version: '0'
|
|
106
148
|
requirements: []
|
|
107
|
-
rubygems_version: 3.
|
|
108
|
-
signing_key:
|
|
149
|
+
rubygems_version: 3.5.3
|
|
150
|
+
signing_key:
|
|
109
151
|
specification_version: 4
|
|
110
152
|
summary: This spec provides both an API and CLI interface to pushover.net.
|
|
111
|
-
test_files:
|
|
112
|
-
- spec/lib/pushover_spec.rb
|
|
113
|
-
- spec/pushover/message_spec.rb
|
|
114
|
-
- spec/pushover/receipt_spec.rb
|
|
115
|
-
- spec/pushover/response_spec.rb
|
|
116
|
-
- spec/spec_helper.rb
|
|
117
|
-
- spec/vscode_formatter.rb
|
|
153
|
+
test_files: []
|