zeppelin 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/lib/zeppelin.rb +39 -0
- data/lib/zeppelin/version.rb +1 -1
- data/test/test_helper.rb +5 -1
- data/test/zeppelin_test.rb +79 -0
- data/zeppelin.gemspec +1 -1
- metadata +8 -10
- data/test/support/spec_reporter.rb +0 -222
data/lib/zeppelin.rb
CHANGED
@@ -67,6 +67,41 @@ class Zeppelin
|
|
67
67
|
successful?(response)
|
68
68
|
end
|
69
69
|
|
70
|
+
# Registers an APID.
|
71
|
+
#
|
72
|
+
# @param [String] apid
|
73
|
+
# @param [Hash] payload the payload to send during registration
|
74
|
+
# @return [Boolean] whether or not the registration was successful
|
75
|
+
def register_apid(apid, payload = {})
|
76
|
+
uri = apid_uri(apid)
|
77
|
+
|
78
|
+
if payload.empty?
|
79
|
+
response = @connection.put(uri)
|
80
|
+
else
|
81
|
+
response = @connection.put(uri, payload, JSON_HEADERS)
|
82
|
+
end
|
83
|
+
|
84
|
+
successful?(response)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Retrieves information on an APID.
|
88
|
+
#
|
89
|
+
# @param [String] apid
|
90
|
+
# @return [Hash, nil]
|
91
|
+
def apid(apid)
|
92
|
+
response = @connection.get(apid_uri(apid))
|
93
|
+
successful?(response) ? Yajl::Parser.parse(response.body) : nil
|
94
|
+
end
|
95
|
+
|
96
|
+
# Deletes an APID.
|
97
|
+
#
|
98
|
+
# @param [String] apid
|
99
|
+
# @return [Boolean] whether or not the deletion was successful
|
100
|
+
def delete_apid(apid)
|
101
|
+
response = @connection.delete(apid_uri(apid))
|
102
|
+
successful?(response)
|
103
|
+
end
|
104
|
+
|
70
105
|
# Pushes a message.
|
71
106
|
#
|
72
107
|
# @param [Hash] payload the payload of the message
|
@@ -111,6 +146,10 @@ class Zeppelin
|
|
111
146
|
"/api/device_tokens/#{device_token}"
|
112
147
|
end
|
113
148
|
|
149
|
+
def apid_uri(apid)
|
150
|
+
"/api/apids/#{apid}"
|
151
|
+
end
|
152
|
+
|
114
153
|
def feedback_uri(since)
|
115
154
|
"/api/device_tokens/feedback/?since=#{since.utc.iso8601}"
|
116
155
|
end
|
data/lib/zeppelin/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'minitest/autorun'
|
3
|
+
require 'journo'
|
3
4
|
require 'mocha'
|
4
5
|
require 'test_declarative'
|
5
6
|
require 'zeppelin'
|
6
7
|
|
7
8
|
Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |f| require f }
|
8
9
|
|
9
|
-
class Zeppelin::TestCase < MiniTest::Unit::TestCase; end
|
10
|
+
class Zeppelin::TestCase < MiniTest::Unit::TestCase; end
|
11
|
+
|
12
|
+
MiniTest::Unit.runner = Journo::SuiteRunner.new
|
13
|
+
MiniTest::Unit.runner.reporters << Journo::Reporters::ProgressReporter.new
|
data/test/zeppelin_test.rb
CHANGED
@@ -105,6 +105,85 @@ class ZeppelinTest < Zeppelin::TestCase
|
|
105
105
|
refute response
|
106
106
|
end
|
107
107
|
|
108
|
+
test '#register_apid without a payload' do
|
109
|
+
stub_requests @client.connection do |stub|
|
110
|
+
stub.put("/api/apids/#{@apid}") do [201, {}, '']
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
response = @client.register_apid(@apid)
|
115
|
+
assert response
|
116
|
+
end
|
117
|
+
|
118
|
+
test '#register_apid an already registered APID' do
|
119
|
+
stub_requests @client.connection do |stub|
|
120
|
+
stub.put("/api/apids/#{@apid}") do
|
121
|
+
[200, {}, '']
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
response = @client.register_apid(@apid)
|
126
|
+
assert response
|
127
|
+
end
|
128
|
+
|
129
|
+
test '#register_apid with payload' do
|
130
|
+
payload = { :alias => 'CapnKernul' }
|
131
|
+
|
132
|
+
stub_requests @client.connection do |stub|
|
133
|
+
stub.put("/api/apids/#{@apid}", Yajl::Encoder.encode(payload)) do
|
134
|
+
[200, {}, '']
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
response = @client.register_apid(@apid, payload)
|
139
|
+
assert response
|
140
|
+
end
|
141
|
+
|
142
|
+
test '#register_apid with an error' do
|
143
|
+
stub_requests @client.connection do |stub|
|
144
|
+
stub.put("/api/apids/#{@apid}", nil) do
|
145
|
+
[500, {}, '']
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
response = @client.register_apid(@apid)
|
150
|
+
refute response
|
151
|
+
end
|
152
|
+
|
153
|
+
test '#apid' do
|
154
|
+
response_body = { 'foo' => 'bar' }
|
155
|
+
stub_requests @client.connection do |stub|
|
156
|
+
stub.get("/api/apids/#{@apid}") do
|
157
|
+
[200, {}, Yajl::Encoder.encode(response_body)]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
response = @client.apid(@apid)
|
162
|
+
assert_equal response_body, response
|
163
|
+
end
|
164
|
+
|
165
|
+
test '#delete_apid with a valid APID' do
|
166
|
+
stub_requests @client.connection do |stub|
|
167
|
+
stub.delete("/api/apids/#{@apid}") do
|
168
|
+
[204, {}, '']
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
response = @client.delete_apid(@apid)
|
173
|
+
assert response
|
174
|
+
end
|
175
|
+
|
176
|
+
test '#delete_apid with an unknown APID' do
|
177
|
+
stub_requests @client.connection do |stub|
|
178
|
+
stub.delete("/api/apids/#{@apid}") do
|
179
|
+
[404, {}, '']
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
response = @client.delete_apid(@apid)
|
184
|
+
refute response
|
185
|
+
end
|
186
|
+
|
108
187
|
test '#push with a valid payload' do
|
109
188
|
payload = {
|
110
189
|
:device_tokens => [@device_token],
|
data/zeppelin.gemspec
CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_dependency 'faraday'
|
18
18
|
s.add_dependency 'yajl-ruby'
|
19
19
|
|
20
|
-
s.add_development_dependency 'ansi'
|
21
20
|
s.add_development_dependency 'minitest', '~> 2.0'
|
21
|
+
s.add_development_dependency 'journo'
|
22
22
|
s.add_development_dependency 'mocha'
|
23
23
|
s.add_development_dependency 'test_declarative'
|
24
24
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: zeppelin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Alexander Kern
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-27 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -36,25 +36,25 @@ dependencies:
|
|
36
36
|
type: :runtime
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
39
|
+
name: minitest
|
40
40
|
prerelease: false
|
41
41
|
requirement: &id003 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
|
-
- -
|
44
|
+
- - ~>
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: "0"
|
46
|
+
version: "2.0"
|
47
47
|
type: :development
|
48
48
|
version_requirements: *id003
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
50
|
+
name: journo
|
51
51
|
prerelease: false
|
52
52
|
requirement: &id004 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
54
54
|
requirements:
|
55
|
-
- -
|
55
|
+
- - ">="
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
version: "
|
57
|
+
version: "0"
|
58
58
|
type: :development
|
59
59
|
version_requirements: *id004
|
60
60
|
- !ruby/object:Gem::Dependency
|
@@ -99,7 +99,6 @@ files:
|
|
99
99
|
- Rakefile
|
100
100
|
- lib/zeppelin.rb
|
101
101
|
- lib/zeppelin/version.rb
|
102
|
-
- test/support/spec_reporter.rb
|
103
102
|
- test/test_helper.rb
|
104
103
|
- test/zeppelin_test.rb
|
105
104
|
- zeppelin.gemspec
|
@@ -132,6 +131,5 @@ signing_key:
|
|
132
131
|
specification_version: 3
|
133
132
|
summary: Urban Airship library for Ruby
|
134
133
|
test_files:
|
135
|
-
- test/support/spec_reporter.rb
|
136
134
|
- test/test_helper.rb
|
137
135
|
- test/zeppelin_test.rb
|
@@ -1,222 +0,0 @@
|
|
1
|
-
require 'minitest/unit'
|
2
|
-
require 'ansi'
|
3
|
-
|
4
|
-
# Code for this runner has been borrowed and modified from MiniTest, written by
|
5
|
-
# Ryan Davis of Seattle.rb. MiniTest is licensed under the MIT License, and can
|
6
|
-
# be found on GitHub at https://github.com/seattlerb/minitest.
|
7
|
-
#
|
8
|
-
# This code is also heavily based upon these gists as well, which don't appear
|
9
|
-
# to have a license:
|
10
|
-
# * https://gist.github.com/356945
|
11
|
-
# * https://gist.github.com/960669
|
12
|
-
#
|
13
|
-
# @abstract
|
14
|
-
# @todo Add documentation to everything.
|
15
|
-
module MiniTest
|
16
|
-
class Reporter
|
17
|
-
attr_accessor :runner
|
18
|
-
|
19
|
-
def print(*args)
|
20
|
-
runner.output.print(*args)
|
21
|
-
end
|
22
|
-
|
23
|
-
def puts(*args)
|
24
|
-
runner.output.puts(*args)
|
25
|
-
end
|
26
|
-
|
27
|
-
def before_suites(suites); end
|
28
|
-
def after_suites(suites); end
|
29
|
-
def before_suite(suite); end
|
30
|
-
def after_suite(suite); end
|
31
|
-
def before_test(suite, test); end
|
32
|
-
def pass(suite, test); end
|
33
|
-
def skip(suite, test, e); end
|
34
|
-
def failure(suite, test, e); end
|
35
|
-
def error(suite, test, e); end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
module MiniTest
|
40
|
-
class SpecReporter < Reporter
|
41
|
-
include ANSI::Code
|
42
|
-
|
43
|
-
TEST_PADDING = 2
|
44
|
-
INFO_PADDING = 8
|
45
|
-
MARK_SIZE = 5
|
46
|
-
|
47
|
-
def before_suites(suites)
|
48
|
-
@suites_start_time = Time.now
|
49
|
-
puts 'Started'
|
50
|
-
puts
|
51
|
-
end
|
52
|
-
|
53
|
-
def after_suites(suites)
|
54
|
-
total_time = Time.now - @suites_start_time
|
55
|
-
|
56
|
-
puts('Finished in %.5fs' % total_time)
|
57
|
-
print('%d tests, %d assertions, ' % [runner.test_count, runner.assertion_count])
|
58
|
-
print(red { '%d failures, %d errors, ' } % [runner.failures, runner.errors])
|
59
|
-
print(yellow { '%d skips' } % runner.skips)
|
60
|
-
puts
|
61
|
-
end
|
62
|
-
|
63
|
-
def before_suite(suite)
|
64
|
-
puts suite
|
65
|
-
end
|
66
|
-
|
67
|
-
def after_suite(suite)
|
68
|
-
puts
|
69
|
-
end
|
70
|
-
|
71
|
-
def before_test(suite, test)
|
72
|
-
@test_start_time = Time.now
|
73
|
-
end
|
74
|
-
|
75
|
-
def pass(suite, test)
|
76
|
-
print(green { pad_mark('PASS') })
|
77
|
-
print_test_with_time(test)
|
78
|
-
puts
|
79
|
-
end
|
80
|
-
|
81
|
-
def skip(suite, test, e)
|
82
|
-
print(yellow { pad_mark('SKIP') })
|
83
|
-
print_test_with_time(test)
|
84
|
-
puts
|
85
|
-
end
|
86
|
-
|
87
|
-
def failure(suite, test, e)
|
88
|
-
print(red { pad_mark('FAIL') })
|
89
|
-
print_test_with_time(test)
|
90
|
-
puts
|
91
|
-
print_info(e)
|
92
|
-
puts
|
93
|
-
end
|
94
|
-
|
95
|
-
def error(suite, test, e)
|
96
|
-
print(red { pad_mark('ERROR') })
|
97
|
-
print_test_with_time(test)
|
98
|
-
puts
|
99
|
-
print_info(e)
|
100
|
-
puts
|
101
|
-
end
|
102
|
-
|
103
|
-
private
|
104
|
-
|
105
|
-
def print_test_with_time(test)
|
106
|
-
total_time = Time.now - @test_start_time
|
107
|
-
print(" #{test} (%.2fs)" % total_time)
|
108
|
-
end
|
109
|
-
|
110
|
-
def print_info(e)
|
111
|
-
e.message.each_line { |line| puts pad(line, INFO_PADDING) }
|
112
|
-
|
113
|
-
trace = MiniTest.filter_backtrace(e.backtrace)
|
114
|
-
trace.each { |line| puts pad(line, INFO_PADDING) }
|
115
|
-
end
|
116
|
-
|
117
|
-
def pad(str, size)
|
118
|
-
' ' * size + str
|
119
|
-
end
|
120
|
-
|
121
|
-
def pad_mark(str)
|
122
|
-
pad("%#{MARK_SIZE}s" % str, TEST_PADDING)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
module MiniTest
|
128
|
-
class RunnerWithReporter < Unit
|
129
|
-
def initialize(new_reporter)
|
130
|
-
super()
|
131
|
-
@reporter = new_reporter
|
132
|
-
@reporter.runner = self
|
133
|
-
end
|
134
|
-
|
135
|
-
def puke(suite, method, e)
|
136
|
-
case e
|
137
|
-
when MiniTest::Skip then
|
138
|
-
@skips += 1
|
139
|
-
[:skip, e]
|
140
|
-
when MiniTest::Assertion then
|
141
|
-
@failures += 1
|
142
|
-
[:failure, e]
|
143
|
-
else
|
144
|
-
@errors += 1
|
145
|
-
[:error, e]
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
def _run_anything(type)
|
150
|
-
@test_count = @assertion_count = 0
|
151
|
-
suites = TestCase.send("#{type}_suites")
|
152
|
-
return if suites.empty?
|
153
|
-
|
154
|
-
@reporter.before_suites(suites)
|
155
|
-
|
156
|
-
sync = output.respond_to?(:'sync=') # stupid emacs
|
157
|
-
old_sync, output.sync = output.sync, true if sync
|
158
|
-
_run_suites(suites, type)
|
159
|
-
output.sync = old_sync if sync
|
160
|
-
|
161
|
-
@reporter.after_suites(suites)
|
162
|
-
end
|
163
|
-
|
164
|
-
def _run_suites(suites, type)
|
165
|
-
suites.map { |suite| _run_suite(suite, type) }
|
166
|
-
end
|
167
|
-
|
168
|
-
def _run_suite(suite, type)
|
169
|
-
run_suite_header(suite, type)
|
170
|
-
|
171
|
-
filter = options[:filter] || '/./'
|
172
|
-
filter = Regexp.new($1) if filter =~ /\/(.*)\//
|
173
|
-
|
174
|
-
tests = suite.send("#{type}_methods").grep(filter)
|
175
|
-
|
176
|
-
unless tests.empty?
|
177
|
-
@reporter.before_suite(suite)
|
178
|
-
run_suite_tests(suite, tests)
|
179
|
-
@reporter.after_suite(suite)
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
private
|
184
|
-
|
185
|
-
def run_suite_header(suite, type)
|
186
|
-
header_method = "#{type}_suite_header"
|
187
|
-
send(header_method, suite) if respond_to?(header_method)
|
188
|
-
end
|
189
|
-
|
190
|
-
def run_suite_tests(suite, tests)
|
191
|
-
suite.startup if suite.respond_to?(:startup)
|
192
|
-
|
193
|
-
tests.each do |test|
|
194
|
-
@reporter.before_test(suite, test)
|
195
|
-
response, e = run_suite_test(suite, test)
|
196
|
-
|
197
|
-
case response
|
198
|
-
when :pass then @reporter.pass(suite, test)
|
199
|
-
when :skip then @reporter.skip(suite, test, e)
|
200
|
-
when :failure then @reporter.failure(suite, test, e)
|
201
|
-
else @reporter.error(suite, test, e)
|
202
|
-
end
|
203
|
-
end
|
204
|
-
ensure
|
205
|
-
suite.shutdown if suite.respond_to?(:shutdown)
|
206
|
-
end
|
207
|
-
|
208
|
-
def run_suite_test(suite, test)
|
209
|
-
suite_instance = suite.new(test)
|
210
|
-
suite_instance._assertions = 0
|
211
|
-
|
212
|
-
result = suite_instance.run(self)
|
213
|
-
|
214
|
-
@test_count += 1
|
215
|
-
@assertion_count += suite_instance._assertions
|
216
|
-
|
217
|
-
result == '.' ? :pass : result
|
218
|
-
end
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
MiniTest::Unit.runner = MiniTest::RunnerWithReporter.new(MiniTest::SpecReporter.new)
|