zeppelin 0.3.0 → 0.4.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/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