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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +28 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +11 -24
  5. data/.ruby-version +1 -0
  6. data/CONVENTIONS.md +19 -0
  7. data/Gemfile +1 -2
  8. data/Guardfile +3 -3
  9. data/README.md +236 -44
  10. data/Rakefile +9 -59
  11. data/exe/pushover +6 -5
  12. data/lib/pushover/client.rb +53 -0
  13. data/lib/pushover/glances.rb +86 -0
  14. data/lib/pushover/groups.rb +137 -0
  15. data/lib/pushover/licenses.rb +67 -0
  16. data/lib/pushover/limits.rb +18 -0
  17. data/lib/pushover/message.rb +29 -32
  18. data/lib/pushover/message_encryption.rb +48 -0
  19. data/lib/pushover/message_validator.rb +167 -0
  20. data/lib/pushover/messages.rb +20 -0
  21. data/lib/pushover/receipt.rb +23 -10
  22. data/lib/pushover/receipts.rb +60 -0
  23. data/lib/pushover/response.rb +8 -3
  24. data/lib/pushover/sounds.rb +18 -0
  25. data/lib/pushover/subscriptions.rb +48 -0
  26. data/lib/pushover/teams.rb +93 -0
  27. data/lib/pushover/users.rb +37 -0
  28. data/lib/pushover/version.rb +1 -1
  29. data/lib/pushover.rb +14 -1
  30. data/pushover.gemspec +9 -7
  31. data/spec/gem/specification_spec.rb +19 -0
  32. data/spec/pushover/client_spec.rb +149 -0
  33. data/spec/pushover/glances_spec.rb +206 -0
  34. data/spec/pushover/groups_spec.rb +486 -0
  35. data/spec/pushover/licenses_spec.rb +238 -0
  36. data/spec/pushover/limits_spec.rb +92 -0
  37. data/spec/pushover/message_spec.rb +146 -26
  38. data/spec/pushover/messages_spec.rb +199 -0
  39. data/spec/pushover/receipt_spec.rb +119 -11
  40. data/spec/pushover/receipts_spec.rb +232 -0
  41. data/spec/pushover/response_spec.rb +21 -16
  42. data/spec/pushover/sounds_spec.rb +92 -0
  43. data/spec/pushover/subscriptions_spec.rb +185 -0
  44. data/spec/pushover/teams_spec.rb +325 -0
  45. data/spec/pushover/users_spec.rb +115 -0
  46. data/spec/spec_helper.rb +2 -3
  47. metadata +54 -18
  48. 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.formatters = [ SimpleCov::Formatter::HTMLFormatter, SimpleCov::Formatter::Codecov]
15
- SimpleCov.start { add_filter "/spec/" }
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: 3.0.2
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernie Brodeur
8
- autorequire:
9
- bindir: bin
8
+ autorequire:
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2019-06-22 00:00:00.000000000 Z
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
- - add
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
- - ".travis.yml"
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
- post_install_message:
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: '0'
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.0.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: []
data/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.6.1
7
- before_install:
8
- - gem install --no-document bundler -v 2.0.1