apidoc 0.1.0 → 0.1.1

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/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: