rpush 7.0.0 → 8.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -1
- data/README.md +38 -1
- data/lib/generators/rpush_migration_generator.rb +1 -0
- data/lib/generators/templates/rpush.rb +17 -0
- data/lib/generators/templates/rpush_7_1_0_updates.rb +12 -0
- data/lib/rpush/client/active_model/apns/notification.rb +0 -4
- data/lib/rpush/client/active_model/fcm/app.rb +20 -0
- data/lib/rpush/client/active_model/fcm/expiry_collapse_key_mutual_inclusion_validator.rb +14 -0
- data/lib/rpush/client/active_model/fcm/notification.rb +129 -0
- data/lib/rpush/client/active_model/fcm/notification_keys_in_allowed_list_validator.rb +20 -0
- data/lib/rpush/client/active_model.rb +5 -0
- data/lib/rpush/client/active_record/fcm/app.rb +11 -0
- data/lib/rpush/client/active_record/fcm/notification.rb +11 -0
- data/lib/rpush/client/active_record.rb +3 -0
- data/lib/rpush/client/redis/app.rb +2 -0
- data/lib/rpush/client/redis/fcm/app.rb +11 -0
- data/lib/rpush/client/redis/fcm/notification.rb +11 -0
- data/lib/rpush/client/redis.rb +3 -0
- data/lib/rpush/configuration.rb +1 -1
- data/lib/rpush/daemon/apns2/delivery.rb +0 -1
- data/lib/rpush/daemon/apnsp8/delivery.rb +0 -1
- data/lib/rpush/daemon/fcm/delivery.rb +162 -0
- data/lib/rpush/daemon/fcm.rb +9 -0
- data/lib/rpush/daemon/gcm/delivery.rb +1 -1
- data/lib/rpush/daemon/google_credential_cache.rb +41 -0
- data/lib/rpush/daemon/store/active_record.rb +15 -0
- data/lib/rpush/daemon/store/interface.rb +2 -2
- data/lib/rpush/daemon/store/redis.rb +19 -6
- data/lib/rpush/daemon/webpush/delivery.rb +2 -2
- data/lib/rpush/daemon.rb +4 -0
- data/lib/rpush/reflection_collection.rb +3 -2
- data/lib/rpush/version.rb +1 -1
- data/lib/rpush.rb +1 -0
- data/spec/functional/apns2_spec.rb +2 -6
- data/spec/functional/fcm_priority_spec.rb +46 -0
- data/spec/functional/fcm_spec.rb +77 -0
- data/spec/functional_spec_helper.rb +1 -1
- data/spec/spec_helper.rb +2 -1
- data/spec/support/active_record_setup.rb +3 -1
- data/spec/unit/client/active_record/fcm/app_spec.rb +6 -0
- data/spec/unit/client/active_record/fcm/notification_spec.rb +10 -0
- data/spec/unit/client/redis/fcm/app_spec.rb +5 -0
- data/spec/unit/client/redis/fcm/notification_spec.rb +5 -0
- data/spec/unit/client/shared/apns/notification.rb +0 -15
- data/spec/unit/client/shared/fcm/app.rb +4 -0
- data/spec/unit/client/shared/fcm/notification.rb +92 -0
- data/spec/unit/configuration_spec.rb +1 -1
- data/spec/unit/daemon/apnsp8/delivery_spec.rb +1 -1
- data/spec/unit/daemon/fcm/delivery_spec.rb +127 -0
- data/spec/unit/daemon/service_config_methods_spec.rb +1 -1
- data/spec/unit/daemon/tcp_connection_spec.rb +8 -7
- data/spec/unit/daemon/wns/delivery_spec.rb +1 -1
- data/spec/unit/logger_spec.rb +1 -1
- data/spec/unit_spec_helper.rb +1 -1
- metadata +81 -17
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'unit_spec_helper'
|
2
|
+
|
3
|
+
describe Rpush::Daemon::Fcm::Delivery do
|
4
|
+
let(:app) { Rpush::Fcm::App.create!(name: 'MyApp', firebase_project_id: 'abc123', json_key:'{}') }
|
5
|
+
let(:notification) { Rpush::Fcm::Notification.create!(app: app, device_token: 'xyz', deliver_after: Time.now) }
|
6
|
+
let(:logger) { double(error: nil, info: nil, warn: nil) }
|
7
|
+
let(:response) { double(code: 200, header: {}) }
|
8
|
+
let(:http) { double(shutdown: nil, request: response) }
|
9
|
+
let(:now) { Time.parse('2012-10-14 00:00:00') }
|
10
|
+
let(:batch) { double(mark_failed: nil, mark_delivered: nil, mark_retryable: nil, notification_processed: nil) }
|
11
|
+
let(:delivery) { Rpush::Daemon::Fcm::Delivery.new(app, http, notification, batch) }
|
12
|
+
let(:store) { double(create_fcm_notification: double(id: 2)) }
|
13
|
+
|
14
|
+
def perform
|
15
|
+
delivery.perform
|
16
|
+
end
|
17
|
+
|
18
|
+
def perform_with_rescue
|
19
|
+
expect { perform }.to raise_error(StandardError)
|
20
|
+
end
|
21
|
+
|
22
|
+
before do
|
23
|
+
allow(delivery).to receive_messages(reflect: nil)
|
24
|
+
allow(Rpush::Daemon).to receive_messages(store: store)
|
25
|
+
allow(Time).to receive_messages(now: now)
|
26
|
+
allow(Rpush).to receive_messages(logger: logger)
|
27
|
+
allow_any_instance_of(Rpush::Daemon::Fcm::Delivery).to receive_messages(obtain_access_token: "access_token")
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'a 200 response' do
|
31
|
+
before do
|
32
|
+
allow(response).to receive_messages(code: 200)
|
33
|
+
allow(response).to receive_messages(body: nil)
|
34
|
+
allow(notification).to receive_messages(device_token: '1')
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'reflects on ID which successfully received the notification' do
|
38
|
+
expect(delivery).to receive(:reflect).with(:fcm_delivered_to_recipient, notification)
|
39
|
+
perform
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'marks the notification as delivered' do
|
43
|
+
expect(delivery).to receive(:mark_delivered)
|
44
|
+
perform
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'logs that the notification was delivered' do
|
48
|
+
expect(logger).to receive(:info).with("[MyApp] #{notification.id} sent to 1")
|
49
|
+
perform
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'all deliveries failed with Unavailable or InternalServerError 503' do
|
54
|
+
before do
|
55
|
+
allow(notification).to receive_messages(device_token: '1')
|
56
|
+
allow(response).to receive_messages(code: 503, body: nil)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'reflects on any IDs which failed to receive the notification' do
|
60
|
+
pending("Determine the correct cases where FCM should send fcm_failed_to_recipient")
|
61
|
+
expect(delivery).to receive(:reflect).with(:fcm_failed_to_recipient, notification)
|
62
|
+
perform
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'retries the notification respecting the Retry-After header' do
|
66
|
+
allow(response).to receive_messages(header: { 'retry-after' => 10 })
|
67
|
+
expect(delivery).to receive(:mark_retryable).with(notification, now + 10.seconds)
|
68
|
+
perform
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'retries the notification using exponential back-off if the Retry-After header is not present' do
|
72
|
+
expect(delivery).to receive(:mark_retryable).with(notification, now + 2)
|
73
|
+
perform
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'does not mark the notification as failed' do
|
77
|
+
expect(delivery).not_to receive(:mark_failed)
|
78
|
+
perform
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'logs that the notification will be retried' do
|
82
|
+
notification.retries = 1
|
83
|
+
notification.deliver_after = now + 2
|
84
|
+
expect(Rpush.logger).to receive(:warn).with("[MyApp] FCM responded with an Service Unavailable Error. Notification #{notification.id} will be retried after 2012-10-14 00:00:02 (retry 1).")
|
85
|
+
perform
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe 'all deliveries failed with Unavailable or InternalServerError 500' do
|
90
|
+
before do
|
91
|
+
allow(notification).to receive_messages(device_token: '1')
|
92
|
+
allow(response).to receive_messages(code: 500, body: nil)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'logs a warning that the notification has been re-queued.' do
|
96
|
+
notification.retries = 3
|
97
|
+
notification.deliver_after = now + 2**3
|
98
|
+
expect(Rpush.logger).to receive(:warn).with("[MyApp] FCM responded with an Internal Error. Notification #{notification.id} will be retried after #{(now + 2**3).strftime('%Y-%m-%d %H:%M:%S')} (retry 3).")
|
99
|
+
perform
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'retries the notification in accordance with the exponential back-off strategy.' do
|
103
|
+
notification.update_attribute(:retries, 2)
|
104
|
+
expect(delivery).to receive(:mark_retryable).with(notification, now + 2**3)
|
105
|
+
perform
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe 'all deliveries failed with invalid token' do
|
110
|
+
before do
|
111
|
+
allow(notification).to receive_messages(device_token: '1')
|
112
|
+
allow(response).to receive_messages(code: 404, body: { error: { status: 'NOT_FOUND', message: 'Requested entity was not found.' } }.to_json)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'reflects on invalid IDs' do
|
116
|
+
expect(delivery).to receive(:reflect).with(:fcm_invalid_device_token, app, "NOT_FOUND: Requested entity was not found.", '1')
|
117
|
+
perform_with_rescue
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'marks a notification as failed if any ids are invalid' do
|
121
|
+
expect(delivery).to receive(:mark_failed)
|
122
|
+
expect(delivery).not_to receive(:mark_retryable)
|
123
|
+
expect(store).not_to receive(:create_fcm_notification)
|
124
|
+
perform_with_rescue
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -23,7 +23,7 @@ describe Rpush::Daemon::ServiceConfigMethods do
|
|
23
23
|
ServiceConfigMethodsSpec.dispatcher :http, an: :option
|
24
24
|
app = double
|
25
25
|
dispatcher = double
|
26
|
-
expect(Rpush::Daemon::Dispatcher::Http).to receive(:new).with(app, ServiceConfigMethodsSpec::Delivery, an: :option).and_return(dispatcher)
|
26
|
+
expect(Rpush::Daemon::Dispatcher::Http).to receive(:new).with(app, ServiceConfigMethodsSpec::Delivery, {an: :option}).and_return(dispatcher)
|
27
27
|
expect(ServiceConfigMethodsSpec.new_dispatcher(app)).to eq dispatcher
|
28
28
|
end
|
29
29
|
|
@@ -15,6 +15,7 @@ describe Rpush::Daemon::TcpConnection do
|
|
15
15
|
let(:connection) { Rpush::Daemon::TcpConnection.new(app, host, port) }
|
16
16
|
|
17
17
|
before do
|
18
|
+
allow(x509_certificate).to receive(:not_after).and_return(Time.now + 1.year)
|
18
19
|
allow(OpenSSL::SSL::SSLContext).to receive_messages(new: ssl_context)
|
19
20
|
allow(OpenSSL::PKey::RSA).to receive_messages(new: rsa_key)
|
20
21
|
allow(OpenSSL::X509::Certificate).to receive_messages(new: x509_certificate)
|
@@ -83,31 +84,31 @@ describe Rpush::Daemon::TcpConnection do
|
|
83
84
|
|
84
85
|
describe 'certificate expiry' do
|
85
86
|
it 'reflects if the certificate will expire soon' do
|
86
|
-
cert =
|
87
|
+
cert = x509_certificate
|
87
88
|
expect(connection).to receive(:reflect).with(:ssl_certificate_will_expire, app, cert.not_after)
|
88
89
|
Timecop.freeze(cert.not_after - 3.days) { connection.connect }
|
89
90
|
end
|
90
91
|
|
91
92
|
it 'logs that the certificate will expire soon' do
|
92
|
-
cert =
|
93
|
-
expect(logger).to receive(:warn).with("[#{app.name}] Certificate will expire at
|
93
|
+
cert = x509_certificate
|
94
|
+
expect(logger).to receive(:warn).with("[#{app.name}] Certificate will expire at #{cert.not_after.utc}.")
|
94
95
|
Timecop.freeze(cert.not_after - 3.days) { connection.connect }
|
95
96
|
end
|
96
97
|
|
97
98
|
it 'does not reflect if the certificate will not expire soon' do
|
98
|
-
cert =
|
99
|
+
cert = x509_certificate
|
99
100
|
expect(connection).not_to receive(:reflect).with(:ssl_certificate_will_expire, app, kind_of(Time))
|
100
101
|
Timecop.freeze(cert.not_after - 2.months) { connection.connect }
|
101
102
|
end
|
102
103
|
|
103
104
|
it 'logs that the certificate has expired' do
|
104
|
-
cert =
|
105
|
-
expect(logger).to receive(:error).with("[#{app.name}] Certificate expired at
|
105
|
+
cert = x509_certificate
|
106
|
+
expect(logger).to receive(:error).with("[#{app.name}] Certificate expired at #{cert.not_after.utc}.")
|
106
107
|
Timecop.freeze(cert.not_after + 1.day) { connection.connect rescue Rpush::CertificateExpiredError }
|
107
108
|
end
|
108
109
|
|
109
110
|
it 'raises an error if the certificate has expired' do
|
110
|
-
cert =
|
111
|
+
cert = x509_certificate
|
111
112
|
Timecop.freeze(cert.not_after + 1.day) do
|
112
113
|
expect { connection.connect }.to raise_error(Rpush::CertificateExpiredError)
|
113
114
|
end
|
@@ -50,7 +50,7 @@ describe Rpush::Daemon::Wns::Delivery do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
it 'set the access token for the app' do
|
53
|
-
expect(delivery).to receive(:update_access_token).with("access_token" => "dummy_access_token", "expires_in" => 60)
|
53
|
+
expect(delivery).to receive(:update_access_token).with({"access_token" => "dummy_access_token", "expires_in" => 60})
|
54
54
|
expect(store).to receive(:update_app).with app
|
55
55
|
perform
|
56
56
|
end
|
data/spec/unit/logger_spec.rb
CHANGED
@@ -92,7 +92,7 @@ describe Rpush::Logger do
|
|
92
92
|
now = Time.now
|
93
93
|
allow(Time).to receive(:now).and_return(now)
|
94
94
|
logger = Rpush::Logger.new
|
95
|
-
expect(@logger).to receive(:info).with(/#{Regexp.escape("[#{now.
|
95
|
+
expect(@logger).to receive(:info).with(/#{Regexp.escape("[#{now.to_formatted_s(:db)}]")}/)
|
96
96
|
logger.info("blah")
|
97
97
|
end
|
98
98
|
|
data/spec/unit_spec_helper.rb
CHANGED
@@ -12,7 +12,7 @@ RSpec.configure do |config|
|
|
12
12
|
config.before(:each) do
|
13
13
|
Modis.with_connection do |redis|
|
14
14
|
redis.keys('rpush:*').each { |key| redis.del(key) }
|
15
|
-
end if redis?
|
15
|
+
end if redis? && unit_example?(self.class.metadata)
|
16
16
|
|
17
17
|
if active_record? && unit_example?(self.class.metadata)
|
18
18
|
connection = ActiveRecord::Base.connection
|
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:
|
4
|
+
version: 8.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Leitch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -79,6 +79,9 @@ dependencies:
|
|
79
79
|
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
81
|
version: '5.2'
|
82
|
+
- - "<"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 7.1.0
|
82
85
|
type: :runtime
|
83
86
|
prerelease: false
|
84
87
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -86,6 +89,9 @@ dependencies:
|
|
86
89
|
- - ">="
|
87
90
|
- !ruby/object:Gem::Version
|
88
91
|
version: '5.2'
|
92
|
+
- - "<"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 7.1.0
|
89
95
|
- !ruby/object:Gem::Dependency
|
90
96
|
name: thor
|
91
97
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,19 +141,47 @@ dependencies:
|
|
135
141
|
- !ruby/object:Gem::Version
|
136
142
|
version: '0'
|
137
143
|
- !ruby/object:Gem::Dependency
|
138
|
-
name:
|
144
|
+
name: web-push
|
139
145
|
requirement: !ruby/object:Gem::Requirement
|
140
146
|
requirements:
|
141
|
-
- - "
|
147
|
+
- - ">="
|
142
148
|
- !ruby/object:Gem::Version
|
143
|
-
version: '
|
149
|
+
version: '0'
|
144
150
|
type: :runtime
|
145
151
|
prerelease: false
|
146
152
|
version_requirements: !ruby/object:Gem::Requirement
|
147
153
|
requirements:
|
148
|
-
- - "
|
154
|
+
- - ">="
|
149
155
|
- !ruby/object:Gem::Version
|
150
|
-
version: '
|
156
|
+
version: '0'
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: googleauth
|
159
|
+
requirement: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
type: :runtime
|
165
|
+
prerelease: false
|
166
|
+
version_requirements: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '0'
|
171
|
+
- !ruby/object:Gem::Dependency
|
172
|
+
name: debug
|
173
|
+
requirement: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
type: :development
|
179
|
+
prerelease: false
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - ">="
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0'
|
151
185
|
- !ruby/object:Gem::Dependency
|
152
186
|
name: rake
|
153
187
|
requirement: !ruby/object:Gem::Requirement
|
@@ -166,16 +200,16 @@ dependencies:
|
|
166
200
|
name: rspec
|
167
201
|
requirement: !ruby/object:Gem::Requirement
|
168
202
|
requirements:
|
169
|
-
- - "
|
203
|
+
- - ">="
|
170
204
|
- !ruby/object:Gem::Version
|
171
|
-
version:
|
205
|
+
version: '0'
|
172
206
|
type: :development
|
173
207
|
prerelease: false
|
174
208
|
version_requirements: !ruby/object:Gem::Requirement
|
175
209
|
requirements:
|
176
|
-
- - "
|
210
|
+
- - ">="
|
177
211
|
- !ruby/object:Gem::Version
|
178
|
-
version:
|
212
|
+
version: '0'
|
179
213
|
- !ruby/object:Gem::Dependency
|
180
214
|
name: database_cleaner
|
181
215
|
requirement: !ruby/object:Gem::Requirement
|
@@ -264,16 +298,16 @@ dependencies:
|
|
264
298
|
name: codeclimate-test-reporter
|
265
299
|
requirement: !ruby/object:Gem::Requirement
|
266
300
|
requirements:
|
267
|
-
- -
|
301
|
+
- - '='
|
268
302
|
- !ruby/object:Gem::Version
|
269
|
-
version:
|
303
|
+
version: 1.0.7
|
270
304
|
type: :development
|
271
305
|
prerelease: false
|
272
306
|
version_requirements: !ruby/object:Gem::Requirement
|
273
307
|
requirements:
|
274
|
-
- -
|
308
|
+
- - '='
|
275
309
|
- !ruby/object:Gem::Version
|
276
|
-
version:
|
310
|
+
version: 1.0.7
|
277
311
|
- !ruby/object:Gem::Dependency
|
278
312
|
name: simplecov
|
279
313
|
requirement: !ruby/object:Gem::Requirement
|
@@ -413,6 +447,7 @@ files:
|
|
413
447
|
- lib/generators/templates/rpush_4_1_0_updates.rb
|
414
448
|
- lib/generators/templates/rpush_4_1_1_updates.rb
|
415
449
|
- lib/generators/templates/rpush_4_2_0_updates.rb
|
450
|
+
- lib/generators/templates/rpush_7_1_0_updates.rb
|
416
451
|
- lib/rpush.rb
|
417
452
|
- lib/rpush/apns_feedback.rb
|
418
453
|
- lib/rpush/cli.rb
|
@@ -429,6 +464,10 @@ files:
|
|
429
464
|
- lib/rpush/client/active_model/apnsp8/app.rb
|
430
465
|
- lib/rpush/client/active_model/apnsp8/notification.rb
|
431
466
|
- lib/rpush/client/active_model/certificate_private_key_validator.rb
|
467
|
+
- lib/rpush/client/active_model/fcm/app.rb
|
468
|
+
- lib/rpush/client/active_model/fcm/expiry_collapse_key_mutual_inclusion_validator.rb
|
469
|
+
- lib/rpush/client/active_model/fcm/notification.rb
|
470
|
+
- lib/rpush/client/active_model/fcm/notification_keys_in_allowed_list_validator.rb
|
432
471
|
- lib/rpush/client/active_model/gcm/app.rb
|
433
472
|
- lib/rpush/client/active_model/gcm/expiry_collapse_key_mutual_inclusion_validator.rb
|
434
473
|
- lib/rpush/client/active_model/gcm/notification.rb
|
@@ -456,6 +495,8 @@ files:
|
|
456
495
|
- lib/rpush/client/active_record/apnsp8/app.rb
|
457
496
|
- lib/rpush/client/active_record/apnsp8/notification.rb
|
458
497
|
- lib/rpush/client/active_record/app.rb
|
498
|
+
- lib/rpush/client/active_record/fcm/app.rb
|
499
|
+
- lib/rpush/client/active_record/fcm/notification.rb
|
459
500
|
- lib/rpush/client/active_record/gcm/app.rb
|
460
501
|
- lib/rpush/client/active_record/gcm/notification.rb
|
461
502
|
- lib/rpush/client/active_record/notification.rb
|
@@ -480,6 +521,8 @@ files:
|
|
480
521
|
- lib/rpush/client/redis/apnsp8/app.rb
|
481
522
|
- lib/rpush/client/redis/apnsp8/notification.rb
|
482
523
|
- lib/rpush/client/redis/app.rb
|
524
|
+
- lib/rpush/client/redis/fcm/app.rb
|
525
|
+
- lib/rpush/client/redis/fcm/notification.rb
|
483
526
|
- lib/rpush/client/redis/gcm/app.rb
|
484
527
|
- lib/rpush/client/redis/gcm/notification.rb
|
485
528
|
- lib/rpush/client/redis/notification.rb
|
@@ -517,9 +560,12 @@ files:
|
|
517
560
|
- lib/rpush/daemon/dispatcher/tcp.rb
|
518
561
|
- lib/rpush/daemon/dispatcher_loop.rb
|
519
562
|
- lib/rpush/daemon/errors.rb
|
563
|
+
- lib/rpush/daemon/fcm.rb
|
564
|
+
- lib/rpush/daemon/fcm/delivery.rb
|
520
565
|
- lib/rpush/daemon/feeder.rb
|
521
566
|
- lib/rpush/daemon/gcm.rb
|
522
567
|
- lib/rpush/daemon/gcm/delivery.rb
|
568
|
+
- lib/rpush/daemon/google_credential_cache.rb
|
523
569
|
- lib/rpush/daemon/interruptible_sleep.rb
|
524
570
|
- lib/rpush/daemon/loggable.rb
|
525
571
|
- lib/rpush/daemon/proc_title.rb
|
@@ -569,6 +615,8 @@ files:
|
|
569
615
|
- spec/functional/apns_spec.rb
|
570
616
|
- spec/functional/cli_spec.rb
|
571
617
|
- spec/functional/embed_spec.rb
|
618
|
+
- spec/functional/fcm_priority_spec.rb
|
619
|
+
- spec/functional/fcm_spec.rb
|
572
620
|
- spec/functional/gcm_priority_spec.rb
|
573
621
|
- spec/functional/gcm_spec.rb
|
574
622
|
- spec/functional/new_app_spec.rb
|
@@ -596,6 +644,8 @@ files:
|
|
596
644
|
- spec/unit/client/active_record/apns2/notification_spec.rb
|
597
645
|
- spec/unit/client/active_record/apnsp8/notification_spec.rb
|
598
646
|
- spec/unit/client/active_record/app_spec.rb
|
647
|
+
- spec/unit/client/active_record/fcm/app_spec.rb
|
648
|
+
- spec/unit/client/active_record/fcm/notification_spec.rb
|
599
649
|
- spec/unit/client/active_record/gcm/app_spec.rb
|
600
650
|
- spec/unit/client/active_record/gcm/notification_spec.rb
|
601
651
|
- spec/unit/client/active_record/notification_spec.rb
|
@@ -618,6 +668,8 @@ files:
|
|
618
668
|
- spec/unit/client/redis/apns2/notification_spec.rb
|
619
669
|
- spec/unit/client/redis/apnsp8/notification_spec.rb
|
620
670
|
- spec/unit/client/redis/app_spec.rb
|
671
|
+
- spec/unit/client/redis/fcm/app_spec.rb
|
672
|
+
- spec/unit/client/redis/fcm/notification_spec.rb
|
621
673
|
- spec/unit/client/redis/gcm/app_spec.rb
|
622
674
|
- spec/unit/client/redis/gcm/notification_spec.rb
|
623
675
|
- spec/unit/client/redis/notification_spec.rb
|
@@ -635,6 +687,8 @@ files:
|
|
635
687
|
- spec/unit/client/shared/apns/feedback.rb
|
636
688
|
- spec/unit/client/shared/apns/notification.rb
|
637
689
|
- spec/unit/client/shared/app.rb
|
690
|
+
- spec/unit/client/shared/fcm/app.rb
|
691
|
+
- spec/unit/client/shared/fcm/notification.rb
|
638
692
|
- spec/unit/client/shared/gcm/app.rb
|
639
693
|
- spec/unit/client/shared/gcm/notification.rb
|
640
694
|
- spec/unit/client/shared/notification.rb
|
@@ -659,6 +713,7 @@ files:
|
|
659
713
|
- spec/unit/daemon/dispatcher/http_spec.rb
|
660
714
|
- spec/unit/daemon/dispatcher/tcp_spec.rb
|
661
715
|
- spec/unit/daemon/dispatcher_loop_spec.rb
|
716
|
+
- spec/unit/daemon/fcm/delivery_spec.rb
|
662
717
|
- spec/unit/daemon/feeder_spec.rb
|
663
718
|
- spec/unit/daemon/gcm/delivery_spec.rb
|
664
719
|
- spec/unit/daemon/proc_title_spec.rb
|
@@ -706,14 +761,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
706
761
|
requirements:
|
707
762
|
- - ">="
|
708
763
|
- !ruby/object:Gem::Version
|
709
|
-
version: 2.
|
764
|
+
version: 2.7.0
|
710
765
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
711
766
|
requirements:
|
712
767
|
- - ">="
|
713
768
|
- !ruby/object:Gem::Version
|
714
769
|
version: '0'
|
715
770
|
requirements: []
|
716
|
-
rubygems_version: 3.3.
|
771
|
+
rubygems_version: 3.3.3
|
717
772
|
signing_key:
|
718
773
|
specification_version: 4
|
719
774
|
summary: The push notification service for Ruby.
|
@@ -724,6 +779,8 @@ test_files:
|
|
724
779
|
- spec/functional/apns_spec.rb
|
725
780
|
- spec/functional/cli_spec.rb
|
726
781
|
- spec/functional/embed_spec.rb
|
782
|
+
- spec/functional/fcm_priority_spec.rb
|
783
|
+
- spec/functional/fcm_spec.rb
|
727
784
|
- spec/functional/gcm_priority_spec.rb
|
728
785
|
- spec/functional/gcm_spec.rb
|
729
786
|
- spec/functional/new_app_spec.rb
|
@@ -751,6 +808,8 @@ test_files:
|
|
751
808
|
- spec/unit/client/active_record/apns2/notification_spec.rb
|
752
809
|
- spec/unit/client/active_record/apnsp8/notification_spec.rb
|
753
810
|
- spec/unit/client/active_record/app_spec.rb
|
811
|
+
- spec/unit/client/active_record/fcm/app_spec.rb
|
812
|
+
- spec/unit/client/active_record/fcm/notification_spec.rb
|
754
813
|
- spec/unit/client/active_record/gcm/app_spec.rb
|
755
814
|
- spec/unit/client/active_record/gcm/notification_spec.rb
|
756
815
|
- spec/unit/client/active_record/notification_spec.rb
|
@@ -773,6 +832,8 @@ test_files:
|
|
773
832
|
- spec/unit/client/redis/apns2/notification_spec.rb
|
774
833
|
- spec/unit/client/redis/apnsp8/notification_spec.rb
|
775
834
|
- spec/unit/client/redis/app_spec.rb
|
835
|
+
- spec/unit/client/redis/fcm/app_spec.rb
|
836
|
+
- spec/unit/client/redis/fcm/notification_spec.rb
|
776
837
|
- spec/unit/client/redis/gcm/app_spec.rb
|
777
838
|
- spec/unit/client/redis/gcm/notification_spec.rb
|
778
839
|
- spec/unit/client/redis/notification_spec.rb
|
@@ -790,6 +851,8 @@ test_files:
|
|
790
851
|
- spec/unit/client/shared/apns/feedback.rb
|
791
852
|
- spec/unit/client/shared/apns/notification.rb
|
792
853
|
- spec/unit/client/shared/app.rb
|
854
|
+
- spec/unit/client/shared/fcm/app.rb
|
855
|
+
- spec/unit/client/shared/fcm/notification.rb
|
793
856
|
- spec/unit/client/shared/gcm/app.rb
|
794
857
|
- spec/unit/client/shared/gcm/notification.rb
|
795
858
|
- spec/unit/client/shared/notification.rb
|
@@ -814,6 +877,7 @@ test_files:
|
|
814
877
|
- spec/unit/daemon/dispatcher/http_spec.rb
|
815
878
|
- spec/unit/daemon/dispatcher/tcp_spec.rb
|
816
879
|
- spec/unit/daemon/dispatcher_loop_spec.rb
|
880
|
+
- spec/unit/daemon/fcm/delivery_spec.rb
|
817
881
|
- spec/unit/daemon/feeder_spec.rb
|
818
882
|
- spec/unit/daemon/gcm/delivery_spec.rb
|
819
883
|
- spec/unit/daemon/proc_title_spec.rb
|