gcm_middleware 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ac61ade0afe4dbe472d9eadd91962d9f52e1df20
4
- data.tar.gz: 2747f613ef9131048a6658c7372260d6254f949a
3
+ metadata.gz: bb36403e61c66e64c2ff8fa8c3503688a1e526d9
4
+ data.tar.gz: d90d36193d8d59c40da959a508f937cad8d0a4dd
5
5
  SHA512:
6
- metadata.gz: 218463a6fe419556cee7aeef96708a7f6e93b95061141e171389349f59b1c73dd04ca2bec760260c86d68d5dd2a9d9335517653dfec2ce413559bd55674d0986
7
- data.tar.gz: b8c545b3d5504c40535a9a831e77e1d4f0acc484c2bfc53d16581572253d54f28d7ce9c66393caf3f1fdd3ee9510ac0c6770b8a4ae929c36a3907ac14f4e5912
6
+ metadata.gz: b667337bdb8072c193f74f099728fc0770b42fcf6ac126fc09a26fa77f5fb548c912a5b8f7431d3a8ed19e5c42c1fe9e98fa63380eb657665db41f00928f6416
7
+ data.tar.gz: 6e3fe15c892949d6285b6932041396422a92394066764af863d16227825a25582d5f5bd59b9708ddb1038eeba07a292ae2c3b38e79691a2b4f3b5399c9357200
@@ -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
- inject_original_ids(env.body) if has_registration_ids && env.body
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 inject_original_ids(body)
18
- body['results'].each_with_index do |result, i|
19
- result['original_id'] = registration_ids[i]
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('registration_ids', []) if body
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
@@ -1,3 +1,3 @@
1
1
  module GCMMiddleware
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -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('/test') { |env| [ 200, {}, {'results' => [{}]} ] }
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('test', { 'registration_ids' => ['1'] })
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('/test') { |env| [ 200, {}, {'results' => raw_results} ] }
8
- stub.post('/error') { |env| [ 200, {}, nil ] }
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(:raw_results) { [] }
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
- expect(response.body).to eq({'results' => []})
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 'when no registration ids' do
23
- let(:body) { {'foo' => 'bar'} }
26
+ context 'with no request body' do
27
+ it_behaves_like 'a normal request'
28
+ end
24
29
 
25
- it 'does nothing with the request' do
26
- response = faraday.post '/test', body
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
- expect(response.body).to eq({'results' => []})
29
- end
35
+ it_behaves_like 'a normal request'
30
36
  end
31
37
 
32
- context 'with registration ids' do
33
- let(:raw_results) do
34
- [
35
- {
36
- 'message_id' => 'message-1',
37
- 'registration_id' => 'registration-1',
38
- 'error' => nil
39
- },
40
- {
41
- 'message_id' => 'message-2',
42
- 'registration_id' => 'registration-2',
43
- 'error' => nil
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
- it 'stores the original ids in the response' do
50
- response = faraday.post '/test', body
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
- results = response.body['results']
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
- expect(results[1]).to eq({
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 no response body' do
68
- it 'does not throw exception' do
69
- response = faraday.post '/error', body
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
- expect(response.body).to be_nil
101
+ it_behaves_like 'a gcm request'
72
102
  end
73
103
  end
74
104
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'gcm_middleware'
2
+ require 'pry'
2
3
 
3
4
  RSpec.configure do |config|
4
5
  config.expect_with :rspec do |expectations|
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.2
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: faraday_middleware
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
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: '0'
40
+ version: '1.7'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.7'
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: '1.7'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement