gcm_middleware 0.0.2 → 0.0.3
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/gcm_middleware.gemspec +1 -1
- data/lib/gcm_middleware/canonical_id.rb +48 -8
- data/lib/gcm_middleware/version.rb +1 -1
- data/spec/gcm_middleware_spec.rb +2 -2
- data/spec/middleware/canonical_id_spec.rb +70 -40
- data/spec/spec_helper.rb +1 -0
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb36403e61c66e64c2ff8fa8c3503688a1e526d9
|
4
|
+
data.tar.gz: d90d36193d8d59c40da959a508f937cad8d0a4dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b667337bdb8072c193f74f099728fc0770b42fcf6ac126fc09a26fa77f5fb548c912a5b8f7431d3a8ed19e5c42c1fe9e98fa63380eb657665db41f00928f6416
|
7
|
+
data.tar.gz: 6e3fe15c892949d6285b6932041396422a92394066764af863d16227825a25582d5f5bd59b9708ddb1038eeba07a292ae2c3b38e79691a2b4f3b5399c9357200
|
data/gcm_middleware.gemspec
CHANGED
@@ -19,9 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency 'faraday'
|
22
|
-
spec.add_dependency 'faraday_middleware'
|
23
22
|
|
24
23
|
spec.add_development_dependency "bundler", "~> 1.7"
|
24
|
+
spec.add_development_dependency "pry"
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
26
|
spec.add_development_dependency "rspec", "~> 3.1"
|
27
27
|
end
|
@@ -1,31 +1,71 @@
|
|
1
1
|
require 'faraday'
|
2
|
+
require 'json'
|
2
3
|
|
3
4
|
module GCMMiddleware
|
4
5
|
class CanonicalId < Faraday::Middleware
|
6
|
+
GCM_PATH = '/gcm/send'.freeze
|
7
|
+
GCM_REGISTRATION_ID_KEY = 'registration_ids'.freeze
|
8
|
+
GCM_RESULTS_KEY = 'results'.freeze
|
9
|
+
ORIGINAL_ID_KEY = 'original_id'.freeze
|
10
|
+
|
5
11
|
def call(env)
|
6
|
-
save_ids(env.body)
|
12
|
+
save_ids(env.body) if should_save_ids?(env)
|
7
13
|
|
8
14
|
@app.call(env).on_complete do |env|
|
9
|
-
|
15
|
+
if should_inject_ids? env
|
16
|
+
env.body = injected_response_body(env.body)
|
17
|
+
end
|
10
18
|
end
|
11
19
|
end
|
12
20
|
|
13
21
|
private
|
14
22
|
|
15
|
-
attr_reader :registration_ids
|
23
|
+
attr_reader :registration_ids, :has_saved_ids
|
24
|
+
|
25
|
+
def injected_response_body(body)
|
26
|
+
if body.is_a? Hash
|
27
|
+
set_ids(body)
|
28
|
+
else
|
29
|
+
set_ids(JSON.parse(body)).to_json
|
30
|
+
end
|
31
|
+
end
|
16
32
|
|
17
|
-
def
|
18
|
-
body
|
19
|
-
|
33
|
+
def set_ids(body)
|
34
|
+
body.tap do |b|
|
35
|
+
b.fetch(GCM_RESULTS_KEY, []).each_with_index do |result, i|
|
36
|
+
result[ORIGINAL_ID_KEY] = registration_ids[i]
|
37
|
+
end
|
20
38
|
end
|
21
39
|
end
|
22
40
|
|
41
|
+
def should_save_ids?(env)
|
42
|
+
@has_saved_ids = is_gcm_url?(env.url) && env.body
|
43
|
+
end
|
44
|
+
|
23
45
|
def save_ids(body)
|
24
|
-
@registration_ids = body.fetch(
|
46
|
+
@registration_ids = parse(body).fetch(GCM_REGISTRATION_ID_KEY, [])
|
47
|
+
end
|
48
|
+
|
49
|
+
def should_inject_ids?(env)
|
50
|
+
has_saved_ids &&
|
51
|
+
is_success?(env.status) &&
|
52
|
+
has_registration_ids?
|
25
53
|
end
|
26
54
|
|
27
|
-
def has_registration_ids
|
55
|
+
def has_registration_ids?
|
28
56
|
registration_ids && registration_ids.any?
|
29
57
|
end
|
58
|
+
|
59
|
+
def parse(body)
|
60
|
+
body.is_a?(String) ? JSON.parse(body) : body
|
61
|
+
end
|
62
|
+
|
63
|
+
def is_success?(status)
|
64
|
+
status == 200
|
65
|
+
end
|
66
|
+
|
67
|
+
def is_gcm_url?(url)
|
68
|
+
url.path == GCM_PATH
|
69
|
+
end
|
30
70
|
end
|
31
71
|
end
|
data/spec/gcm_middleware_spec.rb
CHANGED
@@ -22,13 +22,13 @@ describe GCMMiddleware do
|
|
22
22
|
f.use :gcm_canonical_id
|
23
23
|
|
24
24
|
f.adapter :test do |stub|
|
25
|
-
stub.post('/
|
25
|
+
stub.post('/gcm/send') { |env| [ 200, {}, {'results' => [{}]} ] }
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'registers :gcm_canonical_id' do
|
31
|
-
response = faraday.post('
|
31
|
+
response = faraday.post('/gcm/send', { 'registration_ids' => ['1'] })
|
32
32
|
|
33
33
|
expect(response.body['results'][0]['original_id']).to eq '1'
|
34
34
|
end
|
@@ -1,74 +1,104 @@
|
|
1
|
+
|
1
2
|
describe GCMMiddleware::CanonicalId do
|
3
|
+
let(:response) { faraday.post(path, request_body) }
|
4
|
+
let(:path) { '/gcm/send' }
|
5
|
+
let(:status_code) { 200 }
|
6
|
+
let(:raw_response) { {} }
|
7
|
+
let(:response_object) { [status_code, {}, raw_response] }
|
2
8
|
let(:faraday) do
|
3
9
|
Faraday.new('http://www.example.com') do |builder|
|
4
10
|
builder.use GCMMiddleware::CanonicalId
|
5
11
|
|
6
12
|
builder.adapter :test do |stub|
|
7
|
-
stub.post('/
|
8
|
-
stub.post('/
|
13
|
+
stub.post('/gcm/send') { |env| response_object }
|
14
|
+
stub.post('/other') { |env| [ 200, {}, raw_response ] }
|
9
15
|
end
|
10
16
|
end
|
11
17
|
end
|
12
|
-
let(:
|
13
|
-
|
14
|
-
context 'with no body' do
|
15
|
-
it 'does not modify request' do
|
16
|
-
response = faraday.post '/test', nil
|
18
|
+
let(:request_body) { nil }
|
17
19
|
|
18
|
-
|
20
|
+
shared_examples 'a normal request' do
|
21
|
+
it 'does not modify request or response' do
|
22
|
+
expect(response.body).to eq(raw_response)
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
22
|
-
context '
|
23
|
-
|
26
|
+
context 'with no request body' do
|
27
|
+
it_behaves_like 'a normal request'
|
28
|
+
end
|
24
29
|
|
25
|
-
|
26
|
-
|
30
|
+
context 'when it is not the gcm path' do
|
31
|
+
let(:path) { '/other' }
|
32
|
+
let(:raw_response) { { 'foo' => 'bar' } }
|
33
|
+
let(:request_body) { { 'registration_ids' => ['1'] } }
|
27
34
|
|
28
|
-
|
29
|
-
end
|
35
|
+
it_behaves_like 'a normal request'
|
30
36
|
end
|
31
37
|
|
32
|
-
context '
|
33
|
-
let(:
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
}
|
45
|
-
]
|
38
|
+
context 'when a error is thrown' do
|
39
|
+
let(:status_code) { 500 }
|
40
|
+
let(:request_body) { {'registration_ids' => ['1']} }
|
41
|
+
|
42
|
+
it_behaves_like 'a normal request'
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'with a request body' do
|
46
|
+
context 'with no registration ids' do
|
47
|
+
let(:body) { {'foo' => 'bar'} }
|
48
|
+
|
49
|
+
it_behaves_like 'a normal request'
|
46
50
|
end
|
47
|
-
let(:body) { {'registration_ids' => ['first-id', 'second-id']} }
|
48
51
|
|
49
|
-
|
50
|
-
|
52
|
+
shared_examples 'a gcm request' do
|
53
|
+
it 'stores the original id in the results' do
|
54
|
+
body = response.body
|
55
|
+
|
56
|
+
results = body.is_a?(String) ? JSON.parse(body)['results'] : body['results']
|
51
57
|
|
52
|
-
|
53
|
-
expect(results[0]).to eq({
|
58
|
+
expect(results[0]).to eq({
|
54
59
|
'message_id' => 'message-1',
|
55
60
|
'registration_id' => 'registration-1',
|
56
61
|
'error' => nil,
|
57
62
|
'original_id' => 'first-id'
|
58
|
-
|
59
|
-
|
63
|
+
})
|
64
|
+
|
65
|
+
expect(results[1]).to eq({
|
60
66
|
'message_id' => 'message-2',
|
61
67
|
'registration_id' => 'registration-2',
|
62
68
|
'error' => nil,
|
63
69
|
'original_id' => 'second-id'
|
64
|
-
|
70
|
+
})
|
71
|
+
end
|
65
72
|
end
|
66
73
|
|
67
|
-
context 'with
|
68
|
-
|
69
|
-
|
74
|
+
context 'with registration ids' do
|
75
|
+
let(:request_body) do
|
76
|
+
{'registration_ids' => ['first-id', 'second-id']}
|
77
|
+
end
|
78
|
+
let(:raw_response) do
|
79
|
+
{ 'results' =>
|
80
|
+
[
|
81
|
+
{
|
82
|
+
'message_id' => 'message-1',
|
83
|
+
'registration_id' => 'registration-1',
|
84
|
+
'error' => nil
|
85
|
+
},
|
86
|
+
{
|
87
|
+
'message_id' => 'message-2',
|
88
|
+
'registration_id' => 'registration-2',
|
89
|
+
'error' => nil
|
90
|
+
}
|
91
|
+
]
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
it_behaves_like 'a gcm request'
|
96
|
+
|
97
|
+
context 'with json request' do
|
98
|
+
let(:response_object) { [status_code, {}, raw_response.to_json] }
|
99
|
+
let(:response) { faraday.post(path, request_body.to_json) }
|
70
100
|
|
71
|
-
|
101
|
+
it_behaves_like 'a gcm request'
|
72
102
|
end
|
73
103
|
end
|
74
104
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gcm_middleware
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Trevor John
|
@@ -25,33 +25,33 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
type: :
|
33
|
+
version: '1.7'
|
34
|
+
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '1.7'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|