gcm 0.0.4 → 0.0.5
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/.travis.yml +2 -0
- data/Gemfile +1 -1
- data/README.md +19 -1
- data/gcm.gemspec +7 -4
- data/lib/gcm.rb +20 -3
- data/spec/gcm_spec.rb +44 -2
- data/spec/spec_helper.rb +3 -1
- metadata +14 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48e5d1ac537918960d5702a017f448561502ad78
|
4
|
+
data.tar.gz: 2524bc50e068dbd90fc0b2d1c5eb012011edc963
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35fb8ca2fd2b83e4226a6d24a034923ce5a2281accf4261c1663873f2d3cd79c47306dcca9d9dd1e79a97ffeb3ba21477d8bc3102c63f441610634bdb3263c86
|
7
|
+
data.tar.gz: 994846feefe82634bd46e0aa530367cc8e7514cb635a9d977cc29dfdd9859bf1c3b3820258d9a90e6772462e4d47552c68d6219e1421dc7c3f4e28b34a1c13b9
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Google Cloud Messaging for Android (GCM)
|
2
|
-
[](http://travis-ci.org/spacialdb/gcm)
|
3
3
|
|
4
4
|
GCM sends notifications to Android devices via [GCM](http://developer.android.com/guide/google/gcm/gcm.html).
|
5
5
|
|
@@ -11,6 +11,12 @@ GCM sends notifications to Android devices via [GCM](http://developer.android.co
|
|
11
11
|
|
12
12
|
An Android device running 2.0 or newer and an API key as per [GCM getting started guide](http://developer.android.com/guide/google/gcm/gs.html).
|
13
13
|
|
14
|
+
One of the following, tested Ruby versions:
|
15
|
+
|
16
|
+
* `1.9.3`
|
17
|
+
* `2.0.0`
|
18
|
+
* `2.1.0`
|
19
|
+
|
14
20
|
##Usage
|
15
21
|
|
16
22
|
Sending notifications:
|
@@ -30,6 +36,18 @@ If the above code is stored in a file like `trigger_gcm.rb`, thats how you can c
|
|
30
36
|
|
31
37
|
$ ruby -rubygems trigger_gcm.rb
|
32
38
|
|
39
|
+
## Blog posts
|
40
|
+
|
41
|
+
* [How to send iOS and Android notifications from your Rails backend](http://blog.wellwith.me/how-to-send-ios-and-android-notifications-from-your-rails-backend)
|
42
|
+
|
43
|
+
## ChangeLog
|
44
|
+
|
45
|
+
### Version 0.0.5
|
46
|
+
|
47
|
+
* Added support for canonical registration ID
|
48
|
+
* Only support Ruby versions [>= 1.9.3](https://www.ruby-lang.org/en/news/2014/01/10/ruby-1-9-3-will-end-on-2015/)
|
49
|
+
* Fixed Rspec deprecation warnings for Rspec 3.0.0.beta
|
50
|
+
|
33
51
|
##MIT License
|
34
52
|
|
35
53
|
* Copyright (c) 2012 Kashif Rasul and Shoaib Burq. See LICENSE.txt for details.
|
data/gcm.gemspec
CHANGED
@@ -3,14 +3,17 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "gcm"
|
6
|
-
s.version = "0.0.
|
7
|
-
s.
|
8
|
-
s.
|
9
|
-
s.
|
6
|
+
s.version = "0.0.5"
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Kashif Rasul", "Shoaib Burq"]
|
9
|
+
s.email = ["kashif@spacialdb.com", "shoaib@spacialdb.com"]
|
10
|
+
s.homepage = "https://github.com/spacialdb/gcm"
|
10
11
|
s.summary = %q{send data to Android applications on Android devices}
|
11
12
|
s.description = %q{gcm is a service that helps developers send data from servers to their Android applications on Android devices.}
|
12
13
|
s.license = "MIT"
|
13
14
|
|
15
|
+
s.required_ruby_version = '>= 1.9.3'
|
16
|
+
|
14
17
|
s.rubyforge_project = "gcm"
|
15
18
|
|
16
19
|
s.files = `git ls-files`.split("\n")
|
data/lib/gcm.rb
CHANGED
@@ -39,7 +39,7 @@ class GCM
|
|
39
39
|
}
|
40
40
|
|
41
41
|
response = self.class.post('', params)
|
42
|
-
build_response(response)
|
42
|
+
build_response(response, registration_ids)
|
43
43
|
end
|
44
44
|
|
45
45
|
private
|
@@ -48,11 +48,11 @@ class GCM
|
|
48
48
|
{ :registration_ids => registration_ids }.merge(options)
|
49
49
|
end
|
50
50
|
|
51
|
-
def build_response(response)
|
51
|
+
def build_response(response, registration_ids)
|
52
52
|
case response.code
|
53
53
|
when 200
|
54
54
|
body = response.body || {}
|
55
|
-
{ :response => 'success', :body => body, :headers => response.headers, :status_code => response.code }
|
55
|
+
{ :response => 'success', :body => body, :headers => response.headers, :status_code => response.code, :canonical_ids => build_canonical_ids(body, registration_ids) }
|
56
56
|
when 400
|
57
57
|
{ :response => 'Only applies for JSON requests. Indicates that the request could not be parsed as JSON, or it contained invalid fields.', :status_code => response.code }
|
58
58
|
when 401
|
@@ -63,4 +63,21 @@ class GCM
|
|
63
63
|
{ :response => 'Server is temporarily unavailable.', :status_code => response.code }
|
64
64
|
end
|
65
65
|
end
|
66
|
+
|
67
|
+
def build_canonical_ids(body, registration_ids)
|
68
|
+
canonical_ids = []
|
69
|
+
unless body.empty?
|
70
|
+
body = JSON.parse(body)
|
71
|
+
if body['canonical_ids'] > 0
|
72
|
+
body['results'].each_with_index do |result, index|
|
73
|
+
canonical_ids << { :old => registration_ids[index], :new => result['registration_id'] } if has_canonical_id?(result)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
canonical_ids
|
78
|
+
end
|
79
|
+
|
80
|
+
def has_canonical_id?(result)
|
81
|
+
!result['registration_id'].nil?
|
82
|
+
end
|
66
83
|
end
|
data/spec/gcm_spec.rb
CHANGED
@@ -36,13 +36,13 @@ describe GCM do
|
|
36
36
|
|
37
37
|
it "should send notification using POST to GCM server" do
|
38
38
|
gcm = GCM.new(api_key)
|
39
|
-
gcm.send_notification(registration_ids).should eq({:response => 'success', :body => {}, :headers => {}, :status_code => 200})
|
39
|
+
gcm.send_notification(registration_ids).should eq({:response => 'success', :body => {}, :headers => {}, :status_code => 200, :canonical_ids => []})
|
40
40
|
end
|
41
41
|
|
42
42
|
context "send notification with data" do
|
43
43
|
let!(:stub_with_data){
|
44
44
|
stub_request(:post, GCM::PUSH_URL).
|
45
|
-
with(:body => "{\"data\":{\"score\":\"5x1\",\"time\":\"15:10\"}
|
45
|
+
with(:body => "{\"registration_ids\":[\"42\"],\"data\":{\"score\":\"5x1\",\"time\":\"15:10\"}}",
|
46
46
|
:headers => valid_request_headers ).
|
47
47
|
to_return(:status => 200, :body => "", :headers => {})
|
48
48
|
}
|
@@ -145,5 +145,47 @@ describe GCM do
|
|
145
145
|
end
|
146
146
|
end
|
147
147
|
end
|
148
|
+
|
149
|
+
context " when send_notification responds canonical_ids" do
|
150
|
+
|
151
|
+
let(:mock_request_attributes) do
|
152
|
+
{
|
153
|
+
:body => valid_request_body.to_json,
|
154
|
+
:headers => valid_request_headers
|
155
|
+
}
|
156
|
+
end
|
157
|
+
|
158
|
+
let(:valid_response_body_with_canonical_ids) do
|
159
|
+
{
|
160
|
+
:canonical_ids => 1, :results => [{:registration_id => "43", :message_id => "0:1385025861956342%572c22801bb3" }]
|
161
|
+
}
|
162
|
+
end
|
163
|
+
|
164
|
+
subject { GCM.new(api_key) }
|
165
|
+
|
166
|
+
|
167
|
+
before do
|
168
|
+
stub_request(:post, GCM::PUSH_URL).with(
|
169
|
+
mock_request_attributes
|
170
|
+
).to_return(
|
171
|
+
# ref: http://developer.android.com/guide/google/gcm/gcm.html#success
|
172
|
+
:body => valid_response_body_with_canonical_ids.to_json,
|
173
|
+
:headers => {},
|
174
|
+
:status => 200
|
175
|
+
)
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should contain canonical_ids" do
|
179
|
+
response = subject.send_notification(registration_ids)
|
180
|
+
|
181
|
+
response.should eq({
|
182
|
+
:headers => {},
|
183
|
+
:canonical_ids => [{:old => "42", :new => "43"}],
|
184
|
+
:status_code => 200,
|
185
|
+
:response => 'success',
|
186
|
+
:body => "{\"canonical_ids\":1,\"results\":[{\"registration_id\":\"43\",\"message_id\":\"0:1385025861956342%572c22801bb3\"}]}"
|
187
|
+
})
|
188
|
+
end
|
189
|
+
end
|
148
190
|
end
|
149
191
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,7 +5,9 @@ require 'webmock/rspec'
|
|
5
5
|
require 'gcm'
|
6
6
|
|
7
7
|
RSpec.configure do |config|
|
8
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
8
|
config.run_all_when_everything_filtered = true
|
9
|
+
config.expect_with :rspec do |c|
|
10
|
+
c.syntax = [:should, :expect]
|
11
|
+
end
|
10
12
|
# config.filter_run :focus
|
11
13
|
end
|
metadata
CHANGED
@@ -1,58 +1,56 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gcm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Amro Mousa
|
8
7
|
- Kashif Rasul
|
9
8
|
- Shoaib Burq
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2014-01-10 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: httparty
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
17
|
requirements:
|
19
|
-
- -
|
18
|
+
- - ">="
|
20
19
|
- !ruby/object:Gem::Version
|
21
20
|
version: '0'
|
22
21
|
type: :runtime
|
23
22
|
prerelease: false
|
24
23
|
version_requirements: !ruby/object:Gem::Requirement
|
25
24
|
requirements:
|
26
|
-
- -
|
25
|
+
- - ">="
|
27
26
|
- !ruby/object:Gem::Version
|
28
27
|
version: '0'
|
29
28
|
- !ruby/object:Gem::Dependency
|
30
29
|
name: json
|
31
30
|
requirement: !ruby/object:Gem::Requirement
|
32
31
|
requirements:
|
33
|
-
- -
|
32
|
+
- - ">="
|
34
33
|
- !ruby/object:Gem::Version
|
35
34
|
version: '0'
|
36
35
|
type: :runtime
|
37
36
|
prerelease: false
|
38
37
|
version_requirements: !ruby/object:Gem::Requirement
|
39
38
|
requirements:
|
40
|
-
- -
|
39
|
+
- - ">="
|
41
40
|
- !ruby/object:Gem::Version
|
42
41
|
version: '0'
|
43
42
|
description: gcm is a service that helps developers send data from servers to their
|
44
43
|
Android applications on Android devices.
|
45
44
|
email:
|
46
|
-
- amromousa@gmail.com
|
47
45
|
- kashif@spacialdb.com
|
48
46
|
- shoaib@spacialdb.com
|
49
47
|
executables: []
|
50
48
|
extensions: []
|
51
49
|
extra_rdoc_files: []
|
52
50
|
files:
|
53
|
-
- .gitignore
|
54
|
-
- .rspec
|
55
|
-
- .travis.yml
|
51
|
+
- ".gitignore"
|
52
|
+
- ".rspec"
|
53
|
+
- ".travis.yml"
|
56
54
|
- Gemfile
|
57
55
|
- LICENSE.txt
|
58
56
|
- README.md
|
@@ -61,7 +59,7 @@ files:
|
|
61
59
|
- lib/gcm.rb
|
62
60
|
- spec/gcm_spec.rb
|
63
61
|
- spec/spec_helper.rb
|
64
|
-
homepage:
|
62
|
+
homepage: https://github.com/spacialdb/gcm
|
65
63
|
licenses:
|
66
64
|
- MIT
|
67
65
|
metadata: {}
|
@@ -71,17 +69,17 @@ require_paths:
|
|
71
69
|
- lib
|
72
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
73
71
|
requirements:
|
74
|
-
- -
|
72
|
+
- - ">="
|
75
73
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
74
|
+
version: 1.9.3
|
77
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
76
|
requirements:
|
79
|
-
- -
|
77
|
+
- - ">="
|
80
78
|
- !ruby/object:Gem::Version
|
81
79
|
version: '0'
|
82
80
|
requirements: []
|
83
81
|
rubyforge_project: gcm
|
84
|
-
rubygems_version: 2.
|
82
|
+
rubygems_version: 2.2.1
|
85
83
|
signing_key:
|
86
84
|
specification_version: 4
|
87
85
|
summary: send data to Android applications on Android devices
|