rpush 3.2.3 → 3.2.4
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 +5 -5
- data/CHANGELOG.md +17 -0
- data/README.md +35 -0
- data/lib/generators/rpush_migration_generator.rb +1 -0
- data/lib/generators/templates/rpush_3_2_4_updates.rb +9 -0
- data/lib/rpush/daemon/gcm/delivery.rb +15 -1
- data/lib/rpush/version.rb +1 -1
- data/spec/support/active_record_setup.rb +3 -1
- data/spec/unit/daemon/gcm/delivery_spec.rb +56 -0
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 034d8de0f4696f840692ef88e5646af49cd424603ef0417be06312a58a61a640
|
4
|
+
data.tar.gz: 3bcadf28d715b047c1f1b0f6b60326b58d365eded8ddaf1e1d78c5b5f81c39a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 937b1b6b68cc949bf6b28f10ca4c3ca78ec0811a87f4ff3bd926a6318d26042bea787ab067cb4c04801b35c7183180dafc474e1df22d64636035f8c0d7e8d047
|
7
|
+
data.tar.gz: 971f4544764419a4a08b8cdea97d58126d759deb145cc76567c4465bbf4db1154ef6bc46da04c729cc5bd3cedf709c71b93ee6269311179f32c4034780ab2f5a
|
data/CHANGELOG.md
CHANGED
@@ -12,6 +12,23 @@
|
|
12
12
|
|
13
13
|
- None
|
14
14
|
|
15
|
+
## 3.2.4 (2018-10-25)
|
16
|
+
|
17
|
+
When upgrading, don't forget to run `bundle exec rpush init` to get all the latest migrations.
|
18
|
+
|
19
|
+
### Changes
|
20
|
+
|
21
|
+
- Relaxed JWT dependency version [#447](https://github.com/rpush/rpush/pull/447) (by [@sposin](https://github.com/sposin)).
|
22
|
+
|
23
|
+
### Docs
|
24
|
+
|
25
|
+
- Better documentation for running tests when developing Rpush [#458](https://github.com/rpush/rpush/pull/458) (by [@jsantos](https://github.com/jsantos)).
|
26
|
+
|
27
|
+
### Fixed
|
28
|
+
|
29
|
+
- Change `apn_key` column type from string to text [#455](https://github.com/rpush/rpush/pull/455) (by [sonxurxo](https://github.com/sonxurxo)).
|
30
|
+
- Retry all GCM 5xx errors [#456](https://github.com/rpush/rpush/pull/456) (by [@rofreg](https://github.com/rofreg)).
|
31
|
+
|
15
32
|
## 3.2.3 (2018-07-12)
|
16
33
|
|
17
34
|
### Changes
|
data/README.md
CHANGED
@@ -347,6 +347,41 @@ You should run `rpush init` after upgrading Rpush to check for configuration and
|
|
347
347
|
|
348
348
|
### Contributing
|
349
349
|
|
350
|
+
#### Running Tests
|
351
|
+
|
352
|
+
Rpush uses [Appraisal](https://github.com/thoughtbot/appraisal) to run tests against multiple versions of Ruby on Rails. This helps making sure that Rpush performs correctly with multiple Rails versions.
|
353
|
+
|
354
|
+
Rpush also uses RSpec for its tests.
|
355
|
+
|
356
|
+
##### Bootstrapping your test suite:
|
357
|
+
|
358
|
+
First, we need to setup a test database, `rpush_test`.
|
359
|
+
|
360
|
+
E.g. (postgres): `psql -c 'create database rpush_test;' -U postgres >/dev/null`
|
361
|
+
|
362
|
+
```
|
363
|
+
bundle install
|
364
|
+
bundle exec appraisal install
|
365
|
+
```
|
366
|
+
This will install all the required gems that requires to test against each version of Rails, which defined in `gemfiles/*.gemfile`.
|
367
|
+
|
368
|
+
##### To run a full test suite:
|
369
|
+
|
370
|
+
```
|
371
|
+
bundle exec appraisal rake
|
372
|
+
```
|
373
|
+
This will run RSpec against all versions of Rails.
|
374
|
+
|
375
|
+
##### To run a single test
|
376
|
+
|
377
|
+
You need to specify a `BUNDLE_GEMFILE` pointing to the gemfile before running the normal test command:
|
378
|
+
|
379
|
+
```
|
380
|
+
BUNDLE_GEMFILE=gemfiles/rails_5.2.gemfile rspec spec/unit/apns_feedback_spec.rb
|
381
|
+
```
|
382
|
+
|
383
|
+
##### Multiple database adapter support
|
384
|
+
|
350
385
|
When running specs, please note that the ActiveRecord adapter can be changed by setting the `ADAPTER` environment variable. For example: `ADAPTER=postgresql rake`.
|
351
386
|
|
352
387
|
Available adapters for testing are `postgresql`, `jdbcpostgresql`, `mysql2`, `jdbcmysql`, `jdbch2`, and `sqlite3`.
|
@@ -47,6 +47,7 @@ class RpushMigrationGenerator < Rails::Generators::Base
|
|
47
47
|
add_rpush_migration('rpush_3_1_0_add_pushy')
|
48
48
|
add_rpush_migration('rpush_3_1_1_updates')
|
49
49
|
add_rpush_migration('rpush_3_2_0_add_apns_p8')
|
50
|
+
add_rpush_migration('rpush_3_2_4_updates')
|
50
51
|
end
|
51
52
|
|
52
53
|
protected
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Rpush324Updates < ActiveRecord::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[5.0] : ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
change_column :rpush_apps, :apn_key, :text, null: true
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.down
|
7
|
+
change_column :rpush_apps, :apn_key, :string, null: true
|
8
|
+
end
|
9
|
+
end
|
@@ -7,7 +7,7 @@ module Rpush
|
|
7
7
|
|
8
8
|
host = 'https://fcm.googleapis.com'
|
9
9
|
FCM_URI = URI.parse("#{host}/fcm/send")
|
10
|
-
UNAVAILABLE_STATES = %w(Unavailable InternalServerError)
|
10
|
+
UNAVAILABLE_STATES = %w(Unavailable BadGateway InternalServerError)
|
11
11
|
INVALID_REGISTRATION_ID_STATES = %w(InvalidRegistration MismatchSenderId NotRegistered InvalidPackageName)
|
12
12
|
|
13
13
|
def initialize(app, http, notification, batch)
|
@@ -41,8 +41,12 @@ module Rpush
|
|
41
41
|
unauthorized
|
42
42
|
when 500
|
43
43
|
internal_server_error(response)
|
44
|
+
when 502
|
45
|
+
bad_gateway(response)
|
44
46
|
when 503
|
45
47
|
service_unavailable(response)
|
48
|
+
when 500..599
|
49
|
+
other_5xx_error(response)
|
46
50
|
else
|
47
51
|
fail Rpush::DeliveryError.new(response.code.to_i, @notification.id, Rpush::Daemon::HTTP_STATUS_CODES[response.code.to_i])
|
48
52
|
end
|
@@ -119,11 +123,21 @@ module Rpush
|
|
119
123
|
log_warn("GCM responded with an Internal Error. " + retry_message)
|
120
124
|
end
|
121
125
|
|
126
|
+
def bad_gateway(response)
|
127
|
+
retry_delivery(@notification, response)
|
128
|
+
log_warn("GCM responded with a Bad Gateway Error. " + retry_message)
|
129
|
+
end
|
130
|
+
|
122
131
|
def service_unavailable(response)
|
123
132
|
retry_delivery(@notification, response)
|
124
133
|
log_warn("GCM responded with an Service Unavailable Error. " + retry_message)
|
125
134
|
end
|
126
135
|
|
136
|
+
def other_5xx_error(response)
|
137
|
+
retry_delivery(@notification, response)
|
138
|
+
log_warn("GCM responded with a 5xx Error. " + retry_message)
|
139
|
+
end
|
140
|
+
|
127
141
|
def deliver_after_header(response)
|
128
142
|
Rpush::Daemon::RetryHeaderParser.parse(response.header['retry-after'])
|
129
143
|
end
|
data/lib/rpush/version.rb
CHANGED
@@ -36,6 +36,7 @@ require 'generators/templates/rpush_3_0_1_updates'
|
|
36
36
|
require 'generators/templates/rpush_3_1_0_add_pushy'
|
37
37
|
require 'generators/templates/rpush_3_1_1_updates'
|
38
38
|
require 'generators/templates/rpush_3_2_0_add_apns_p8'
|
39
|
+
require 'generators/templates/rpush_3_2_4_updates'
|
39
40
|
|
40
41
|
migrations = [
|
41
42
|
AddRpush,
|
@@ -47,7 +48,8 @@ migrations = [
|
|
47
48
|
Rpush301Updates,
|
48
49
|
Rpush310AddPushy,
|
49
50
|
Rpush311Updates,
|
50
|
-
Rpush320AddApnsP8
|
51
|
+
Rpush320AddApnsP8,
|
52
|
+
Rpush324Updates
|
51
53
|
]
|
52
54
|
|
53
55
|
unless ENV['TRAVIS']
|
@@ -282,6 +282,34 @@ describe Rpush::Daemon::Gcm::Delivery do
|
|
282
282
|
end
|
283
283
|
end
|
284
284
|
|
285
|
+
describe 'a 502 response' do
|
286
|
+
before { allow(response).to receive_messages(code: 502) }
|
287
|
+
|
288
|
+
it 'logs a warning that the notification will be retried.' do
|
289
|
+
notification.retries = 1
|
290
|
+
notification.deliver_after = now + 2
|
291
|
+
expect(logger).to receive(:warn).with("[MyApp] GCM responded with a Bad Gateway Error. Notification #{notification.id} will be retried after 2012-10-14 00:00:02 (retry 1).")
|
292
|
+
perform
|
293
|
+
end
|
294
|
+
|
295
|
+
it 'respects an integer Retry-After header' do
|
296
|
+
allow(response).to receive_messages(header: { 'retry-after' => 10 })
|
297
|
+
expect(delivery).to receive(:mark_retryable).with(notification, now + 10.seconds)
|
298
|
+
perform
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'respects a HTTP-date Retry-After header' do
|
302
|
+
allow(response).to receive_messages(header: { 'retry-after' => 'Wed, 03 Oct 2012 20:55:11 GMT' })
|
303
|
+
expect(delivery).to receive(:mark_retryable).with(notification, Time.parse('Wed, 03 Oct 2012 20:55:11 GMT'))
|
304
|
+
perform
|
305
|
+
end
|
306
|
+
|
307
|
+
it 'defaults to exponential back-off if the Retry-After header is not present' do
|
308
|
+
expect(delivery).to receive(:mark_retryable).with(notification, now + 2**1)
|
309
|
+
perform
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
285
313
|
describe 'a 500 response' do
|
286
314
|
before do
|
287
315
|
notification.update_attribute(:retries, 2)
|
@@ -301,6 +329,34 @@ describe Rpush::Daemon::Gcm::Delivery do
|
|
301
329
|
end
|
302
330
|
end
|
303
331
|
|
332
|
+
describe 'a 5xx response' do
|
333
|
+
before { allow(response).to receive_messages(code: 555) }
|
334
|
+
|
335
|
+
it 'logs a warning that the notification will be retried.' do
|
336
|
+
notification.retries = 1
|
337
|
+
notification.deliver_after = now + 2
|
338
|
+
expect(logger).to receive(:warn).with("[MyApp] GCM responded with a 5xx Error. Notification #{notification.id} will be retried after 2012-10-14 00:00:02 (retry 1).")
|
339
|
+
perform
|
340
|
+
end
|
341
|
+
|
342
|
+
it 'respects an integer Retry-After header' do
|
343
|
+
allow(response).to receive_messages(header: { 'retry-after' => 10 })
|
344
|
+
expect(delivery).to receive(:mark_retryable).with(notification, now + 10.seconds)
|
345
|
+
perform
|
346
|
+
end
|
347
|
+
|
348
|
+
it 'respects a HTTP-date Retry-After header' do
|
349
|
+
allow(response).to receive_messages(header: { 'retry-after' => 'Wed, 03 Oct 2012 20:55:11 GMT' })
|
350
|
+
expect(delivery).to receive(:mark_retryable).with(notification, Time.parse('Wed, 03 Oct 2012 20:55:11 GMT'))
|
351
|
+
perform
|
352
|
+
end
|
353
|
+
|
354
|
+
it 'defaults to exponential back-off if the Retry-After header is not present' do
|
355
|
+
expect(delivery).to receive(:mark_retryable).with(notification, now + 2**1)
|
356
|
+
perform
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
304
360
|
describe 'a 401 response' do
|
305
361
|
before { allow(response).to receive_messages(code: 401) }
|
306
362
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rpush
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Leitch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: jwt
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 1.5.6
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 1.5.6
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: activesupport
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -387,6 +387,7 @@ files:
|
|
387
387
|
- lib/generators/templates/rpush_3_1_0_add_pushy.rb
|
388
388
|
- lib/generators/templates/rpush_3_1_1_updates.rb
|
389
389
|
- lib/generators/templates/rpush_3_2_0_add_apns_p8.rb
|
390
|
+
- lib/generators/templates/rpush_3_2_4_updates.rb
|
390
391
|
- lib/rpush.rb
|
391
392
|
- lib/rpush/apns_feedback.rb
|
392
393
|
- lib/rpush/cli.rb
|
@@ -623,7 +624,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
623
624
|
version: '0'
|
624
625
|
requirements: []
|
625
626
|
rubyforge_project:
|
626
|
-
rubygems_version: 2.6
|
627
|
+
rubygems_version: 2.7.6
|
627
628
|
signing_key:
|
628
629
|
specification_version: 4
|
629
630
|
summary: The push notification service for Ruby.
|