gcm_for_chrome 0.1.0 → 0.2.0
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.
- data/README.md +2 -4
- data/lib/gcm_for_chrome.rb +19 -9
- data/lib/gcm_for_chrome/version.rb +1 -1
- data/spec/gcm_for_chrome_spec.rb +3 -8
- metadata +38 -13
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Google Cloud Messaging for Chrome (GCM for Chrome)
|
2
|
-
[](https://travis-ci.org/henteko/gcm_for_chrome)
|
2
|
+
[](https://travis-ci.org/henteko/gcm_for_chrome)
|
3
3
|
|
4
4
|
GCM for Chrome sends notifications to Chrome extensions via [GCM for Chrome](http://developer.chrome.com/apps/cloudMessaging.html)
|
5
5
|
|
@@ -21,9 +21,7 @@ Or install it yourself as:
|
|
21
21
|
## Usage
|
22
22
|
|
23
23
|
```ruby
|
24
|
-
gcmc = GcmForChrome.new
|
25
|
-
# Set up access_token
|
26
|
-
gcmc.set_access_token('your_client_id', 'your_client_secret', 'your_refresh_token')
|
24
|
+
gcmc = GcmForChrome.new('your_client_id', 'your_client_secret', 'your_refresh_token')
|
27
25
|
|
28
26
|
share_data = {
|
29
27
|
:title => 'test',
|
data/lib/gcm_for_chrome.rb
CHANGED
@@ -8,32 +8,42 @@ class GcmForChrome
|
|
8
8
|
NOTIFICATION_URL = 'https://www.googleapis.com/gcm_for_chrome/v1/messages'
|
9
9
|
REFRESH_TOKEN_URL = 'https://accounts.google.com/o/oauth2/token'
|
10
10
|
|
11
|
-
def initialize()
|
12
|
-
@access_token =
|
11
|
+
def initialize(client_id = nil, client_secret = nil, refresh_token = nil)
|
12
|
+
@access_token = nil
|
13
|
+
@access_token_expires_at = nil
|
14
|
+
@client_id = client_id
|
15
|
+
@client_secret = client_secret
|
16
|
+
@refresh_token = refresh_token
|
13
17
|
end
|
14
18
|
|
15
19
|
def send_notification(channel_ids, subchannel_id, payload)
|
20
|
+
if @access_token_expires_at.nil? or (@access_token_expires_at and @access_token_expires_at < (Time.new + 10))
|
21
|
+
set_access_token(@client_id, @client_secret, @refresh_token)
|
22
|
+
end
|
16
23
|
check_notification_value(channel_ids, subchannel_id, payload)
|
17
|
-
initheader = init_header
|
24
|
+
initheader = init_header
|
18
25
|
|
19
26
|
responses = []
|
20
27
|
channel_ids.each do |channel_id|
|
21
28
|
_payload = create_notification_payload(
|
22
29
|
channel_id, subchannel_id, payload
|
23
|
-
).to_json
|
30
|
+
).to_json
|
24
31
|
responses.push(restclient_post(NOTIFICATION_URL, _payload, initheader))
|
25
32
|
end
|
26
|
-
|
33
|
+
|
27
34
|
return responses
|
28
35
|
end
|
29
36
|
|
30
37
|
def set_access_token(client_id, client_secret, refresh_token)
|
31
|
-
@
|
38
|
+
@client_id ||= client_id
|
39
|
+
@client_secret ||= client_secret
|
40
|
+
@refresh_token ||= refresh_token
|
41
|
+
@access_token, @access_token_expires_at = get_access_token(@client_id, @client_secret, @refresh_token)
|
32
42
|
end
|
33
43
|
|
34
44
|
def get_access_token(client_id, client_secret, refresh_token)
|
35
45
|
response = refresh_access_token(client_id, client_secret, refresh_token)
|
36
|
-
return response['access_token']
|
46
|
+
return response['access_token'], Time.at(Time.now + response['expires_in'].to_i)
|
37
47
|
end
|
38
48
|
|
39
49
|
def refresh_access_token(client_id, client_secret, refresh_token)
|
@@ -54,7 +64,7 @@ class GcmForChrome
|
|
54
64
|
"subchannelId" => subchannel_id,
|
55
65
|
"payload" => payload
|
56
66
|
}
|
57
|
-
end
|
67
|
+
end
|
58
68
|
|
59
69
|
def create_refresh_access_token_payload(client_id, client_secret, refresh_token)
|
60
70
|
return {
|
@@ -69,7 +79,7 @@ class GcmForChrome
|
|
69
79
|
|
70
80
|
def check_notification_value(channel_ids, subchannel_id, payload)
|
71
81
|
raise 'Not access_token. Please set_access_token.' if @access_token == '' || @access_token == nil
|
72
|
-
raise 'channel_ids blank.' if channel_ids == [] || channel_ids == nil ||channel_ids == ''
|
82
|
+
raise 'channel_ids blank.' if channel_ids == [] || channel_ids == nil ||channel_ids == ''
|
73
83
|
raise 'subchannel_id blank.' if subchannel_id == '' || subchannel_id == nil
|
74
84
|
raise 'payload blank.' if payload == '' || payload == nil
|
75
85
|
end
|
data/spec/gcm_for_chrome_spec.rb
CHANGED
@@ -3,21 +3,21 @@ require 'json'
|
|
3
3
|
|
4
4
|
describe GcmForChrome do
|
5
5
|
ACCESS_TOKEN = 'TESTACCESS_TOKEN'
|
6
|
-
CLIENT_ID = 'TESTCLIENT_ID'
|
6
|
+
CLIENT_ID = 'TESTCLIENT_ID'
|
7
7
|
CLIENT_SECRET = 'TESTCLIENT_SECRET'
|
8
8
|
REFRESH_TOKEN = 'TESTREFRESH_TOKEN'
|
9
9
|
|
10
10
|
before do
|
11
11
|
RestClient.stub(:post) do |url, payload, header|
|
12
12
|
{
|
13
|
-
access_token: ACCESS_TOKEN
|
13
|
+
access_token: ACCESS_TOKEN
|
14
14
|
}.to_json
|
15
15
|
end
|
16
16
|
@gcmc = GcmForChrome.new
|
17
17
|
end
|
18
18
|
|
19
19
|
it "get_access_token" do
|
20
|
-
access_token = @gcmc.get_access_token(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN)
|
20
|
+
access_token, access_token_expires_at = @gcmc.get_access_token(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN)
|
21
21
|
access_token.should == ACCESS_TOKEN
|
22
22
|
end
|
23
23
|
|
@@ -68,11 +68,6 @@ describe GcmForChrome do
|
|
68
68
|
subchannel_id = '0'
|
69
69
|
payload = {title: 'test'}.to_json
|
70
70
|
|
71
|
-
it "access_token blank" do
|
72
|
-
proc {
|
73
|
-
@gcmc.send_notification(channel_ids, subchannel_id, payload)
|
74
|
-
}.should raise_error
|
75
|
-
end
|
76
71
|
it "channel_ids blank" do
|
77
72
|
proc {
|
78
73
|
@gcmc.send_notification([], subchannel_id, payload)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gcm_for_chrome
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: json
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rake
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: 0.9.2.2
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.9.2.2
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rdoc
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '3.12'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '3.12'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: rspec
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,7 +85,12 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
description: Google Cloud Message for Chrome gem
|
70
95
|
email:
|
71
96
|
- henteko07@gmail.com
|
@@ -105,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
130
|
version: '0'
|
106
131
|
requirements: []
|
107
132
|
rubyforge_project:
|
108
|
-
rubygems_version: 1.8.
|
133
|
+
rubygems_version: 1.8.23
|
109
134
|
signing_key:
|
110
135
|
specification_version: 3
|
111
136
|
summary: Google Cloud Message for Chrome gem
|