pushbullet-ruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 61f287161d7639aa2b93b18eec1da8bbb4cffb53
4
+ data.tar.gz: f2691f77adc6853cc03944af01519f9b732424d9
5
+ SHA512:
6
+ metadata.gz: 082a09f965baaf7de420161304c851574969c35af79beb2b52efc427e631ba35d733e2162f616eb8b4bb3a38611acc532bca3c945d63bf3f1dc21089060cf533
7
+ data.tar.gz: 02fbfc35a761405e09e4c636ea811b282d0f4c4b7e47c128bd02ea9cc95604236b403985daabe582c9ff2e05ca6df3c0c0ee3cbb7c4b5b02a7c7b7bfa8a5c8a2
data/lib/pushbullet.rb ADDED
@@ -0,0 +1,225 @@
1
+ # coding: UTF-8
2
+
3
+ # lib/pushbullet.rb
4
+ #
5
+ # library for sending various messages through Pushbullet
6
+ # (api: https://docs.pushbullet.com/http/)
7
+ #
8
+ # created on : 2014.12.17
9
+ # last update: 2014.12.18
10
+ #
11
+ # by meinside@gmail.com
12
+
13
+ require 'net/http'
14
+ require 'uri'
15
+ require 'base64'
16
+ require 'json'
17
+
18
+ # v2 api
19
+ require_relative 'v2/push'
20
+ require_relative 'v2/users'
21
+ require_relative 'v2/devices'
22
+ require_relative 'v2/contacts'
23
+ require_relative 'v2/subscriptions'
24
+
25
+ module Pushbullet
26
+ @@verbose = false
27
+ @@access_token = nil
28
+
29
+ module V2
30
+ private
31
+
32
+ # post request to Pushbullet with given url and params
33
+ # @param url [String] api url
34
+ # @param params [Hash] post parameters
35
+ # @return [Net::HTTPResponse]
36
+ def self.request(url, params)
37
+ Pushbullet.post_data(url, params.to_json, 'application/json', {
38
+ 'Authorization' => "Basic #{Base64.encode64(Pushbullet::get_access_token).chomp}",
39
+ })
40
+ end
41
+
42
+ # get request to Pushbullet with given url and params
43
+ # @param url [String] api url
44
+ # @param params [Hash] get parameters
45
+ # @return [Net::HTTPResponse]
46
+ def self.request_get(url, params)
47
+ Pushbullet.get(url, params, {
48
+ 'Authorization' => "Basic #{Base64.encode64(Pushbullet::get_access_token).chomp}",
49
+ })
50
+ end
51
+
52
+ # delete request to Pushbullet with given url and params
53
+ # @param url [String] api url
54
+ # @param params [Hash] delete parameters
55
+ # @return [Net::HTTPResponse]
56
+ def self.request_delete(url, params)
57
+ Pushbullet.delete(url, params, {
58
+ 'Authorization' => "Basic #{Base64.encode64(Pushbullet::get_access_token).chomp}",
59
+ })
60
+ end
61
+ end
62
+
63
+ public
64
+
65
+ def self.set_verbose(is_verbose = true)
66
+ @@verbose = is_verbose
67
+ end
68
+
69
+ def self.set_access_token(token)
70
+ @@access_token = token
71
+ end
72
+
73
+ private
74
+
75
+ def self.is_verbose
76
+ @@verbose
77
+ end
78
+
79
+ def self.get_access_token
80
+ unless @@access_token
81
+ puts "* Pushbullet's access token should be set first. (can be found at: https://www.pushbullet.com/account)"
82
+ exit 1
83
+ end
84
+ @@access_token
85
+ end
86
+
87
+ # urlencode given string
88
+ # http://tools.ietf.org/html/rfc3986#section-2.3
89
+ #
90
+ # @param str [String] string to urlencode
91
+ # @param conform_to_rfc3986 [true,false]
92
+ # @return [String] urlencoded string
93
+ def self.urlencode(str, conform_to_rfc3986 = true)
94
+ URI.escape(str.to_s, conform_to_rfc3986 ? Regexp.new("[^#{"-_.~a-zA-Z\\d"}]") : Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
95
+ end
96
+
97
+ # http get
98
+ #
99
+ # @param url [String] get url
100
+ # @param parameters [Hash] post parameters
101
+ # @param additional_headers [Hash] additional HTTP headers
102
+ # @return [Net::HTTPResponse]
103
+ def self.get(url, parameters, additional_headers)
104
+ parameters.each_pair{|key, value|
105
+ unless url.include?("?")
106
+ url += "?"
107
+ else
108
+ url += "&"
109
+ end
110
+ url += "#{Pushbullet.urlencode(key)}=#{Pushbullet.urlencode(value)}"
111
+ }
112
+ uri = URI.parse(url)
113
+ Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https'){|http|
114
+ req = Net::HTTP::Get.new(uri.request_uri)
115
+ unless additional_headers.nil?
116
+ additional_headers.each_pair{|key, value|
117
+ req.add_field(key, value)
118
+ }
119
+ end
120
+ return http.request(req)
121
+ }
122
+ end
123
+
124
+ # http delete
125
+ #
126
+ # @param url [String] delete url
127
+ # @param parameters [Hash] post parameters
128
+ # @param additional_headers [Hash] additional HTTP headers
129
+ # @return [Net::HTTPResponse]
130
+ def self.delete(url, parameters, additional_headers)
131
+ parameters.each_pair{|key, value|
132
+ unless url.include?("?")
133
+ url += "?"
134
+ else
135
+ url += "&"
136
+ end
137
+ url += "#{Pushbullet.urlencode(key)}=#{Pushbullet.urlencode(value)}"
138
+ }
139
+ uri = URI.parse(url)
140
+ Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https'){|http|
141
+ req = Net::HTTP::Delete.new(uri.request_uri)
142
+ unless additional_headers.nil?
143
+ additional_headers.each_pair{|key, value|
144
+ req.add_field(key, value)
145
+ }
146
+ end
147
+ return http.request(req)
148
+ }
149
+ end
150
+
151
+ # http post
152
+ #
153
+ # @param url [String] post url
154
+ # @param parameters [Hash] post parameters
155
+ # @param additional_headers [Hash] additional HTTP headers
156
+ # @return [Net::HTTPResponse]
157
+ def self.post(url, parameters, additional_headers)
158
+ uri = URI.parse(url)
159
+ Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https'){|http|
160
+ req = Net::HTTP::Post.new(uri.request_uri)
161
+ req.set_form_data(parameters, ';')
162
+ additional_headers.each_pair{|key, value|
163
+ req.add_field(key.to_s, value.to_s)
164
+ }
165
+ return http.request(req)
166
+ }
167
+ end
168
+
169
+ # http post data
170
+ #
171
+ # @param url [String] post url
172
+ # @param data [Object] data
173
+ # @param content_type [String] mime type of data
174
+ # @param additional_headers [Hash] additional HTTP headers
175
+ # @return [Net::HTTPResponse]
176
+ def self.post_data(url, data, content_type, additional_headers)
177
+ uri = URI.parse(url)
178
+ Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https'){|http|
179
+ req = Net::HTTP::Post.new(uri.request_uri)
180
+ req.body = data
181
+ req['Content-Type'] = content_type
182
+ additional_headers.each_pair{|key, value|
183
+ req.add_field(key.to_s, value.to_s)
184
+ }
185
+ return http.request(req)
186
+ }
187
+ end
188
+
189
+ # http post multipart
190
+ #
191
+ # @param url [String] post url
192
+ # @param parameters [Hash] post parameters
193
+ # @param additional_headers [Hash] additional HTTP headers
194
+ # @return [Net::HTTPResponse]
195
+ def self.post_multipart(url, parameters, additional_headers)
196
+ uri = URI.parse(url)
197
+ Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https'){|http|
198
+ req = Net::HTTP::Post.new(uri.request_uri)
199
+ boundary = "____boundary_#{Time.now.to_i.to_s}____"
200
+ req["Content-Type"] = "multipart/form-data; boundary=#{boundary}"
201
+ body = ""
202
+ parameters.each_pair{|key, value|
203
+ body << "--#{boundary}\r\n"
204
+ if value.respond_to?(:read) # check if it's a File object
205
+ body << "Content-Disposition: form-data; name=\"#{Pushbullet.urlencode(key)}\"; filename=\"#{File.basename(value.path)}\"\r\n"
206
+ body << "Content-Type: #{MimeMagic.by_path(value.path)}\r\n\r\n"
207
+ body << value.read
208
+ else
209
+ body << "Content-Disposition: form-data; name=\"#{Pushbullet.urlencode(key)}\"\r\n"
210
+ body << "Content-Type: text/plain\r\n\r\n"
211
+ body << value
212
+ end
213
+ body << "\r\n"
214
+ }
215
+ body << "--#{boundary}--\r\n"
216
+ req.body = body
217
+ req["Content-Length"] = req.body.size
218
+ additional_headers.each_pair{|key, value|
219
+ req.add_field(key.to_s, value.to_s)
220
+ }
221
+ return http.request(req)
222
+ }
223
+ end
224
+ end
225
+
@@ -0,0 +1,70 @@
1
+ # coding: UTF-8
2
+
3
+ # lib/v2/contacts.rb
4
+ #
5
+ # functions for Pushbullet contacts api
6
+ #
7
+ # created on : 2014.12.18
8
+ # last update: 2014.12.18
9
+ #
10
+ # by meinside@gmail.com
11
+
12
+ require 'json'
13
+ require 'mimemagic'
14
+
15
+ module Pushbullet
16
+ module V2
17
+ class Contacts
18
+ API_URL = 'https://api.pushbullet.com/v2/contacts'
19
+
20
+ public
21
+
22
+ # get contacts list
23
+ #
24
+ # @return [JSON] result as json
25
+ def self.get
26
+ result = Pushbullet::V2::request_get(API_URL, {})
27
+
28
+ JSON.parse(result.body)
29
+ end
30
+
31
+ # create a new contact
32
+ #
33
+ # @param name [String] nickname of the contact
34
+ # @param email [String] email of the contact
35
+ # @return [JSON] result as json
36
+ def self.create(name, email)
37
+ result = Pushbullet::V2::request(API_URL, {
38
+ name: name,
39
+ email: email,
40
+ })
41
+
42
+ JSON.parse(result.body)
43
+ end
44
+
45
+ # update a contact
46
+ #
47
+ # @param contact_iden [String] contact identifier
48
+ # @param name [String] name of the contact
49
+ # @return [JSON] result as json
50
+ def self.update(contact_iden, name)
51
+ result = Pushbullet::V2::request(API_URL + '/' + contact_iden, {
52
+ name: name,
53
+ })
54
+
55
+ JSON.parse(result.body)
56
+ end
57
+
58
+ # delete a contact
59
+ #
60
+ # @param contact_iden [String] contact identifier
61
+ # @return [JSON] result as json
62
+ def self.delete(contact_iden)
63
+ result = Pushbullet::V2::request_delete(API_URL + '/' + contact_iden, {})
64
+
65
+ JSON.parse(result.body)
66
+ end
67
+ end
68
+ end
69
+ end
70
+
data/lib/v2/devices.rb ADDED
@@ -0,0 +1,68 @@
1
+ # coding: UTF-8
2
+
3
+ # lib/v2/devices.rb
4
+ #
5
+ # functions for Pushbullet devices api
6
+ #
7
+ # created on : 2014.12.18
8
+ # last update: 2014.12.18
9
+ #
10
+ # by meinside@gmail.com
11
+
12
+ require 'json'
13
+ require 'mimemagic'
14
+
15
+ module Pushbullet
16
+ module V2
17
+ class Devices
18
+ API_URL = 'https://api.pushbullet.com/v2/devices'
19
+
20
+ public
21
+
22
+ # get devices list
23
+ #
24
+ # @return [JSON] result as json
25
+ def self.get
26
+ result = Pushbullet::V2::request_get(API_URL, {})
27
+
28
+ JSON.parse(result.body)
29
+ end
30
+
31
+ # create a new device
32
+ #
33
+ # @param nickname [String] nickname of the device
34
+ # @param type [String] type of the device
35
+ # @return [JSON] result as json
36
+ def self.register(nickname, type)
37
+ result = Pushbullet::V2::request(API_URL, {
38
+ nickname: nickname,
39
+ type: type,
40
+ })
41
+
42
+ JSON.parse(result.body)
43
+ end
44
+
45
+ # update a device
46
+ #
47
+ # @param device_iden [String] device identifier
48
+ # @param values [Hash] values to update
49
+ # @return [JSON] result as json
50
+ def self.update(device_iden, values)
51
+ result = Pushbullet::V2::request(API_URL + '/' + device_iden, values)
52
+
53
+ JSON.parse(result.body)
54
+ end
55
+
56
+ # delete a device
57
+ #
58
+ # @param device_iden [String] device identifier
59
+ # @return [JSON] result as json
60
+ def self.delete(device_iden)
61
+ result = Pushbullet::V2::request_delete(API_URL + '/' + device_iden, {})
62
+
63
+ JSON.parse(result.body)
64
+ end
65
+ end
66
+ end
67
+ end
68
+
data/lib/v2/push.rb ADDED
@@ -0,0 +1,195 @@
1
+ # coding: UTF-8
2
+
3
+ # lib/v2/push.rb
4
+ #
5
+ # functions for Pushbullet push api
6
+ #
7
+ # created on : 2014.12.18
8
+ # last update: 2014.12.18
9
+ #
10
+ # by meinside@gmail.com
11
+
12
+ require 'mimemagic'
13
+ require 'json'
14
+
15
+ module Pushbullet
16
+ module V2
17
+ class Push
18
+ API_URL = 'https://api.pushbullet.com/v2/pushes'
19
+
20
+ public
21
+
22
+ # push note
23
+ #
24
+ # @param title [String] title of note
25
+ # @param text [String] body text of note
26
+ # @param recipient [Hash] key-value of either one of: 'email', 'device_iden', 'channel_tag', or 'client_iden' (can be nil)
27
+ # @return [JSON] result as json (nil if error)
28
+ def self.note(title, text, recipient = nil)
29
+ params = {
30
+ type: :note,
31
+ title: title,
32
+ body: text,
33
+ }
34
+ params.merge!(recipient) if recipient
35
+
36
+ result = Pushbullet::V2::request(API_URL, params)
37
+
38
+ case result
39
+ when Net::HTTPOK
40
+ return JSON.parse(result.body)
41
+ else
42
+ puts result.body if Pushbullet.is_verbose
43
+ return nil
44
+ end
45
+ end
46
+
47
+ # push link
48
+ #
49
+ # @param title [String] title of note
50
+ # @param text [String] body text of note
51
+ # @param link [String] url of the link
52
+ # @param recipient [Hash] key-value of either one of: 'email', 'device_iden', 'channel_tag', or 'client_iden' (can be nil)
53
+ # @return [JSON] result as json (nil if error)
54
+ def self.link(title, text, link, recipient = nil)
55
+ params = {
56
+ type: :link,
57
+ title: title,
58
+ body: text,
59
+ url: link,
60
+ }
61
+ params.merge!(recipient) if recipient
62
+
63
+ result = Pushbullet::V2::request(API_URL, params)
64
+
65
+ case result
66
+ when Net::HTTPOK
67
+ return JSON.parse(result.body)
68
+ else
69
+ puts result.body if Pushbullet.is_verbose
70
+ return nil
71
+ end
72
+ end
73
+
74
+ # push address
75
+ #
76
+ # @param name [String] name of address
77
+ # @param address [String] address itself, or query for the address
78
+ # @param recipient [Hash] key-value of either one of: 'email', 'device_iden', 'channel_tag', or 'client_iden' (can be nil)
79
+ # @return [JSON] result as json (nil if error)
80
+ def self.address(name, address, recipient = nil)
81
+ params = {
82
+ type: :address,
83
+ name: name,
84
+ address: address,
85
+ }
86
+ params.merge!(recipient) if recipient
87
+
88
+ result = Pushbullet::V2::request(API_URL, params)
89
+
90
+ case result
91
+ when Net::HTTPOK
92
+ return JSON.parse(result.body)
93
+ else
94
+ puts result.body if Pushbullet.is_verbose
95
+ return nil
96
+ end
97
+ end
98
+
99
+ # push checklist
100
+ #
101
+ # @param title [String] title of note
102
+ # @param items [Array<String>] array of checklist items
103
+ # @param recipient [Hash] key-value of either one of: 'email', 'device_iden', 'channel_tag', or 'client_iden' (can be nil)
104
+ # @return [JSON] result as json (nil if error)
105
+ def self.checklist(title, items, recipient = nil)
106
+ params = {
107
+ type: :list,
108
+ title: title,
109
+ items: items,
110
+ }
111
+ params.merge!(recipient) if recipient
112
+
113
+ result = Pushbullet::V2::request(API_URL, params)
114
+
115
+ case result
116
+ when Net::HTTPOK
117
+ return JSON.parse(result.body)
118
+ else
119
+ puts result.body if Pushbullet.is_verbose
120
+ return nil
121
+ end
122
+ end
123
+
124
+ # push file
125
+ #
126
+ # @param filepath [String] absolute path of file
127
+ # @param text [String] body text
128
+ # @param recipient [Hash] key-value of either one of: 'email', 'device_iden', 'channel_tag', or 'client_iden' (can be nil)
129
+ # @return [JSON] result as json (nil if error)
130
+ def self.file(filepath, text, recipient = nil)
131
+ to_upload = _request_upload_file(filepath)
132
+ if _upload_file(filepath, to_upload['upload_url'], to_upload['data'])
133
+ params = {
134
+ type: :file,
135
+ file_name: to_upload['file_name'],
136
+ file_type: to_upload['file_type'],
137
+ file_url: to_upload['file_url'],
138
+ body: text,
139
+ }
140
+ params.merge!(recipient) if recipient
141
+
142
+ result = Pushbullet::V2::request(API_URL, params)
143
+
144
+ case result
145
+ when Net::HTTPOK
146
+ return JSON.parse(result.body)
147
+ else
148
+ puts result.body if Pushbullet.is_verbose
149
+ return nil
150
+ end
151
+ end
152
+
153
+ false
154
+ end
155
+
156
+ private
157
+
158
+ def self._request_upload_file(filepath)
159
+ result = Pushbullet::post('https://api.pushbullet.com/v2/upload-request', {
160
+ file_name: File.basename(filepath),
161
+ file_type: MimeMagic.by_path(filepath),
162
+ }, {
163
+ 'Authorization' => "Basic #{Base64.encode64(Pushbullet::get_access_token).chomp}",
164
+ })
165
+
166
+ JSON.parse(result.body)
167
+ end
168
+
169
+ def self._upload_file(filepath, upload_url, auth_data)
170
+ File.open(filepath, 'rb'){|file|
171
+ result = Pushbullet::post_multipart(upload_url, {
172
+ awsaccesskeyid: auth_data['awsaccesskeyid'],
173
+ acl: auth_data['acl'],
174
+ key: auth_data['key'],
175
+ signature: auth_data['signature'],
176
+ policy: auth_data['policy'],
177
+ 'content-type' => auth_data['content-type'],
178
+ file: file,
179
+ }, {})
180
+
181
+ case result
182
+ when Net::HTTPNoContent
183
+ return true
184
+ else
185
+ puts result.body if Pushbullet.is_verbose
186
+ return false
187
+ end
188
+ }
189
+
190
+ false
191
+ end
192
+ end
193
+ end
194
+ end
195
+
@@ -0,0 +1,67 @@
1
+ # coding: UTF-8
2
+
3
+ # lib/v2/subscriptions.rb
4
+ #
5
+ # functions for Pushbullet subscriptions api
6
+ #
7
+ # created on : 2014.12.18
8
+ # last update: 2014.12.18
9
+ #
10
+ # by meinside@gmail.com
11
+
12
+ require 'json'
13
+ require 'mimemagic'
14
+
15
+ module Pushbullet
16
+ module V2
17
+ class Subscriptions
18
+ API_URL = 'https://api.pushbullet.com/v2/subscriptions'
19
+
20
+ public
21
+
22
+ # get subscriptions list
23
+ #
24
+ # @return [JSON] result as json
25
+ def self.get
26
+ result = Pushbullet::V2::request_get(API_URL, {})
27
+
28
+ JSON.parse(result.body)
29
+ end
30
+
31
+ # subscribe a new subscription
32
+ #
33
+ # @param channel_tag [String] channel tag to subscribe
34
+ # @return [JSON] result as json
35
+ def self.subscribe(channel_tag)
36
+ result = Pushbullet::V2::request(API_URL, {
37
+ channel_tag: channel_tag,
38
+ })
39
+
40
+ JSON.parse(result.body)
41
+ end
42
+
43
+ # unsubscribe a subscription
44
+ #
45
+ # @param subscription_iden [String] subscription identifier
46
+ # @return [JSON] result as json
47
+ def self.unsubscribe(subscription_iden)
48
+ result = Pushbullet::V2::request_delete(API_URL + '/' + subscription_iden, {})
49
+
50
+ JSON.parse(result.body)
51
+ end
52
+
53
+ # get information on given channel
54
+ #
55
+ # @param channel_tag [String] channel tag
56
+ # @return [JSON] result as json
57
+ def self.channel_info(channel_tag)
58
+ result = Pushbullet::V2::request_get('https://api.pushbullet.com/v2/channel-info', {
59
+ tag: channel_tag,
60
+ })
61
+
62
+ JSON.parse(result.body)
63
+ end
64
+ end
65
+ end
66
+ end
67
+
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: UTF-8
3
+
4
+ # test_contacts.rb
5
+ #
6
+ # test script for lib/v2/contacts.rb
7
+ #
8
+ # created on : 2014.12.18
9
+ # last update: 2014.12.18
10
+ #
11
+ # by meinside@gmail.com
12
+
13
+ require 'test/unit'
14
+
15
+ require 'io/console'
16
+
17
+ require_relative '../../pushbullet'
18
+
19
+ class TestContacts < Test::Unit::TestCase
20
+
21
+ def setup
22
+ # do nothing
23
+ end
24
+
25
+ def test_contacts
26
+ print '> input your Pushbullet access token: '
27
+ input = STDIN.noecho(&:gets)
28
+
29
+ assert_not_nil(input)
30
+ access_token = input.chomp
31
+
32
+ Pushbullet.set_access_token(access_token)
33
+
34
+ # get
35
+ assert_not_nil(Pushbullet::V2::Contacts.get)
36
+
37
+ # create
38
+ created = Pushbullet::V2::Contacts.create('test contact', 'email-that-does-not-exist@earth.com')
39
+ assert_not_nil(created)
40
+
41
+ # update
42
+ new_name = 'test contact 2'
43
+ updated = Pushbullet::V2::Contacts.update(created['iden'], new_name)
44
+ assert_not_nil(updated)
45
+ assert_equal(updated['name'], new_name)
46
+
47
+ # delete
48
+ assert_not_nil(Pushbullet::V2::Contacts.delete(created['iden']))
49
+ end
50
+
51
+ def teardown
52
+ # do nothing
53
+ end
54
+ end
55
+
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: UTF-8
3
+
4
+ # test_devices.rb
5
+ #
6
+ # test script for lib/v2/devices.rb
7
+ #
8
+ # created on : 2014.12.18
9
+ # last update: 2014.12.18
10
+ #
11
+ # by meinside@gmail.com
12
+
13
+ require 'test/unit'
14
+
15
+ require 'io/console'
16
+
17
+ require_relative '../../pushbullet'
18
+
19
+ class TestDevices < Test::Unit::TestCase
20
+
21
+ def setup
22
+ # do nothing
23
+ end
24
+
25
+ def test_devices
26
+ print '> input your Pushbullet access token: '
27
+ input = STDIN.noecho(&:gets)
28
+
29
+ assert_not_nil(input)
30
+ access_token = input.chomp
31
+
32
+ Pushbullet.set_access_token(access_token)
33
+
34
+ # get
35
+ assert_not_nil(Pushbullet::V2::Devices.get)
36
+
37
+ # register
38
+ registered = Pushbullet::V2::Devices.register('test device', 'android')
39
+ assert_not_nil(registered)
40
+
41
+ # update
42
+ new_name = 'test device 2'
43
+ updated = Pushbullet::V2::Devices.update(registered['iden'], {nickname: new_name})
44
+ assert_not_nil(updated)
45
+ assert_equal(updated['nickname'], new_name)
46
+
47
+ # delete
48
+ assert_not_nil(Pushbullet::V2::Devices.delete(registered['iden']))
49
+ end
50
+
51
+ def teardown
52
+ # do nothing
53
+ end
54
+ end
55
+
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: UTF-8
3
+
4
+ # test_push.rb
5
+ #
6
+ # test script for lib/v2/push.rb
7
+ #
8
+ # created on : 2014.12.18
9
+ # last update: 2014.12.18
10
+ #
11
+ # by meinside@gmail.com
12
+
13
+ require 'test/unit'
14
+
15
+ require 'io/console'
16
+
17
+ require_relative '../../pushbullet'
18
+
19
+ class TestPush < Test::Unit::TestCase
20
+
21
+ def setup
22
+ # do nothing
23
+ end
24
+
25
+ def test_push
26
+ print '> input your Pushbullet access token: '
27
+ input = STDIN.noecho(&:gets)
28
+
29
+ assert_not_nil(input)
30
+ access_token = input.chomp
31
+
32
+ Pushbullet.set_access_token(access_token)
33
+
34
+ assert_not_nil(Pushbullet::V2::Push.note('Testing pushbullet-ruby push.note', 'This note is for testing.'))
35
+ assert_not_nil(Pushbullet::V2::Push.link('Testing pushbullet-ruby push.link', 'This link is for testing.', 'https://docs.pushbullet.com/v2/pushes/'))
36
+ assert_not_nil(Pushbullet::V2::Push.address('Testing pushbullet-ruby push.address', 'Google Korea LLC. 22nd Floor, Gangnam Finance Center 152 Teheran-ro, Gangnam-gu'))
37
+ assert_not_nil(Pushbullet::V2::Push.checklist('Testing pushbullet-ruby push.list', ['Test 1', 'Test 2', 'Test 3']))
38
+ assert_not_nil(Pushbullet::V2::Push.file(__FILE__, 'Testing pushbullet-ruby push.file'))
39
+ end
40
+
41
+ def teardown
42
+ # do nothing
43
+ end
44
+
45
+ end
46
+
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: UTF-8
3
+
4
+ # test_subscriptions.rb
5
+ #
6
+ # test script for lib/v2/subscriptions.rb
7
+ #
8
+ # created on : 2014.12.18
9
+ # last update: 2014.12.18
10
+ #
11
+ # by meinside@gmail.com
12
+
13
+ require 'test/unit'
14
+
15
+ require 'io/console'
16
+
17
+ require_relative '../../pushbullet'
18
+
19
+ class TestSubscriptions < Test::Unit::TestCase
20
+
21
+ def setup
22
+ # do nothing
23
+ end
24
+
25
+ def test_subscriptions
26
+ print '> input your Pushbullet access token: '
27
+ input = STDIN.noecho(&:gets)
28
+
29
+ assert_not_nil(input)
30
+ access_token = input.chomp
31
+
32
+ Pushbullet.set_access_token(access_token)
33
+
34
+ # subscribe
35
+ channel_tag = 'pushbullet'
36
+ subscribed = Pushbullet::V2::Subscriptions.subscribe(channel_tag)
37
+ assert_not_nil(subscribed) # XXX - should check its result (it can be 'Already subscribed to this channel.' error)
38
+
39
+ # get
40
+ subscriptions = Pushbullet::V2::Subscriptions.get
41
+ assert_not_nil(subscriptions)
42
+
43
+ subscribed = subscriptions['subscriptions'].first
44
+
45
+ # channel info
46
+ assert_not_nil(Pushbullet::V2::Subscriptions.channel_info(subscribed['channel']['tag']))
47
+
48
+ # unsubscribe
49
+ assert_not_nil(Pushbullet::V2::Subscriptions.unsubscribe(subscribed['iden']))
50
+ end
51
+
52
+ def teardown
53
+ # do nothing
54
+ end
55
+ end
56
+
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: UTF-8
3
+
4
+ # test_users.rb
5
+ #
6
+ # test script for lib/v2/users.rb
7
+ #
8
+ # created on : 2014.12.18
9
+ # last update: 2014.12.18
10
+ #
11
+ # by meinside@gmail.com
12
+
13
+ require 'test/unit'
14
+
15
+ require 'io/console'
16
+
17
+ require_relative '../../pushbullet'
18
+
19
+ class TestUsers < Test::Unit::TestCase
20
+
21
+ def setup
22
+ # do nothing
23
+ end
24
+
25
+ def test_users
26
+ print '> input your Pushbullet access token: '
27
+ input = STDIN.noecho(&:gets)
28
+
29
+ assert_not_nil(input)
30
+ access_token = input.chomp
31
+
32
+ Pushbullet.set_access_token(access_token)
33
+
34
+ # my info
35
+ info = Pushbullet::V2::Users.me
36
+ assert_not_nil(info)
37
+
38
+ # update my preference
39
+ test_flag = 'test_flag'
40
+ test_value = 'this is a flag for testing'
41
+ updated = Pushbullet::V2::Users.update_my_preferences({test_flag => test_value})
42
+ assert_not_nil(updated)
43
+ assert_equal(updated['preferences'][test_flag], test_value)
44
+
45
+ # rollback my preference
46
+ assert_not_nil(Pushbullet::V2::Users.update_my_preferences(info['preferences']))
47
+ end
48
+
49
+ def teardown
50
+ # do nothing
51
+ end
52
+ end
53
+
data/lib/v2/users.rb ADDED
@@ -0,0 +1,43 @@
1
+ # coding: UTF-8
2
+
3
+ # lib/v2/users.rb
4
+ #
5
+ # functions for Pushbullet users api
6
+ #
7
+ # created on : 2014.12.18
8
+ # last update: 2014.12.18
9
+ #
10
+ # by meinside@gmail.com
11
+
12
+ require 'json'
13
+ require 'mimemagic'
14
+
15
+ module Pushbullet
16
+ module V2
17
+ class Users
18
+ API_URL = 'https://api.pushbullet.com/v2/users'
19
+
20
+ public
21
+
22
+ # get my information
23
+ #
24
+ # @return [JSON] result as json
25
+ def self.me
26
+ result = Pushbullet::V2::request_get(API_URL + '/me', {})
27
+
28
+ JSON.parse(result.body)
29
+ end
30
+
31
+ # update my preferences
32
+ #
33
+ # @param preferences [Hash] values to overwrite
34
+ # @return [JSON] result as json
35
+ def self.update_my_preferences(preferences)
36
+ result = Pushbullet::V2::request(API_URL + '/me', {preferences: preferences})
37
+
38
+ JSON.parse(result.body)
39
+ end
40
+ end
41
+ end
42
+ end
43
+
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pushbullet-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sungjin Han
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mimemagic
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.0'
27
+ description: Ruby library for Pushbullet's HTTP API (https://docs.pushbullet.com/http/)
28
+ email: meinside@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/pushbullet.rb
34
+ - lib/v2/contacts.rb
35
+ - lib/v2/devices.rb
36
+ - lib/v2/push.rb
37
+ - lib/v2/subscriptions.rb
38
+ - lib/v2/test/test_contacts.rb
39
+ - lib/v2/test/test_devices.rb
40
+ - lib/v2/test/test_push.rb
41
+ - lib/v2/test/test_subscriptions.rb
42
+ - lib/v2/test/test_users.rb
43
+ - lib/v2/users.rb
44
+ homepage: http://github.com/meinside/pushbullet-ruby
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 2.4.5
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: Ruby library for Pushbullet
68
+ test_files: []