apidoc 0.1.2 → 0.1.3
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 +1 -0
- data/Gemfile.lock +2 -0
- data/VERSION +1 -1
- data/apidoc.gemspec +8 -2
- data/examples/burritos_api.html +30 -17
- data/examples/burritos_api.rb +13 -2
- data/examples/tacos_api.html +22 -21
- data/examples/tacos_api.rb +5 -5
- data/ftags +8 -0
- data/lib/apidoc.rb +49 -52
- data/spec/apidoc_spec.rb +16 -320
- data/spec/before_and_after_spec.rb +203 -0
- data/spec/html_writer_spec.rb +113 -0
- data/spec/support/test_apps.rb +34 -0
- data/templates/layout.mustache +14 -15
- data/templates/resource.mustache +1 -1
- metadata +37 -23
@@ -0,0 +1,113 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe ApiDoc::HtmlWriter do
|
4
|
+
before do
|
5
|
+
@doc = ApiDoc.new(TestApp) do
|
6
|
+
get '/tacos.json' do
|
7
|
+
desc "Get all tacos"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "when writing to HTML" do
|
13
|
+
subject do
|
14
|
+
stream = StringIO.new
|
15
|
+
ApiDoc::HtmlWriter.new(@doc).write(stream)
|
16
|
+
stream.read
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should write the request method" do
|
20
|
+
subject.should include('GET')
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should write the request path" do
|
24
|
+
subject.should include("/tacos.json")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should write the response body" do
|
28
|
+
subject.should include('meat')
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "when accepting JSON as input" do
|
32
|
+
before do
|
33
|
+
@doc = ApiDoc.new(TestApp) do
|
34
|
+
post '/tacos.json' do
|
35
|
+
desc "Make a new delicious taco"
|
36
|
+
accept :json
|
37
|
+
params do
|
38
|
+
{ meat: 'beef', lettuce: true }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
@doc.run
|
44
|
+
end
|
45
|
+
|
46
|
+
subject do
|
47
|
+
stream = StringIO.new
|
48
|
+
ApiDoc::HtmlWriter.new(@doc).write(stream)
|
49
|
+
stream.read
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should pretty-print the JSON data in the IN section" do
|
53
|
+
subject.should include("{\n "meat": "beef",\n "lettuce": true\n}")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "when setting the default accept and content type" do
|
58
|
+
before do
|
59
|
+
@doc = ApiDoc.new(TestApp) do
|
60
|
+
accept :json
|
61
|
+
content_type :json
|
62
|
+
|
63
|
+
post '/tacos.json' do
|
64
|
+
desc "Make a new delicious taco"
|
65
|
+
params do
|
66
|
+
{ meat: 'beef', lettuce: true }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
@doc.run
|
72
|
+
end
|
73
|
+
|
74
|
+
subject { @doc }
|
75
|
+
|
76
|
+
it "should propagate the accept type to its resources" do
|
77
|
+
@doc.resources.first.accept.should == :json
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should propagate the content type to its resources" do
|
81
|
+
@doc.resources.first.content_type.should == :json
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "when providing JSON as output" do
|
86
|
+
before do
|
87
|
+
@doc = ApiDoc.new(TestApp) do
|
88
|
+
post '/tacos.json' do
|
89
|
+
desc "Make a new delicious taco"
|
90
|
+
accept :json
|
91
|
+
content_type :json
|
92
|
+
params do
|
93
|
+
{ meat: 'beef', lettuce: true }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
@doc.run
|
99
|
+
end
|
100
|
+
|
101
|
+
subject do
|
102
|
+
stream = StringIO.new
|
103
|
+
ApiDoc::HtmlWriter.new(@doc).write(stream)
|
104
|
+
stream.read
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should pretty-print the JSON data in the OUT section" do
|
108
|
+
subject.should include("{\n "meat": "beef",\n "lettuce": true\n}")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
|
3
|
+
class TestApp < Sinatra::Base
|
4
|
+
get '/tacos.json' do
|
5
|
+
JSON.generate [ { meat: 'beef' }, { meat: 'chicken' } ]
|
6
|
+
end
|
7
|
+
|
8
|
+
post '/tacos.json' do
|
9
|
+
request.body
|
10
|
+
end
|
11
|
+
|
12
|
+
get '/tacos/:id.json' do
|
13
|
+
JSON.generate({ meat: 'beef', id: params['id'] })
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class RequestMethodsApp < Sinatra::Base
|
18
|
+
get '/get.json' do
|
19
|
+
JSON.generate({ method: 'GET' })
|
20
|
+
end
|
21
|
+
post '/post.json' do
|
22
|
+
JSON.generate({ method: 'POST' })
|
23
|
+
end
|
24
|
+
put '/put.json' do
|
25
|
+
JSON.generate({ method: 'PUT' })
|
26
|
+
end
|
27
|
+
delete '/delete.json' do
|
28
|
+
JSON.generate({ method: 'DELETE' })
|
29
|
+
end
|
30
|
+
options '/options.json' do
|
31
|
+
JSON.generate({ method: 'OPTIONS' })
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
data/templates/layout.mustache
CHANGED
@@ -108,21 +108,20 @@
|
|
108
108
|
font-size: 1em;
|
109
109
|
}
|
110
110
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
}
|
111
|
+
.api-resource .desc {
|
112
|
+
margin: 1em 0;
|
113
|
+
color:
|
114
|
+
#333;
|
115
|
+
display: block;
|
116
|
+
font-family: Helvetica, sans-serif;
|
117
|
+
font-size: 13px;
|
118
|
+
font-weight: 100;
|
119
|
+
height: 17px;
|
120
|
+
line-height: 17px;
|
121
|
+
text-shadow:
|
122
|
+
rgba(255, 255, 255, 0.597656) 0px 1px 0px;
|
123
|
+
vertical-align: baseline;
|
124
|
+
}
|
126
125
|
.api-resource .params,
|
127
126
|
.api-resource .response {
|
128
127
|
font-family: Monaco, fixed;
|
data/templates/resource.mustache
CHANGED
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.
|
4
|
+
version: 0.1.3
|
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-
|
12
|
+
date: 2012-06-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
16
|
-
requirement: &
|
16
|
+
requirement: &70160243468020 !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: *
|
24
|
+
version_requirements: *70160243468020
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mustache
|
27
|
-
requirement: &
|
27
|
+
requirement: &70160243466720 !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: *
|
35
|
+
version_requirements: *70160243466720
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rack-test
|
38
|
-
requirement: &
|
38
|
+
requirement: &70160243465300 !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: *
|
46
|
+
version_requirements: *70160243465300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mustache
|
49
|
-
requirement: &
|
49
|
+
requirement: &70160243464320 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,21 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70160243464320
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: kramdown
|
60
|
+
requirement: &70160243462860 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70160243462860
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: rspec
|
60
|
-
requirement: &
|
71
|
+
requirement: &70160243476220 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ~>
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: 2.8.0
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *70160243476220
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: rdoc
|
71
|
-
requirement: &
|
82
|
+
requirement: &70160243474840 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ~>
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: '3.12'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *70160243474840
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: bundler
|
82
|
-
requirement: &
|
93
|
+
requirement: &70160243472660 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - ~>
|
@@ -87,10 +98,10 @@ dependencies:
|
|
87
98
|
version: 1.0.0
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *70160243472660
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: jeweler
|
93
|
-
requirement: &
|
104
|
+
requirement: &70160243471660 !ruby/object:Gem::Requirement
|
94
105
|
none: false
|
95
106
|
requirements:
|
96
107
|
- - ~>
|
@@ -98,10 +109,10 @@ dependencies:
|
|
98
109
|
version: 1.8.3
|
99
110
|
type: :development
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *70160243471660
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: json
|
104
|
-
requirement: &
|
115
|
+
requirement: &70160243470780 !ruby/object:Gem::Requirement
|
105
116
|
none: false
|
106
117
|
requirements:
|
107
118
|
- - ! '>='
|
@@ -109,10 +120,10 @@ dependencies:
|
|
109
120
|
version: '0'
|
110
121
|
type: :development
|
111
122
|
prerelease: false
|
112
|
-
version_requirements: *
|
123
|
+
version_requirements: *70160243470780
|
113
124
|
- !ruby/object:Gem::Dependency
|
114
125
|
name: sinatra
|
115
|
-
requirement: &
|
126
|
+
requirement: &70160243470020 !ruby/object:Gem::Requirement
|
116
127
|
none: false
|
117
128
|
requirements:
|
118
129
|
- - ! '>='
|
@@ -120,7 +131,7 @@ dependencies:
|
|
120
131
|
version: '0'
|
121
132
|
type: :development
|
122
133
|
prerelease: false
|
123
|
-
version_requirements: *
|
134
|
+
version_requirements: *70160243470020
|
124
135
|
description: Minimalist API documentation generator for Rack applications.
|
125
136
|
email: tj@turing.com
|
126
137
|
executables:
|
@@ -148,7 +159,10 @@ files:
|
|
148
159
|
- ftags
|
149
160
|
- lib/apidoc.rb
|
150
161
|
- spec/apidoc_spec.rb
|
162
|
+
- spec/before_and_after_spec.rb
|
163
|
+
- spec/html_writer_spec.rb
|
151
164
|
- spec/spec_helper.rb
|
165
|
+
- spec/support/test_apps.rb
|
152
166
|
- templates/apidoc_helper.rb
|
153
167
|
- templates/layout.mustache
|
154
168
|
- templates/resource.mustache
|
@@ -167,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
167
181
|
version: '0'
|
168
182
|
segments:
|
169
183
|
- 0
|
170
|
-
hash:
|
184
|
+
hash: 3086933107750207684
|
171
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
186
|
none: false
|
173
187
|
requirements:
|