zeppelin 0.2.0 → 0.3.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.
@@ -1,3 +1,3 @@
1
1
  class Zeppelin
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/zeppelin.rb CHANGED
@@ -139,6 +139,49 @@ class Zeppelin
139
139
  response = @connection.get(feedback_uri(since))
140
140
  successful?(response) ? Yajl::Parser.parse(response.body) : nil
141
141
  end
142
+
143
+ # Creates a tag that is not associated with any device
144
+ #
145
+ # @param [#to_s] name The name of the tag to add
146
+ #
147
+ # @return [Boolean] whether or not the request was successful
148
+ def add_tag(name)
149
+ response = @connection.put(tag_uri(name))
150
+ successful?(response)
151
+ end
152
+
153
+ # Removes a tag from the service
154
+ #
155
+ # @param [#to_s] name The name of the tag to remove
156
+ #
157
+ # @return [Boolean] true when the request was successful. Note that this
158
+ # method will return false if the tag has already been removed.
159
+ def remove_tag(name)
160
+ response = @connection.delete(tag_uri(name))
161
+ successful?(response)
162
+ end
163
+
164
+ # @param [String] device_token
165
+ #
166
+ # @param [#to_s] tag_name
167
+ #
168
+ # @return [Boolean] whether or not a tag was successfully associated with
169
+ # a device
170
+ def add_tag_to_device(device_token, tag_name)
171
+ response = @connection.put(device_tag_uri(device_token, tag_name))
172
+ successful?(response)
173
+ end
174
+
175
+ # @param [String] device_token
176
+ #
177
+ # @param [#to_s] tag_name
178
+ #
179
+ # @return [Boolean] whether or not a tag was successfully dissociated from
180
+ # a device
181
+ def remove_tag_from_device(device_token, tag_name)
182
+ response = @connection.delete(device_tag_uri(device_token, tag_name))
183
+ successful?(response)
184
+ end
142
185
 
143
186
  private
144
187
 
@@ -153,10 +196,18 @@ class Zeppelin
153
196
  def feedback_uri(since)
154
197
  "/api/device_tokens/feedback/?since=#{since.utc.iso8601}"
155
198
  end
199
+
200
+ def tag_uri(name)
201
+ "/api/tags/#{name}"
202
+ end
203
+
204
+ def device_tag_uri(device_token, tag_name)
205
+ device_token_uri(device_token) + "/tags/#{tag_name}"
206
+ end
156
207
 
157
208
  def successful?(response)
158
209
  SUCCESSFUL_STATUS_CODES.include?(response.status)
159
210
  end
160
211
  end
161
212
 
162
- require 'zeppelin/version'
213
+ require 'zeppelin/version'
@@ -303,9 +303,90 @@ class ZeppelinTest < Zeppelin::TestCase
303
303
  response = @client.feedback(since)
304
304
  assert_nil response
305
305
  end
306
+
307
+ test '#add_tag' do
308
+ tag_name = 'chunky.bacon'
309
+
310
+ stub_requests @client.connection do |stub|
311
+ stub.put("/api/tags/#{tag_name}") do
312
+ [201, {}, '']
313
+ end
314
+ end
315
+
316
+ response = @client.add_tag(tag_name)
317
+ assert response
318
+ end
319
+
320
+ test '#remove_tag with an existing tag' do
321
+ tag_name = 'cats.pajamas'
322
+
323
+ stub_requests @client.connection do |stub|
324
+ stub.delete("/api/tags/#{tag_name}") do
325
+ [204, {}, '']
326
+ end
327
+ end
328
+
329
+ response = @client.remove_tag(tag_name)
330
+ assert response
331
+ end
332
+
333
+ test '#remove_tag with non-existant tag' do
334
+ tag_name = 'cats.pajamas'
335
+
336
+ stub_requests @client.connection do |stub|
337
+ stub.delete("/api/tags/#{tag_name}") do
338
+ [404, {}, 'Not Found']
339
+ end
340
+ end
341
+
342
+ response = @client.remove_tag(tag_name)
343
+ refute response
344
+ end
345
+
346
+ test '#add_tag_to_device' do
347
+ tag_name = 'radio.head'
348
+ device_token = 'CAFEBABE'
349
+
350
+ stub_requests @client.connection do |stub|
351
+ stub.put("/api/device_tokens/#{device_token}/tags/#{tag_name}") do
352
+ [201, {}, 'Created']
353
+ end
354
+ end
355
+
356
+ response = @client.add_tag_to_device(device_token, tag_name)
357
+ assert response
358
+ end
359
+
360
+ test '#remove_tag_from_device successfully' do
361
+ tag_name = 'martin.fowler'
362
+ device_token = 'DEADBEEF'
363
+
364
+ stub_requests @client.connection do |stub|
365
+ stub.delete("/api/device_tokens/#{device_token}/tags/#{tag_name}") do
366
+ [204, {}, 'No Content']
367
+ end
368
+ end
369
+
370
+ response = @client.remove_tag_from_device(device_token, tag_name)
371
+ assert response
372
+ end
373
+
374
+ test '#remove_tag_from_device unsuccessfully' do
375
+ tag_name = 'martin.fowler'
376
+ device_token = 'DEADBEEF'
377
+
378
+ stub_requests @client.connection do |stub|
379
+ stub.delete("/api/device_tokens/#{device_token}/tags/#{tag_name}") do
380
+ [404, {}, 'Not Found']
381
+ end
382
+ end
383
+
384
+ response = @client.remove_tag_from_device(device_token, tag_name)
385
+ refute response
386
+ end
306
387
 
307
388
  def stub_requests(connection, &block)
308
389
  connection.builder.handlers.delete(Faraday::Adapter::NetHttp)
309
390
  connection.adapter(:test, &block)
310
391
  end
311
- end
392
+ end
metadata CHANGED
@@ -1,94 +1,89 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: zeppelin
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
4
5
  prerelease:
5
- version: 0.2.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Alexander Kern
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-05-27 00:00:00 -07:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2011-08-17 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: faraday
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2156462880 !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: yajl-ruby
29
23
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2156462880
25
+ - !ruby/object:Gem::Dependency
26
+ name: yajl-ruby
27
+ requirement: &2156462460 !ruby/object:Gem::Requirement
31
28
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
36
33
  type: :runtime
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: minitest
40
34
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *2156462460
36
+ - !ruby/object:Gem::Dependency
37
+ name: minitest
38
+ requirement: &2156493440 !ruby/object:Gem::Requirement
42
39
  none: false
43
- requirements:
40
+ requirements:
44
41
  - - ~>
45
- - !ruby/object:Gem::Version
46
- version: "2.0"
42
+ - !ruby/object:Gem::Version
43
+ version: '2.0'
47
44
  type: :development
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
50
- name: journo
51
45
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *2156493440
47
+ - !ruby/object:Gem::Dependency
48
+ name: journo
49
+ requirement: &2156493020 !ruby/object:Gem::Requirement
53
50
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
58
55
  type: :development
59
- version_requirements: *id004
60
- - !ruby/object:Gem::Dependency
61
- name: mocha
62
56
  prerelease: false
63
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *2156493020
58
+ - !ruby/object:Gem::Dependency
59
+ name: mocha
60
+ requirement: &2156492560 !ruby/object:Gem::Requirement
64
61
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
69
66
  type: :development
70
- version_requirements: *id005
71
- - !ruby/object:Gem::Dependency
72
- name: test_declarative
73
67
  prerelease: false
74
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *2156492560
69
+ - !ruby/object:Gem::Dependency
70
+ name: test_declarative
71
+ requirement: &2156492140 !ruby/object:Gem::Requirement
75
72
  none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
80
77
  type: :development
81
- version_requirements: *id006
78
+ prerelease: false
79
+ version_requirements: *2156492140
82
80
  description: Ruby client for the Urban Airship Push Notification API
83
- email:
81
+ email:
84
82
  - alex@kernul.com
85
83
  executables: []
86
-
87
84
  extensions: []
88
-
89
85
  extra_rdoc_files: []
90
-
91
- files:
86
+ files:
92
87
  - .autotest
93
88
  - .gitignore
94
89
  - .travis.yml
@@ -102,34 +97,30 @@ files:
102
97
  - test/test_helper.rb
103
98
  - test/zeppelin_test.rb
104
99
  - zeppelin.gemspec
105
- has_rdoc: true
106
100
  homepage: https://github.com/CapnKernul/zeppelin
107
101
  licenses: []
108
-
109
102
  post_install_message:
110
103
  rdoc_options: []
111
-
112
- require_paths:
104
+ require_paths:
113
105
  - lib
114
- required_ruby_version: !ruby/object:Gem::Requirement
106
+ required_ruby_version: !ruby/object:Gem::Requirement
115
107
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- version: "0"
120
- required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
113
  none: false
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- version: "0"
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
126
118
  requirements: []
127
-
128
119
  rubyforge_project: zeppelin
129
- rubygems_version: 1.6.2
120
+ rubygems_version: 1.8.6
130
121
  signing_key:
131
122
  specification_version: 3
132
123
  summary: Urban Airship library for Ruby
133
- test_files:
124
+ test_files:
134
125
  - test/test_helper.rb
135
126
  - test/zeppelin_test.rb