rhoconnect 6.2.0 → 7.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 +5 -5
- data/Gemfile +5 -1
- data/Gemfile.lock +86 -40
- data/README.md +2 -0
- data/bin/rhoconnect +0 -0
- data/bin/rhoconnect-benchmark +0 -0
- data/lib/rhoconnect/ping/fcm.rb +74 -0
- data/lib/rhoconnect/ping.rb +1 -1
- data/lib/rhoconnect/version.rb +1 -1
- data/rhoconnect.gemspec +5 -1
- data/spec/jobs/ping_job_spec.rb +74 -33
- data/spec/ping/fcm_spec.rb +116 -0
- data/spec/ping/gcm_spec.rb +1 -1
- metadata +70 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 83766b251f604a4cd12879f43b25f2c362a02c024854c1939b4308fc910c9407
|
|
4
|
+
data.tar.gz: ab266ed612312bc3d41c96d6f528a2497426b3ee81fd7ce6f4aa087385fabb00
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 60645c4807398d6e817a47d5d22a76c1280080cfc68920ddea55bc788e986d386ddd5a8e1affeec29de64a2df8295c5afd471560e50dacc48edda684cf49e683
|
|
7
|
+
data.tar.gz: f8b55854160a7efaf803209cf2e796323189613e0d377de39dede5041fc9c46f5bb41e89c213d5bbec240b48e4ecaef74d1aabf49321c2f9cbdbd7914bc3b244
|
data/Gemfile
CHANGED
|
@@ -29,7 +29,7 @@ group :development do
|
|
|
29
29
|
# gem 'debugger'
|
|
30
30
|
gem 'aws-s3', '>= 0.6.3', :require => 'aws/s3'
|
|
31
31
|
gem 'sqlite3', ">= 1.4.0", :platforms => [:ruby, :mswin, :mingw]
|
|
32
|
-
gem "excon", "~> 0.
|
|
32
|
+
gem "excon", "~> 0.72.0"
|
|
33
33
|
gem "net-ssh", "~> 5.2.0"
|
|
34
34
|
gem "fog-aws", "~> 3.4.0"
|
|
35
35
|
gem 'ffaker', '~> 2.10.0'
|
|
@@ -48,3 +48,7 @@ end
|
|
|
48
48
|
group :build do
|
|
49
49
|
gem 'fpm', '>= 1.11.00'
|
|
50
50
|
end
|
|
51
|
+
|
|
52
|
+
gem 'signet', '~> 0.7'
|
|
53
|
+
gem 'google-api-client', '~> 0.31.0'
|
|
54
|
+
gem 'google-api-fcm', '~> 0.1.7'
|
data/Gemfile.lock
CHANGED
|
@@ -8,32 +8,36 @@ GIT
|
|
|
8
8
|
PATH
|
|
9
9
|
remote: .
|
|
10
10
|
specs:
|
|
11
|
-
rhoconnect (7.
|
|
11
|
+
rhoconnect (7.1.0)
|
|
12
12
|
bundler (~> 1.17.3)
|
|
13
13
|
connection_pool (~> 2.2.2)
|
|
14
|
+
google-api-client (~> 0.31.0)
|
|
15
|
+
google-api-fcm (~> 0.1.7)
|
|
14
16
|
json (>= 1.8, < 2.0)
|
|
15
17
|
rack (~> 2.0.6)
|
|
16
18
|
rake (~> 12.3.2)
|
|
17
19
|
redis (~> 4.1.0)
|
|
20
|
+
redis-namespace (~> 1.6.0)
|
|
18
21
|
resque (>= 2.0.0)
|
|
19
22
|
rest-client (~> 2.0.2)
|
|
20
|
-
rubyzip (
|
|
23
|
+
rubyzip (>= 1.2.2, < 2.1.0)
|
|
24
|
+
signet (~> 0.11.0)
|
|
21
25
|
sinatra (~> 2.0.5)
|
|
22
26
|
thor (~> 0.20.3)
|
|
23
27
|
|
|
24
28
|
GEM
|
|
25
29
|
remote: https://rubygems.org/
|
|
26
30
|
specs:
|
|
27
|
-
addressable (2.
|
|
28
|
-
public_suffix (>= 2.0.2, <
|
|
31
|
+
addressable (2.7.0)
|
|
32
|
+
public_suffix (>= 2.0.2, < 5.0)
|
|
29
33
|
arr-pm (0.0.10)
|
|
30
34
|
cabin (> 0)
|
|
31
35
|
aws-s3 (0.6.3)
|
|
32
36
|
builder
|
|
33
37
|
mime-types
|
|
34
38
|
xml-simple
|
|
35
|
-
backports (3.
|
|
36
|
-
builder (3.2.
|
|
39
|
+
backports (3.16.1)
|
|
40
|
+
builder (3.2.4)
|
|
37
41
|
cabin (0.9.0)
|
|
38
42
|
childprocess (0.9.0)
|
|
39
43
|
ffi (~> 1.0, >= 1.0.11)
|
|
@@ -42,23 +46,27 @@ GEM
|
|
|
42
46
|
crack (0.4.3)
|
|
43
47
|
safe_yaml (~> 1.0.0)
|
|
44
48
|
daemons (1.3.1)
|
|
49
|
+
declarative (0.0.10)
|
|
50
|
+
declarative-option (0.1.0)
|
|
45
51
|
diff-lcs (1.3)
|
|
46
|
-
docile (1.3.
|
|
47
|
-
domain_name (0.5.
|
|
52
|
+
docile (1.3.2)
|
|
53
|
+
domain_name (0.5.20190701)
|
|
48
54
|
unf (>= 0.0.5, < 1.0.0)
|
|
49
|
-
dotenv (2.7.
|
|
55
|
+
dotenv (2.7.5)
|
|
50
56
|
eventmachine (1.0.9.1)
|
|
51
|
-
excon (0.
|
|
57
|
+
excon (0.72.0)
|
|
58
|
+
faraday (0.17.3)
|
|
59
|
+
multipart-post (>= 1.2, < 3)
|
|
52
60
|
ffaker (2.10.0)
|
|
53
|
-
ffi (1.
|
|
61
|
+
ffi (1.12.2)
|
|
54
62
|
fog-aws (3.4.0)
|
|
55
63
|
fog-core (~> 2.1)
|
|
56
64
|
fog-json (~> 1.1)
|
|
57
65
|
fog-xml (~> 0.1)
|
|
58
66
|
ipaddress (~> 0.8)
|
|
59
|
-
fog-core (2.
|
|
67
|
+
fog-core (2.2.0)
|
|
60
68
|
builder
|
|
61
|
-
excon (~> 0.
|
|
69
|
+
excon (~> 0.71)
|
|
62
70
|
formatador (~> 0.2)
|
|
63
71
|
mime-types
|
|
64
72
|
fog-json (1.2.0)
|
|
@@ -79,25 +87,49 @@ GEM
|
|
|
79
87
|
pleaserun (~> 0.0.29)
|
|
80
88
|
ruby-xz (~> 0.2.3)
|
|
81
89
|
stud
|
|
82
|
-
|
|
90
|
+
google-api-client (0.31.0)
|
|
91
|
+
addressable (~> 2.5, >= 2.5.1)
|
|
92
|
+
googleauth (>= 0.5, < 0.10.0)
|
|
93
|
+
httpclient (>= 2.8.1, < 3.0)
|
|
94
|
+
mini_mime (~> 1.0)
|
|
95
|
+
representable (~> 3.0)
|
|
96
|
+
retriable (>= 2.0, < 4.0)
|
|
97
|
+
signet (~> 0.10)
|
|
98
|
+
google-api-fcm (0.1.7)
|
|
99
|
+
google-api-client (~> 0.17)
|
|
100
|
+
googleauth (0.9.0)
|
|
101
|
+
faraday (~> 0.12)
|
|
102
|
+
jwt (>= 1.4, < 3.0)
|
|
103
|
+
memoist (~> 0.16)
|
|
104
|
+
multi_json (~> 1.11)
|
|
105
|
+
os (>= 0.9, < 2.0)
|
|
106
|
+
signet (~> 0.7)
|
|
107
|
+
hashdiff (1.0.0)
|
|
83
108
|
http-cookie (1.0.3)
|
|
84
109
|
domain_name (~> 0.5)
|
|
110
|
+
httpclient (2.8.3)
|
|
85
111
|
insist (1.0.0)
|
|
86
|
-
io-like (0.3.
|
|
112
|
+
io-like (0.3.1)
|
|
87
113
|
ipaddress (0.8.3)
|
|
88
114
|
json (1.8.6)
|
|
89
|
-
|
|
115
|
+
jwt (2.2.1)
|
|
116
|
+
memoist (0.16.2)
|
|
117
|
+
mime-types (3.3.1)
|
|
90
118
|
mime-types-data (~> 3.2015)
|
|
91
|
-
mime-types-data (3.2019.
|
|
119
|
+
mime-types-data (3.2019.1009)
|
|
120
|
+
mini_mime (1.0.2)
|
|
92
121
|
mini_portile2 (2.4.0)
|
|
93
122
|
mono_logger (1.1.0)
|
|
94
|
-
multi_json (1.
|
|
123
|
+
multi_json (1.14.1)
|
|
124
|
+
multipart-post (2.1.1)
|
|
95
125
|
mustache (0.99.8)
|
|
96
|
-
mustermann (1.
|
|
126
|
+
mustermann (1.1.1)
|
|
127
|
+
ruby2_keywords (~> 0.0.1)
|
|
97
128
|
net-ssh (5.2.0)
|
|
98
129
|
netrc (0.11.0)
|
|
99
|
-
nokogiri (1.10.
|
|
130
|
+
nokogiri (1.10.8)
|
|
100
131
|
mini_portile2 (~> 2.4.0)
|
|
132
|
+
os (1.0.1)
|
|
101
133
|
pleaserun (0.0.30)
|
|
102
134
|
cabin (> 0)
|
|
103
135
|
clamp
|
|
@@ -105,17 +137,21 @@ GEM
|
|
|
105
137
|
insist
|
|
106
138
|
mustache (= 0.99.8)
|
|
107
139
|
stud
|
|
108
|
-
public_suffix (
|
|
109
|
-
rack (2.0.
|
|
140
|
+
public_suffix (4.0.3)
|
|
141
|
+
rack (2.0.9)
|
|
110
142
|
rack-fiber_pool (0.9.3)
|
|
111
|
-
rack-protection (2.0.
|
|
143
|
+
rack-protection (2.0.8.1)
|
|
112
144
|
rack
|
|
113
145
|
rack-test (1.1.0)
|
|
114
146
|
rack (>= 1.0, < 3)
|
|
115
|
-
rake (12.3.
|
|
116
|
-
redis (4.1.
|
|
147
|
+
rake (12.3.3)
|
|
148
|
+
redis (4.1.3)
|
|
117
149
|
redis-namespace (1.6.0)
|
|
118
150
|
redis (>= 3.0.4)
|
|
151
|
+
representable (3.0.4)
|
|
152
|
+
declarative (< 0.1.0)
|
|
153
|
+
declarative-option (< 0.2.0)
|
|
154
|
+
uber (< 0.2.0)
|
|
119
155
|
resque (2.0.0)
|
|
120
156
|
mono_logger (~> 1.0)
|
|
121
157
|
multi_json (~> 1.0)
|
|
@@ -126,47 +162,54 @@ GEM
|
|
|
126
162
|
http-cookie (>= 1.0.2, < 2.0)
|
|
127
163
|
mime-types (>= 1.16, < 4.0)
|
|
128
164
|
netrc (~> 0.8)
|
|
165
|
+
retriable (3.1.2)
|
|
129
166
|
rspec (3.8.0)
|
|
130
167
|
rspec-core (~> 3.8.0)
|
|
131
168
|
rspec-expectations (~> 3.8.0)
|
|
132
169
|
rspec-mocks (~> 3.8.0)
|
|
133
|
-
rspec-core (3.8.
|
|
170
|
+
rspec-core (3.8.2)
|
|
134
171
|
rspec-support (~> 3.8.0)
|
|
135
|
-
rspec-expectations (3.8.
|
|
172
|
+
rspec-expectations (3.8.6)
|
|
136
173
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
137
174
|
rspec-support (~> 3.8.0)
|
|
138
|
-
rspec-mocks (3.8.
|
|
175
|
+
rspec-mocks (3.8.2)
|
|
139
176
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
140
177
|
rspec-support (~> 3.8.0)
|
|
141
|
-
rspec-support (3.8.
|
|
178
|
+
rspec-support (3.8.3)
|
|
142
179
|
ruby-xz (0.2.3)
|
|
143
180
|
ffi (~> 1.9)
|
|
144
181
|
io-like (~> 0.3)
|
|
145
|
-
|
|
182
|
+
ruby2_keywords (0.0.2)
|
|
183
|
+
rubyzip (2.0.0)
|
|
146
184
|
safe_yaml (1.0.5)
|
|
147
|
-
|
|
185
|
+
signet (0.11.0)
|
|
186
|
+
addressable (~> 2.3)
|
|
187
|
+
faraday (~> 0.9)
|
|
188
|
+
jwt (>= 1.5, < 3.0)
|
|
189
|
+
multi_json (~> 1.10)
|
|
190
|
+
simplecov (0.18.2)
|
|
148
191
|
docile (~> 1.1)
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
simplecov-html (0.10.2)
|
|
192
|
+
simplecov-html (~> 0.11)
|
|
193
|
+
simplecov-html (0.12.0)
|
|
152
194
|
simplecov-rcov (0.2.3)
|
|
153
195
|
simplecov (>= 0.4.1)
|
|
154
|
-
sinatra (2.0.
|
|
196
|
+
sinatra (2.0.8.1)
|
|
155
197
|
mustermann (~> 1.0)
|
|
156
198
|
rack (~> 2.0)
|
|
157
|
-
rack-protection (= 2.0.
|
|
199
|
+
rack-protection (= 2.0.8.1)
|
|
158
200
|
tilt (~> 2.0)
|
|
159
|
-
sqlite3 (1.4.
|
|
201
|
+
sqlite3 (1.4.2)
|
|
160
202
|
stud (0.0.23)
|
|
161
203
|
thin (1.7.2)
|
|
162
204
|
daemons (~> 1.0, >= 1.0.9)
|
|
163
205
|
eventmachine (~> 1.0, >= 1.0.4)
|
|
164
206
|
rack (>= 1, < 3)
|
|
165
207
|
thor (0.20.3)
|
|
166
|
-
tilt (2.0.
|
|
208
|
+
tilt (2.0.10)
|
|
209
|
+
uber (0.1.0)
|
|
167
210
|
unf (0.1.4)
|
|
168
211
|
unf_ext
|
|
169
|
-
unf_ext (0.0.7.
|
|
212
|
+
unf_ext (0.0.7.6)
|
|
170
213
|
vegas (0.1.11)
|
|
171
214
|
rack (>= 1.0.0)
|
|
172
215
|
webmock (3.5.1)
|
|
@@ -184,10 +227,12 @@ DEPENDENCIES
|
|
|
184
227
|
dbd-jdbc (>= 0.1.4)
|
|
185
228
|
dbi (>= 0.4.5)
|
|
186
229
|
eventmachine (~> 1.0.5)
|
|
187
|
-
excon (~> 0.
|
|
230
|
+
excon (~> 0.72.0)
|
|
188
231
|
ffaker (~> 2.10.0)
|
|
189
232
|
fog-aws (~> 3.4.0)
|
|
190
233
|
fpm (>= 1.11.00)
|
|
234
|
+
google-api-client (~> 0.31.0)
|
|
235
|
+
google-api-fcm (~> 0.1.7)
|
|
191
236
|
jdbc-sqlite3 (>= 3.7.2)
|
|
192
237
|
jruby-openssl (>= 0.7.4)
|
|
193
238
|
net-ssh (~> 5.2.0)
|
|
@@ -196,6 +241,7 @@ DEPENDENCIES
|
|
|
196
241
|
rack-test (~> 1.1.0)
|
|
197
242
|
rhoconnect!
|
|
198
243
|
rspec (~> 3.8.0)
|
|
244
|
+
signet (~> 0.7)
|
|
199
245
|
simplecov (>= 0.16.1)
|
|
200
246
|
simplecov-rcov (~> 0.2.3)
|
|
201
247
|
sqlite3 (>= 1.4.0)
|
data/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
[](https://travis-ci.org/rhomobile/rhoconnect)
|
|
2
|
+
|
|
1
3
|
RhoConnect App Integration Server
|
|
2
4
|
-------------------------------------------------------------
|
|
3
5
|
RhoConnect is an app integration server which keeps enterprise data current and available on users’ devices.
|
data/bin/rhoconnect
CHANGED
|
File without changes
|
data/bin/rhoconnect-benchmark
CHANGED
|
File without changes
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'google/apis/messages'
|
|
2
|
+
|
|
3
|
+
# https://firebase.google.com/docs/cloud-messaging/auth-server
|
|
4
|
+
# https://github.com/oniksfly/google-api-fcm
|
|
5
|
+
|
|
6
|
+
module Rhoconnect
|
|
7
|
+
class Fcm
|
|
8
|
+
class InvalidProjectId < Exception; end
|
|
9
|
+
class InvalidPackageName < Exception; end
|
|
10
|
+
class FCMPingError < Exception; end
|
|
11
|
+
|
|
12
|
+
def self.ping(params)
|
|
13
|
+
begin
|
|
14
|
+
fcm_project_id = Rhoconnect.settings[:fcm_project_id]
|
|
15
|
+
raise InvalidProjectId.new("Missing `:fcm_project_id:` option in settings/settings.yml") unless fcm_project_id
|
|
16
|
+
|
|
17
|
+
package_name = Rhoconnect.settings[:package_name]
|
|
18
|
+
raise InvalidPackageName.new("Missing `:package_name:` option in settings/settings.yml") unless package_name
|
|
19
|
+
|
|
20
|
+
send_ping_to_device(fcm_project_id, package_name, params)
|
|
21
|
+
rescue InvalidProjectId => error
|
|
22
|
+
log error
|
|
23
|
+
log error.backtrace.join("\n")
|
|
24
|
+
raise error
|
|
25
|
+
rescue InvalidPackageName => error
|
|
26
|
+
log error
|
|
27
|
+
log error.backtrace.join("\n")
|
|
28
|
+
raise error
|
|
29
|
+
rescue Exception => error
|
|
30
|
+
log error
|
|
31
|
+
log error.backtrace.join("\n")
|
|
32
|
+
raise error
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.send_ping_to_device(project_id,package_name,params)
|
|
37
|
+
|
|
38
|
+
scope = Google::Apis::Messages::AUTH_MESSAGES
|
|
39
|
+
authorization = Google::Auth.get_application_default(scope)
|
|
40
|
+
|
|
41
|
+
service = Google::Apis::Messages::MessagesService.new(project_id: project_id)
|
|
42
|
+
service.authorization = authorization
|
|
43
|
+
|
|
44
|
+
service.notify(fcm_message(package_name,params))
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.fcm_message(package_name,params)
|
|
49
|
+
params.reject! {|k,v| v.nil? || v.length == 0}
|
|
50
|
+
data = {}
|
|
51
|
+
data['do_sync'] = params['sources'] ? params['sources'].join(',') : ''
|
|
52
|
+
data['alert'] = params['message'] if params['message']
|
|
53
|
+
data['vibrate'] = params['vibrate'] if params['vibrate']
|
|
54
|
+
data['sound'] = params['sound'] if params['sound']
|
|
55
|
+
data['phone_id'] = params['phone_id'] if params['phone_id']
|
|
56
|
+
|
|
57
|
+
android = {}
|
|
58
|
+
android['collapse_key'] = (rand * 100000000).to_i.to_s
|
|
59
|
+
android['priority'] = 'high'
|
|
60
|
+
android['restricted_package_name'] = package_name
|
|
61
|
+
android['data'] = data
|
|
62
|
+
android['notification'] = {}
|
|
63
|
+
# android['notification']['title'] = 'Test message'
|
|
64
|
+
android['notification']['body'] = params['message']
|
|
65
|
+
|
|
66
|
+
message = Google::Apis::Messages::Message.new(
|
|
67
|
+
token: params['device_pin'].to_s,
|
|
68
|
+
android: android
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
message
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
data/lib/rhoconnect/ping.rb
CHANGED
data/lib/rhoconnect/version.rb
CHANGED
data/rhoconnect.gemspec
CHANGED
|
@@ -44,10 +44,14 @@ Gem::Specification.new do |s|
|
|
|
44
44
|
s.add_dependency('sinatra', '~> 2.0.5')
|
|
45
45
|
s.add_dependency('rake', '~> 12.3.2')
|
|
46
46
|
s.add_dependency('json', '>= 1.8', '< 2.0')
|
|
47
|
-
s.add_dependency('rubyzip', '
|
|
47
|
+
s.add_dependency('rubyzip', '>= 1.2.2', '< 2.1.0')
|
|
48
48
|
s.add_dependency('connection_pool', '~> 2.2.2')
|
|
49
|
+
s.add_dependency('redis-namespace', '~> 1.6.0')
|
|
49
50
|
s.add_dependency('redis', '~> 4.1.0')
|
|
50
51
|
s.add_dependency('resque', '>= 2.0.0')
|
|
51
52
|
s.add_dependency('rest-client', '~> 2.0.2')
|
|
52
53
|
s.add_dependency('thor', '~> 0.20.3')
|
|
54
|
+
s.add_dependency('signet', '~> 0.11.0')
|
|
55
|
+
s.add_dependency('google-api-client', '~> 0.31.0')
|
|
56
|
+
s.add_dependency('google-api-fcm', '~> 0.1.7')
|
|
53
57
|
end
|
data/spec/jobs/ping_job_spec.rb
CHANGED
|
@@ -33,8 +33,10 @@ describe 'PingJob' do
|
|
|
33
33
|
scrubbed_params = params.dup
|
|
34
34
|
scrubbed_params['vibrate'] = '5'
|
|
35
35
|
|
|
36
|
-
Apple.
|
|
37
|
-
|
|
36
|
+
expect(Apple).to receive(:ping).once.with({
|
|
37
|
+
'device_pin' => @c.device_pin,
|
|
38
|
+
'device_port' => @c.device_port
|
|
39
|
+
}.merge!(scrubbed_params))
|
|
38
40
|
PingJob.perform(params)
|
|
39
41
|
end
|
|
40
42
|
|
|
@@ -49,7 +51,7 @@ describe 'PingJob' do
|
|
|
49
51
|
'phone_id' => nil,
|
|
50
52
|
'device_app_id' => nil,
|
|
51
53
|
'device_app_version' => nil}
|
|
52
|
-
Apple.
|
|
54
|
+
expect(Apple).to receive(:ping).once.with({'device_pin' => @c.device_pin,
|
|
53
55
|
'device_port' => @c.device_port}.merge!(params))
|
|
54
56
|
PingJob.perform(params)
|
|
55
57
|
end
|
|
@@ -66,7 +68,7 @@ describe 'PingJob' do
|
|
|
66
68
|
'device_app_id' => nil,
|
|
67
69
|
'device_app_version' => nil}
|
|
68
70
|
@c.device_type = 'unknown_device_type'
|
|
69
|
-
PingJob.
|
|
71
|
+
expect(PingJob).to receive(:log).once.with("Dropping ping request for unsupported platform '#{@c.device_type}'")
|
|
70
72
|
PingJob.perform(params)
|
|
71
73
|
end
|
|
72
74
|
|
|
@@ -81,8 +83,8 @@ describe 'PingJob' do
|
|
|
81
83
|
'device_app_id' => nil,
|
|
82
84
|
'device_app_version' => nil}
|
|
83
85
|
@c.device_type = nil
|
|
84
|
-
PingJob.
|
|
85
|
-
|
|
86
|
+
expect(PingJob).to receive(:log).once.with("Skipping ping for non-registered client_id '#{@c.id}'...")
|
|
87
|
+
expect {PingJob.perform(params)}.not_to raise_error
|
|
86
88
|
end
|
|
87
89
|
|
|
88
90
|
it 'should skip ping for empty device_pin' do
|
|
@@ -97,8 +99,8 @@ describe 'PingJob' do
|
|
|
97
99
|
'device_app_version' => nil, }
|
|
98
100
|
@c.device_type = 'Android'
|
|
99
101
|
@c.device_pin = nil
|
|
100
|
-
PingJob.
|
|
101
|
-
|
|
102
|
+
expect(PingJob).to receive(:log).once.with("Skipping ping for non-registered client_id '#{@c.id}'...")
|
|
103
|
+
expect {PingJob.perform(params)}.not_to raise_error
|
|
102
104
|
end
|
|
103
105
|
|
|
104
106
|
it 'should drop ping if it\'s already in user\'s device pin list' do
|
|
@@ -119,9 +121,9 @@ describe 'PingJob' do
|
|
|
119
121
|
@c_fields.delete(:id)
|
|
120
122
|
@c2 = Client.create(@c_fields, {:source_name => @s_fields[:name]})
|
|
121
123
|
|
|
122
|
-
Apple.
|
|
123
|
-
PingJob.
|
|
124
|
-
|
|
124
|
+
expect(Apple).to receive(:ping).with({'device_pin' => @c.device_pin, 'device_port' => @c.device_port}.merge!(params))
|
|
125
|
+
expect(PingJob).to receive(:log).twice.with(/Dropping ping request for client/)
|
|
126
|
+
expect {PingJob.perform(params)}.not_to raise_error
|
|
125
127
|
end
|
|
126
128
|
|
|
127
129
|
it 'should drop ping if it\'s already in user\'s phone id list and device pin is different' do
|
|
@@ -143,12 +145,12 @@ describe 'PingJob' do
|
|
|
143
145
|
@c_fields.delete(:id)
|
|
144
146
|
@c2 = Client.create(@c_fields, {:source_name => @s_fields[:name]})
|
|
145
147
|
|
|
146
|
-
Apple.
|
|
147
|
-
PingJob.
|
|
148
|
-
|
|
148
|
+
expect(Apple).to receive(:ping).with({'device_pin' => @c.device_pin, 'phone_id' => @c.phone_id, 'device_port' => @c.device_port}.merge!(params))
|
|
149
|
+
expect(PingJob).to receive(:log).twice.with(/Dropping ping request for client/)
|
|
150
|
+
expect {PingJob.perform(params)}.not_to raise_error
|
|
149
151
|
end
|
|
150
152
|
|
|
151
|
-
|
|
153
|
+
xit 'should ping two different users from two different devices - Apple and GCM' do
|
|
152
154
|
params = {'user_id' => [@u.id, @u1.id],
|
|
153
155
|
'api_token' => @api_token,
|
|
154
156
|
'sources' => [@s.name],
|
|
@@ -165,8 +167,30 @@ describe 'PingJob' do
|
|
|
165
167
|
scrubbed_params['vibrate'] = '5'
|
|
166
168
|
@c1.device_push_type = 'Gcm'
|
|
167
169
|
|
|
168
|
-
Apple.
|
|
169
|
-
Gcm.
|
|
170
|
+
expect(Apple).to receive(:ping).with(params.merge!({'device_pin' => @c.device_pin, 'phone_id' => @c.phone_id, 'device_port' => @c.device_port}))
|
|
171
|
+
expect(Gcm).to receive(:ping).with({'device_pin' => @c1.device_pin, 'device_port' => @c1.device_port}.merge!(scrubbed_params))
|
|
172
|
+
PingJob.perform(params)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it 'should ping two different users from two different devices - Apple and FCM' do
|
|
176
|
+
params = {'user_id' => [@u.id, @u1.id],
|
|
177
|
+
'api_token' => @api_token,
|
|
178
|
+
'sources' => [@s.name],
|
|
179
|
+
'message' => 'hello world',
|
|
180
|
+
'vibrate' => '5',
|
|
181
|
+
'badge' => '5',
|
|
182
|
+
'sound' => 'hello.mp3',
|
|
183
|
+
'phone_id' => nil,
|
|
184
|
+
'device_app_id' => nil,
|
|
185
|
+
'device_app_version' => nil, }
|
|
186
|
+
@c.phone_id = '3'
|
|
187
|
+
|
|
188
|
+
scrubbed_params = params.dup
|
|
189
|
+
scrubbed_params['vibrate'] = '5'
|
|
190
|
+
@c1.device_push_type = 'Fcm'
|
|
191
|
+
|
|
192
|
+
expect(Apple).to receive(:ping).with(params.merge!({'device_pin' => @c.device_pin, 'phone_id' => @c.phone_id, 'device_port' => @c.device_port}))
|
|
193
|
+
expect(Fcm).to receive(:ping).with({'device_pin' => @c1.device_pin, 'device_port' => @c1.device_port}.merge!(scrubbed_params))
|
|
170
194
|
PingJob.perform(params)
|
|
171
195
|
end
|
|
172
196
|
|
|
@@ -183,9 +207,9 @@ describe 'PingJob' do
|
|
|
183
207
|
@c.phone_id = '3'
|
|
184
208
|
@c1.phone_id = '3'
|
|
185
209
|
|
|
186
|
-
Apple.
|
|
187
|
-
PingJob.
|
|
188
|
-
|
|
210
|
+
expect(Apple).to receive(:ping).with({'device_pin' => @c.device_pin, 'phone_id' => @c.phone_id, 'device_port' => @c.device_port}.merge!(params))
|
|
211
|
+
expect(PingJob).to receive(:log).once.with(/Dropping ping request for client/)
|
|
212
|
+
expect {PingJob.perform(params)}.not_to raise_error
|
|
189
213
|
end
|
|
190
214
|
|
|
191
215
|
it 'should drop ping with two different users with the same pin' do
|
|
@@ -201,12 +225,12 @@ describe 'PingJob' do
|
|
|
201
225
|
'device_app_version' => nil, }
|
|
202
226
|
@c1.device_pin = @c.device_pin
|
|
203
227
|
|
|
204
|
-
Apple.
|
|
205
|
-
PingJob.
|
|
206
|
-
|
|
228
|
+
expect(Apple).to receive(:ping).with({'device_pin' => @c.device_pin, 'device_port' => @c.device_port}.merge!(params))
|
|
229
|
+
expect(PingJob).to receive(:log).once.with(/Dropping ping request for client/)
|
|
230
|
+
expect {PingJob.perform(params)}.not_to raise_error
|
|
207
231
|
end
|
|
208
232
|
|
|
209
|
-
|
|
233
|
+
xit 'should process all pings even if some of them are failing' do
|
|
210
234
|
params = {'user_id' => [@u.id, @u1.id],
|
|
211
235
|
'api_token' => @api_token,
|
|
212
236
|
'sources' => [@s.name],
|
|
@@ -226,13 +250,30 @@ describe 'PingJob' do
|
|
|
226
250
|
params.merge!({'device_pin' => @c.device_pin, 'phone_id' => @c.phone_id, 'device_port' => @c.device_port})
|
|
227
251
|
allow(Apple).to receive(:ping).with(params).and_raise(SocketError.new("Socket failure"))
|
|
228
252
|
allow(Gcm).to receive(:ping).with({'device_pin' => @c1.device_pin, 'device_port' => @c1.device_port}.merge!(scrubbed_params))
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
253
|
+
expect{ PingJob.perform(params)}.to raise_error
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
it 'should process all pings even if some of them are failing' do
|
|
257
|
+
params = {'user_id' => [@u.id, @u1.id],
|
|
258
|
+
'api_token' => @api_token,
|
|
259
|
+
'sources' => [@s.name],
|
|
260
|
+
'message' => 'hello world',
|
|
261
|
+
'vibrate' => '5',
|
|
262
|
+
'badge' => '5',
|
|
263
|
+
'sound' => 'hello.mp3',
|
|
264
|
+
'phone_id' => nil,
|
|
265
|
+
'device_app_id' => nil,
|
|
266
|
+
'device_app_version' => nil, }
|
|
267
|
+
@c.phone_id = '3'
|
|
268
|
+
|
|
269
|
+
scrubbed_params = params.dup
|
|
270
|
+
scrubbed_params['vibrate'] = '5'
|
|
271
|
+
@c1.device_push_type = 'Fcm'
|
|
272
|
+
|
|
273
|
+
params.merge!({'device_pin' => @c.device_pin, 'phone_id' => @c.phone_id, 'device_port' => @c.device_port})
|
|
274
|
+
allow(Apple).to receive(:ping).with(params).and_raise(SocketError.new("Socket failure"))
|
|
275
|
+
allow(Fcm).to receive(:ping).with({'device_pin' => @c1.device_pin, 'device_port' => @c1.device_port}.merge!(scrubbed_params))
|
|
276
|
+
expect{ PingJob.perform(params)}.to raise_error
|
|
236
277
|
end
|
|
237
278
|
|
|
238
279
|
it 'should skip ping for unknown user or user with no clients' do
|
|
@@ -246,7 +287,7 @@ describe 'PingJob' do
|
|
|
246
287
|
'phone_id' => nil,
|
|
247
288
|
'device_app_id' => nil,
|
|
248
289
|
'device_app_version' => nil, }
|
|
249
|
-
PingJob.
|
|
290
|
+
expect(PingJob).to receive(:log).once.with(/Skipping ping for unknown user 'fake_user' or 'fake_user' has no registered clients.../)
|
|
250
291
|
PingJob.perform(params)
|
|
251
292
|
end
|
|
252
293
|
|
|
@@ -264,7 +305,7 @@ describe 'PingJob' do
|
|
|
264
305
|
}
|
|
265
306
|
scrubbed_params = params.dup
|
|
266
307
|
|
|
267
|
-
RhoconnectPush.
|
|
308
|
+
expect(RhoconnectPush).to receive(:ping).once.with(
|
|
268
309
|
{'device_pin' => @c.device_pin}.merge!(scrubbed_params)
|
|
269
310
|
)
|
|
270
311
|
PingJob.perform(params)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe "Ping Android FCM" do
|
|
4
|
+
include_examples "SharedRhoconnectHelper", :rhoconnect_data => false
|
|
5
|
+
|
|
6
|
+
before(:each) do
|
|
7
|
+
allow( Google::Auth).to receive(:get_application_default)
|
|
8
|
+
@params = {"device_pin" => @c.device_pin,
|
|
9
|
+
"sources" => [@s.name], "message" => 'hello world',
|
|
10
|
+
"vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
|
|
11
|
+
@response = double('response')
|
|
12
|
+
Rhoconnect.settings[:fcm_project_id] = 'valid_project_id'
|
|
13
|
+
Rhoconnect.settings[:package_name] = 'valid_package_name'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should ping fcm successfully" do
|
|
17
|
+
stub_request(:post, "https://fcm.googleapis.com/v1/projects/valid_project_id/messages:send").with { |request|
|
|
18
|
+
hash = JSON.parse request.body
|
|
19
|
+
valid = hash["message"]["token"] == "abcd"
|
|
20
|
+
valid = valid && hash["message"]["topic"] == nil
|
|
21
|
+
valid = valid && hash["message"]["android"]["restricted_package_name"] == "valid_package_name"
|
|
22
|
+
valid
|
|
23
|
+
}
|
|
24
|
+
Fcm.ping(@params)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should raise error on missing fcm_project_id setting" do
|
|
28
|
+
key = Rhoconnect.settings[:fcm_project_id.dup]
|
|
29
|
+
Rhoconnect.settings[:fcm_project_id] = nil
|
|
30
|
+
expect(lambda { Fcm.ping(@params) }).to raise_error(Fcm::InvalidProjectId, 'Missing `:fcm_project_id:` option in settings/settings.yml')
|
|
31
|
+
Rhoconnect.settings[:fcm_project_id] = key
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should raise error on missing package_name setting" do
|
|
35
|
+
key = Rhoconnect.settings[:package_name.dup]
|
|
36
|
+
Rhoconnect.settings[:package_name] = nil
|
|
37
|
+
expect(lambda { Fcm.ping(@params) }).to raise_error(Fcm::InvalidPackageName, 'Missing `:package_name:` option in settings/settings.yml')
|
|
38
|
+
Rhoconnect.settings[:package_name] = key
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should ping fcm with 503 connection error" do
|
|
42
|
+
stub_request(:post, "https://fcm.googleapis.com/v1/projects/valid_project_id/messages:send").to_raise(RestClient::Exception.new(nil,503))
|
|
43
|
+
expect(lambda { Fcm.ping(@params) }).to raise_error(RestClient::Exception)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
xit "should ping fcm with 200 error message" do
|
|
47
|
+
allow( Google::Auth).to receive(:get_application_default)
|
|
48
|
+
|
|
49
|
+
error = 'error:DeviceMessageRateExceeded'
|
|
50
|
+
allow(@response).to receive(:code).and_return(200)
|
|
51
|
+
allow(@response).to receive(:body).and_return(error)
|
|
52
|
+
allow(@response).to receive(:headers).and_return(nil)
|
|
53
|
+
stub_request(:post, "https://fcm.googleapis.com/v1/projects/valid_project_id/messages:send").to_raise(RestClient::Exception.new(@response,200))
|
|
54
|
+
expect(lambda { Fcm.ping(@params) }).to raise_error(Fcm::FCMPingError, "FCM ping error: DeviceMessageRateExceeded")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
xit "should fail to ping with bad authentication" do
|
|
58
|
+
error = 'Error=BadAuthentication'
|
|
59
|
+
allow(@response).to receive(:code).and_return(403)
|
|
60
|
+
allow(@response).to receive(:body).and_return(error)
|
|
61
|
+
allow(@response).to receive(:headers).and_return({})
|
|
62
|
+
setup_post_yield(@response)
|
|
63
|
+
expect(Fcm).to receive(:log).twice
|
|
64
|
+
expect(lambda { Fcm.ping(@params) }).to raise_error(
|
|
65
|
+
Fcm::InvalidProjectId, "Invalid FCM project id. Obtain new api key from FCM service."
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
xit "should ping fcm with 401 error message" do
|
|
70
|
+
allow(@response).to receive(:code).and_return(401)
|
|
71
|
+
allow(@response).to receive(:body).and_return('')
|
|
72
|
+
setup_post_yield(@response)
|
|
73
|
+
expect(Fcm).to receive(:log).twice
|
|
74
|
+
expect(lambda { Fcm.ping(@params) }).to raise_error(
|
|
75
|
+
Fcm::InvalidProjectId, "Invalid FCM project id. Obtain new api key from FCM service."
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should compute fcm_message" do
|
|
80
|
+
expect(Google::Apis::Messages::Message).to receive(:new) do |options|
|
|
81
|
+
expect(options[:token]).to eq(@c.device_pin)
|
|
82
|
+
expect(options[:android]["priority"]).to eq("high")
|
|
83
|
+
expect(options[:android]["restricted_package_name"]).to eq(Rhoconnect.settings[:package_name])
|
|
84
|
+
expect(options[:android]["data"]["do_sync"]).to eq(@s.name)
|
|
85
|
+
expect(options[:android]["data"]["alert"]).to eq("hello world")
|
|
86
|
+
expect(options[:android]["data"]["vibrate"]).to eq("5")
|
|
87
|
+
expect(options[:android]["data"]["sound"]).to eq("hello.mp3")
|
|
88
|
+
expect(options[:android]["notification"]["body"]).to eq("hello world")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
Fcm.fcm_message(Rhoconnect.settings[:package_name], @params)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "should trim empty or nil params from fcm_message" do
|
|
95
|
+
expect(Google::Apis::Messages::Message).to receive(:new) do |options|
|
|
96
|
+
expect(options[:token]).to eq(@c.device_pin)
|
|
97
|
+
expect(options[:android]["priority"]).to eq("high")
|
|
98
|
+
expect(options[:android]["restricted_package_name"]).to eq(Rhoconnect.settings[:package_name])
|
|
99
|
+
expect(options[:android]["data"]["do_sync"]).to eq('')
|
|
100
|
+
expect(options[:android]["data"]["alert"]).to eq(nil)
|
|
101
|
+
expect(options[:android]["data"]["vibrate"]).to eq("5")
|
|
102
|
+
expect(options[:android]["data"]["sound"]).to eq("hello.mp3")
|
|
103
|
+
expect(options[:android]["notification"]["body"]).to eq(nil)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
params = {
|
|
107
|
+
"device_pin" => @c.device_pin,
|
|
108
|
+
"sources" => [],
|
|
109
|
+
"message" => '',
|
|
110
|
+
"vibrate" => '5',
|
|
111
|
+
"sound" => 'hello.mp3'
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
Fcm.fcm_message(Rhoconnect.settings[:package_name], params)
|
|
115
|
+
end
|
|
116
|
+
end
|
data/spec/ping/gcm_spec.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rhoconnect
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 7.5.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rhomobile
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-07-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -90,16 +90,22 @@ dependencies:
|
|
|
90
90
|
name: rubyzip
|
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
|
93
|
-
- - "
|
|
93
|
+
- - ">="
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
95
|
version: 1.2.2
|
|
96
|
+
- - "<"
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: 2.1.0
|
|
96
99
|
type: :runtime
|
|
97
100
|
prerelease: false
|
|
98
101
|
version_requirements: !ruby/object:Gem::Requirement
|
|
99
102
|
requirements:
|
|
100
|
-
- - "
|
|
103
|
+
- - ">="
|
|
101
104
|
- !ruby/object:Gem::Version
|
|
102
105
|
version: 1.2.2
|
|
106
|
+
- - "<"
|
|
107
|
+
- !ruby/object:Gem::Version
|
|
108
|
+
version: 2.1.0
|
|
103
109
|
- !ruby/object:Gem::Dependency
|
|
104
110
|
name: connection_pool
|
|
105
111
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -114,6 +120,20 @@ dependencies:
|
|
|
114
120
|
- - "~>"
|
|
115
121
|
- !ruby/object:Gem::Version
|
|
116
122
|
version: 2.2.2
|
|
123
|
+
- !ruby/object:Gem::Dependency
|
|
124
|
+
name: redis-namespace
|
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
|
126
|
+
requirements:
|
|
127
|
+
- - "~>"
|
|
128
|
+
- !ruby/object:Gem::Version
|
|
129
|
+
version: 1.6.0
|
|
130
|
+
type: :runtime
|
|
131
|
+
prerelease: false
|
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
133
|
+
requirements:
|
|
134
|
+
- - "~>"
|
|
135
|
+
- !ruby/object:Gem::Version
|
|
136
|
+
version: 1.6.0
|
|
117
137
|
- !ruby/object:Gem::Dependency
|
|
118
138
|
name: redis
|
|
119
139
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -170,6 +190,48 @@ dependencies:
|
|
|
170
190
|
- - "~>"
|
|
171
191
|
- !ruby/object:Gem::Version
|
|
172
192
|
version: 0.20.3
|
|
193
|
+
- !ruby/object:Gem::Dependency
|
|
194
|
+
name: signet
|
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
|
196
|
+
requirements:
|
|
197
|
+
- - "~>"
|
|
198
|
+
- !ruby/object:Gem::Version
|
|
199
|
+
version: 0.11.0
|
|
200
|
+
type: :runtime
|
|
201
|
+
prerelease: false
|
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
203
|
+
requirements:
|
|
204
|
+
- - "~>"
|
|
205
|
+
- !ruby/object:Gem::Version
|
|
206
|
+
version: 0.11.0
|
|
207
|
+
- !ruby/object:Gem::Dependency
|
|
208
|
+
name: google-api-client
|
|
209
|
+
requirement: !ruby/object:Gem::Requirement
|
|
210
|
+
requirements:
|
|
211
|
+
- - "~>"
|
|
212
|
+
- !ruby/object:Gem::Version
|
|
213
|
+
version: 0.31.0
|
|
214
|
+
type: :runtime
|
|
215
|
+
prerelease: false
|
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
217
|
+
requirements:
|
|
218
|
+
- - "~>"
|
|
219
|
+
- !ruby/object:Gem::Version
|
|
220
|
+
version: 0.31.0
|
|
221
|
+
- !ruby/object:Gem::Dependency
|
|
222
|
+
name: google-api-fcm
|
|
223
|
+
requirement: !ruby/object:Gem::Requirement
|
|
224
|
+
requirements:
|
|
225
|
+
- - "~>"
|
|
226
|
+
- !ruby/object:Gem::Version
|
|
227
|
+
version: 0.1.7
|
|
228
|
+
type: :runtime
|
|
229
|
+
prerelease: false
|
|
230
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
231
|
+
requirements:
|
|
232
|
+
- - "~>"
|
|
233
|
+
- !ruby/object:Gem::Version
|
|
234
|
+
version: 0.1.7
|
|
173
235
|
description: RhoConnect App Integration Server and related command-line utilities
|
|
174
236
|
email: dev@rhomobile.com
|
|
175
237
|
executables:
|
|
@@ -504,6 +566,7 @@ files:
|
|
|
504
566
|
- lib/rhoconnect/model/js_base.rb
|
|
505
567
|
- lib/rhoconnect/ping.rb
|
|
506
568
|
- lib/rhoconnect/ping/apple.rb
|
|
569
|
+
- lib/rhoconnect/ping/fcm.rb
|
|
507
570
|
- lib/rhoconnect/ping/gcm.rb
|
|
508
571
|
- lib/rhoconnect/ping/rhoconnect_push.rb
|
|
509
572
|
- lib/rhoconnect/predefined_adapters/bench_adapter.rb
|
|
@@ -672,6 +735,7 @@ files:
|
|
|
672
735
|
- spec/perf/perf_spec_helper.rb
|
|
673
736
|
- spec/perf/store_perf_spec.rb
|
|
674
737
|
- spec/ping/apple_spec.rb
|
|
738
|
+
- spec/ping/fcm_spec.rb
|
|
675
739
|
- spec/ping/gcm_spec.rb
|
|
676
740
|
- spec/ping/rhoconnect_push_spec.rb
|
|
677
741
|
- spec/predefined_adapters/rho_internal_bench_adapter_controller_js_spec.rb
|
|
@@ -721,8 +785,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
721
785
|
- !ruby/object:Gem::Version
|
|
722
786
|
version: '0'
|
|
723
787
|
requirements: []
|
|
724
|
-
|
|
725
|
-
rubygems_version: 2.4.5.1
|
|
788
|
+
rubygems_version: 3.0.3.1
|
|
726
789
|
signing_key:
|
|
727
790
|
specification_version: 4
|
|
728
791
|
summary: RhoConnect App Integration Server
|
|
@@ -831,6 +894,7 @@ test_files:
|
|
|
831
894
|
- spec/perf/perf_spec_helper.rb
|
|
832
895
|
- spec/perf/store_perf_spec.rb
|
|
833
896
|
- spec/ping/apple_spec.rb
|
|
897
|
+
- spec/ping/fcm_spec.rb
|
|
834
898
|
- spec/ping/gcm_spec.rb
|
|
835
899
|
- spec/ping/rhoconnect_push_spec.rb
|
|
836
900
|
- spec/predefined_adapters/rho_internal_bench_adapter_controller_js_spec.rb
|