apidoc 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -27,9 +27,9 @@ GEM
27
27
  diff-lcs (~> 1.1.2)
28
28
  rspec-mocks (2.8.0)
29
29
  sinatra (1.3.2)
30
- rack (>= 1.3.6, ~> 1.3)
30
+ rack (~> 1.3, >= 1.3.6)
31
31
  rack-protection (~> 1.2)
32
- tilt (>= 1.3.3, ~> 1.3)
32
+ tilt (~> 1.3, >= 1.3.3)
33
33
  thor (0.15.2)
34
34
  tilt (1.3.3)
35
35
 
data/README.rdoc CHANGED
@@ -9,10 +9,8 @@ stumbled upon http://apiary.io. While I appreciate the motivation for this
9
9
  project, I really wanted an API documentation tool that is:
10
10
 
11
11
  1. Example based: Show me what a _real_ request looks like with _real_ data.
12
- 2. Self-testing and replicable: Build API documentation as part of your CI build, and know
13
- it's up-to-date because it ran real requests against your application.
14
- 3. Minimalist: `apidoc` is designed to make requests using the content type of
15
- your choice and display the request, response and a short description. Nothing more.
12
+ 2. Self-testing and replicable: Build API documentation as part of your CI build, and know it's up-to-date because it ran real requests against your application.
13
+ 3. Minimalist: `apidoc` is designed to make requests using the content type of your choice and display the request, response and a short description. Nothing more.
16
14
 
17
15
 
18
16
  == Install
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/apidoc.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "apidoc"
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["T.J. VanSlyke"]
12
- s.date = "2012-06-03"
12
+ s.date = "2012-06-04"
13
13
  s.description = "Minimalist API documentation generator for Rack applications."
14
14
  s.email = "tj@turing.com"
15
15
  s.executables = ["apidoc"]
data/lib/apidoc.rb CHANGED
@@ -17,13 +17,17 @@ module ApiDoc
17
17
 
18
18
  class Runner
19
19
  def initialize(&block)
20
- @resources = []
21
- @accept = nil
22
- @content_type = nil
20
+ @resources = []
21
+ @accept = nil
22
+ @content_type = nil
23
+ @before_each_blocks = []
24
+ @before_all_blocks = []
25
+ @after_each_blocks = []
26
+ @after_all_blocks = []
23
27
  Blueprint.new self, &block
24
28
  end
25
29
 
26
- attr_accessor :resources, :accept, :content_type
30
+ attr_accessor :resources, :accept, :content_type, :before_each_blocks, :before_all_blocks, :after_each_blocks, :after_all_blocks
27
31
 
28
32
  class Blueprint
29
33
  def initialize(runner, &block)
@@ -35,6 +39,24 @@ module ApiDoc
35
39
  @runner.accept = type
36
40
  end
37
41
 
42
+ def before(type=:each, &block)
43
+ case type
44
+ when :each
45
+ @runner.before_each_blocks << block
46
+ when :all
47
+ @runner.before_all_blocks << block
48
+ end
49
+ end
50
+
51
+ def after(type=:each, &block)
52
+ case type
53
+ when :each
54
+ @runner.after_each_blocks << block
55
+ when :all
56
+ @runner.after_all_blocks << block
57
+ end
58
+ end
59
+
38
60
  def content_type(type)
39
61
  @runner.content_type = type
40
62
  end
@@ -61,7 +83,13 @@ module ApiDoc
61
83
  end
62
84
 
63
85
  def run
64
- @resources.each(&:run)
86
+ @before_all_blocks.each {|block| block.call}
87
+ @resources.each do |resource|
88
+ @before_each_blocks.each {|block| block.call}
89
+ resource.run
90
+ @after_each_blocks.each {|block| block.call}
91
+ end
92
+ @after_all_blocks.each {|block| block.call}
65
93
  end
66
94
  end
67
95
 
@@ -121,10 +149,12 @@ module ApiDoc
121
149
  @runner = runner
122
150
  @path = path
123
151
  @params = nil
152
+ @before_blocks = []
153
+ @after_blocks = []
124
154
  Blueprint.new self, &block
125
155
  end
126
156
 
127
- attr_accessor :path, :method, :setup, :params, :desc
157
+ attr_accessor :path, :method, :params, :desc, :before_blocks, :after_blocks
128
158
  attr_writer :accept, :content_type
129
159
 
130
160
  class Blueprint
@@ -149,8 +179,12 @@ module ApiDoc
149
179
  @resource.params = block
150
180
  end
151
181
 
152
- def setup(&block)
153
- @resource.setup = block
182
+ def before(&block)
183
+ @resource.before_blocks << block
184
+ end
185
+
186
+ def after(&block)
187
+ @resource.after_blocks << block
154
188
  end
155
189
  end
156
190
 
@@ -169,11 +203,10 @@ module ApiDoc
169
203
  end
170
204
 
171
205
  def run
172
- if @setup
173
- instance_eval &@setup
174
- end
206
+ @before_blocks.each {|block| instance_eval &block }
175
207
  @params = @params.call if @params.is_a?(Proc)
176
208
  @response = make_request(@path, @params)
209
+ @after_blocks.each {|block| instance_eval &block }
177
210
  end
178
211
 
179
212
  def response_body
data/spec/apidoc_spec.rb CHANGED
@@ -207,5 +207,204 @@ describe ApiDoc do
207
207
  its(:response_body) { should == JSON.generate({ meat: 'beef', lettuce: true }) }
208
208
  end
209
209
 
210
+ describe "when specifying a global before block" do
211
+ before do
212
+ $var = 0
213
+ @doc = ApiDoc.new(TestApp) do
214
+ before do
215
+ $var += 1
216
+ end
217
+
218
+ get '/tacos.json' do
219
+ desc "Get all tacos as JSON"
220
+ end
221
+
222
+ get '/tacos.xml' do
223
+ desc "Get all tacos as XML"
224
+ end
225
+ end
226
+
227
+ @doc.run
228
+ end
229
+
230
+ it "should have run the before block twice, once for each resource" do
231
+ $var.should == 2
232
+ end
233
+ end
234
+
235
+ describe "when specifying a global before each block" do
236
+ before do
237
+ $var = 0
238
+ @doc = ApiDoc.new(TestApp) do
239
+ before :each do
240
+ $var += 1
241
+ end
242
+
243
+ get '/tacos.json' do
244
+ desc "Get all tacos as JSON"
245
+ end
246
+
247
+ get '/tacos.xml' do
248
+ desc "Get all tacos as XML"
249
+ end
250
+ end
251
+
252
+ @doc.run
253
+ end
254
+
255
+ it "should have run the before block twice, once for each resource" do
256
+ $var.should == 2
257
+ end
258
+ end
259
+
260
+ describe "when specifying a global before all block" do
261
+ before do
262
+ $var = 0
263
+ @doc = ApiDoc.new(TestApp) do
264
+ before :all do
265
+ $var += 1
266
+ end
267
+
268
+ get '/tacos.json' do
269
+ desc "Get all tacos as JSON"
270
+ end
271
+
272
+ get '/tacos.xml' do
273
+ desc "Get all tacos as XML"
274
+ end
275
+ end
276
+
277
+ @doc.run
278
+ end
279
+
280
+ it "should have run the before block once and only once" do
281
+ $var.should == 1
282
+ end
283
+ end
284
+
285
+ describe "when specifying a global after block" do
286
+ before do
287
+ $var = 0
288
+ @doc = ApiDoc.new(TestApp) do
289
+ after do
290
+ $var += 1
291
+ end
292
+
293
+ get '/tacos.json' do
294
+ desc "Get all tacos as JSON"
295
+ end
296
+
297
+ get '/tacos.xml' do
298
+ desc "Get all tacos as XML"
299
+ end
300
+ end
301
+
302
+ @doc.run
303
+ end
304
+
305
+ it "should have run the after block twice, once for each resource" do
306
+ $var.should == 2
307
+ end
308
+ end
309
+
310
+ describe "when specifying a global after each block" do
311
+ before do
312
+ $var = 0
313
+ @doc = ApiDoc.new(TestApp) do
314
+ after :each do
315
+ $var += 1
316
+ end
317
+
318
+ get '/tacos.json' do
319
+ desc "Get all tacos as JSON"
320
+ end
321
+
322
+ get '/tacos.xml' do
323
+ desc "Get all tacos as XML"
324
+ end
325
+ end
326
+
327
+ @doc.run
328
+ end
329
+
330
+ it "should have run the after block twice, once for each resource" do
331
+ $var.should == 2
332
+ end
333
+ end
334
+
335
+ describe "when specifying a global after all block" do
336
+ before do
337
+ $var = 0
338
+ @doc = ApiDoc.new(TestApp) do
339
+ after :all do
340
+ $var += 1
341
+ end
342
+
343
+ get '/tacos.json' do
344
+ desc "Get all tacos as JSON"
345
+ end
346
+
347
+ get '/tacos.xml' do
348
+ desc "Get all tacos as XML"
349
+ end
350
+ end
351
+
352
+ @doc.run
353
+ end
354
+
355
+ it "should have run the after block once and only once" do
356
+ $var.should == 1
357
+ end
358
+ end
359
+
360
+ describe "when specifying a resource-specific before block" do
361
+ before do
362
+ $var = 0
363
+ @doc = ApiDoc.new(TestApp) do
364
+ get '/tacos.json' do
365
+ desc "Get all tacos as JSON"
366
+ before do
367
+ $var += 1
368
+ end
369
+ end
370
+
371
+ get '/tacos.xml' do
372
+ desc "Get all tacos as XML"
373
+ end
374
+ end
375
+
376
+ @doc.run
377
+ end
378
+
379
+ it "should only run the before block for its resource" do
380
+ $var.should == 1
381
+ end
382
+ end
383
+
384
+ describe "when specifying a resource-specific after block" do
385
+ before do
386
+ $var = 0
387
+ @doc = ApiDoc.new(TestApp) do
388
+ get '/tacos.json' do
389
+ desc "Get all tacos as JSON"
390
+ after do
391
+ $var += 1
392
+ end
393
+ end
394
+
395
+ get '/tacos.xml' do
396
+ desc "Get all tacos as XML"
397
+ end
398
+ end
399
+
400
+ @doc.run
401
+ end
402
+
403
+ it "should only run the before block for its resource" do
404
+ $var.should == 1
405
+ end
406
+ end
407
+
408
+
210
409
  end
211
410
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apidoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
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: 2012-06-03 00:00:00.000000000Z
12
+ date: 2012-06-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &70176282425060 !ruby/object:Gem::Requirement
16
+ requirement: &70350038658700 !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: *70176282425060
24
+ version_requirements: *70350038658700
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mustache
27
- requirement: &70176282424240 !ruby/object:Gem::Requirement
27
+ requirement: &70350038681100 !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: *70176282424240
35
+ version_requirements: *70350038681100
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rack-test
38
- requirement: &70176282423620 !ruby/object:Gem::Requirement
38
+ requirement: &70350038680340 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70176282423620
46
+ version_requirements: *70350038680340
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mustache
49
- requirement: &70176282410920 !ruby/object:Gem::Requirement
49
+ requirement: &70350038679720 !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: :runtime
56
56
  prerelease: false
57
- version_requirements: *70176282410920
57
+ version_requirements: *70350038679720
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &70176282410100 !ruby/object:Gem::Requirement
60
+ requirement: &70350038679140 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.8.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70176282410100
68
+ version_requirements: *70350038679140
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdoc
71
- requirement: &70176282409460 !ruby/object:Gem::Requirement
71
+ requirement: &70350038678540 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '3.12'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70176282409460
79
+ version_requirements: *70350038678540
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bundler
82
- requirement: &70176282408660 !ruby/object:Gem::Requirement
82
+ requirement: &70350038678040 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 1.0.0
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70176282408660
90
+ version_requirements: *70350038678040
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: jeweler
93
- requirement: &70176282407880 !ruby/object:Gem::Requirement
93
+ requirement: &70350038677520 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 1.8.3
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70176282407880
101
+ version_requirements: *70350038677520
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: json
104
- requirement: &70176282407180 !ruby/object:Gem::Requirement
104
+ requirement: &70350038676880 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70176282407180
112
+ version_requirements: *70350038676880
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: sinatra
115
- requirement: &70176282406500 !ruby/object:Gem::Requirement
115
+ requirement: &70350038676280 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,7 +120,7 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70176282406500
123
+ version_requirements: *70350038676280
124
124
  description: Minimalist API documentation generator for Rack applications.
125
125
  email: tj@turing.com
126
126
  executables:
@@ -167,7 +167,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
167
  version: '0'
168
168
  segments:
169
169
  - 0
170
- hash: -1506073471830786691
170
+ hash: 1447906958388022363
171
171
  required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  none: false
173
173
  requirements: