zeppelin 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/zeppelin.rb CHANGED
@@ -23,8 +23,8 @@ class Zeppelin
23
23
  # @param [String] application_key your Urban Airship Application Key
24
24
  # @param [String] application_master_secret your Urban Airship Application
25
25
  # Master Secret
26
- def initialize(application_key, application_master_secret)
27
- @connection = Faraday::Connection.new(BASE_URI) do |builder|
26
+ def initialize(application_key, application_master_secret, options = {})
27
+ @connection = Faraday::Connection.new(BASE_URI, options) do |builder|
28
28
  builder.request :json
29
29
  builder.adapter :net_http
30
30
  end
@@ -55,7 +55,7 @@ class Zeppelin
55
55
  # @return [Hash, nil]
56
56
  def device_token(device_token)
57
57
  response = @connection.get(device_token_uri(device_token))
58
- successful?(response) ? Yajl::Parser.parse(response.body) : nil
58
+ successful?(response) ? parse(response.body) : nil
59
59
  end
60
60
 
61
61
  # Deletes a device token.
@@ -90,7 +90,7 @@ class Zeppelin
90
90
  # @return [Hash, nil]
91
91
  def apid(apid)
92
92
  response = @connection.get(apid_uri(apid))
93
- successful?(response) ? Yajl::Parser.parse(response.body) : nil
93
+ successful?(response) ? parse(response.body) : nil
94
94
  end
95
95
 
96
96
  # Deletes an APID.
@@ -137,7 +137,26 @@ class Zeppelin
137
137
  # @return [Hash, nil]
138
138
  def feedback(since)
139
139
  response = @connection.get(feedback_uri(since))
140
- successful?(response) ? Yajl::Parser.parse(response.body) : nil
140
+ successful?(response) ? parse(response.body) : nil
141
+ end
142
+
143
+ # Retrieve all tags on the service
144
+ #
145
+ # @return [Hash, nil]
146
+ def tags
147
+ response = @connection.get(tag_uri(nil))
148
+ successful?(response) ? parse(response.body) : nil
149
+ end
150
+
151
+ # Modifies device tokens associated with a tag.
152
+ #
153
+ # @param [String] tag The name of the tag to modify tag associations on
154
+ #
155
+ # @param [Hash] payload
156
+ #
157
+ # @see http://urbanairship.com/docs/tags.html#modifying-device-tokens-on-a-tag
158
+ def modify_device_tokens_on_tag(tag_name, payload = {})
159
+ @connection.post(tag_uri(tag_name), payload, JSON_HEADERS)
141
160
  end
142
161
 
143
162
  # Creates a tag that is not associated with any device
@@ -161,6 +180,14 @@ class Zeppelin
161
180
  successful?(response)
162
181
  end
163
182
 
183
+ # @param [String] device_token
184
+ #
185
+ # @return [Hash, nil]
186
+ def device_tags(device_token)
187
+ response = @connection.get(device_tag_uri(device_token, nil))
188
+ successful?(response) ? parse(response.body) : nil
189
+ end
190
+
164
191
  # @param [String] device_token
165
192
  #
166
193
  # @param [#to_s] tag_name
@@ -208,6 +235,10 @@ class Zeppelin
208
235
  def successful?(response)
209
236
  SUCCESSFUL_STATUS_CODES.include?(response.status)
210
237
  end
238
+
239
+ def parse(json)
240
+ Yajl::Parser.parse(json)
241
+ end
211
242
  end
212
243
 
213
244
  require 'zeppelin/version'
@@ -1,3 +1,3 @@
1
1
  class Zeppelin
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -15,6 +15,12 @@ class ZeppelinTest < Zeppelin::TestCase
15
15
  assert_equal 'Basic YXBwIGtleTphcHAgbWFzdGVyIHNlY3JldA==', @client.connection.headers['Authorization']
16
16
  end
17
17
 
18
+ test '#initialize with custom options' do
19
+ ssl_options = { :ca_path => '/dev/null' }
20
+ @client = Zeppelin.new('app key', 'app master secret', :ssl => ssl_options)
21
+ assert_equal(ssl_options, @client.connection.ssl)
22
+ end
23
+
18
24
  test '#register_device_token without a payload' do
19
25
  stub_requests @client.connection do |stub|
20
26
  stub.put("/api/device_tokens/#{@device_token}") do [201, {}, '']
@@ -304,6 +310,33 @@ class ZeppelinTest < Zeppelin::TestCase
304
310
  assert_nil response
305
311
  end
306
312
 
313
+ test '#tags' do
314
+ response_body = { 'tags' => ['green', 'eggs'] }
315
+
316
+ stub_requests @client.connection do |stub|
317
+ stub.get('/api/tags/') do
318
+ [200, {}, Yajl::Encoder.encode(response_body)]
319
+ end
320
+ end
321
+
322
+ response = @client.tags
323
+ assert_equal response_body, response
324
+ end
325
+
326
+ test '#modify_device_token_on_tag' do
327
+ tag_name = 'jimmy.page'
328
+ device_token = 'CAFEBABE'
329
+
330
+ stub_requests @client.connection do |stub|
331
+ stub.post("/api/tags/#{tag_name}") do
332
+ [200, {}, 'OK']
333
+ end
334
+ end
335
+
336
+ response = @client.modify_device_tokens_on_tag(tag_name, { 'device_tokens' => { 'add' => [device_token] } })
337
+ assert response
338
+ end
339
+
307
340
  test '#add_tag' do
308
341
  tag_name = 'chunky.bacon'
309
342
 
@@ -343,6 +376,33 @@ class ZeppelinTest < Zeppelin::TestCase
343
376
  refute response
344
377
  end
345
378
 
379
+ test '#device_tags with existing device' do
380
+ device_token = 'CAFEBABE'
381
+ response_body = { 'tags' => ['tag1', 'some_tag'] }
382
+
383
+ stub_requests @client.connection do |stub|
384
+ stub.get("/api/device_tokens/#{device_token}/tags/") do
385
+ [200, {}, Yajl::Encoder.encode(response_body)]
386
+ end
387
+ end
388
+
389
+ response = @client.device_tags(device_token)
390
+ assert_equal response_body, response
391
+ end
392
+
393
+ test '#device_tags with non-existant device' do
394
+ device_token = 'CAFEBABE'
395
+
396
+ stub_requests @client.connection do |stub|
397
+ stub.get("/api/device_tokens/#{device_token}/tags/") do
398
+ [404, {}, 'Not Found']
399
+ end
400
+ end
401
+
402
+ response = @client.device_tags(device_token)
403
+ refute response
404
+ end
405
+
346
406
  test '#add_tag_to_device' do
347
407
  tag_name = 'radio.head'
348
408
  device_token = 'CAFEBABE'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zeppelin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.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: 2011-08-17 00:00:00.000000000Z
12
+ date: 2011-08-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
16
- requirement: &2156462880 !ruby/object:Gem::Requirement
16
+ requirement: &2165051200 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2156462880
24
+ version_requirements: *2165051200
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yajl-ruby
27
- requirement: &2156462460 !ruby/object:Gem::Requirement
27
+ requirement: &2165050780 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2156462460
35
+ version_requirements: *2165050780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: minitest
38
- requirement: &2156493440 !ruby/object:Gem::Requirement
38
+ requirement: &2165050280 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '2.0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2156493440
46
+ version_requirements: *2165050280
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: journo
49
- requirement: &2156493020 !ruby/object:Gem::Requirement
49
+ requirement: &2165049860 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2156493020
57
+ version_requirements: *2165049860
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mocha
60
- requirement: &2156492560 !ruby/object:Gem::Requirement
60
+ requirement: &2165049400 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2156492560
68
+ version_requirements: *2165049400
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: test_declarative
71
- requirement: &2156492140 !ruby/object:Gem::Requirement
71
+ requirement: &2165048980 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2156492140
79
+ version_requirements: *2165048980
80
80
  description: Ruby client for the Urban Airship Push Notification API
81
81
  email:
82
82
  - alex@kernul.com