rspec-apidoc 0.1.3 → 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.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/lib/rspec/apidoc/static/template.html.erb +22 -14
- data/lib/rspec/apidoc.rb +11 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8700f45112bb1c1a6a8ca9770020b00c5e1887e673e4353b305ecc66f89f5d70
|
4
|
+
data.tar.gz: 9ce1fb0139b48f53dce57b0f51728ddcbf58546b64c99105437dc9b637bdf5ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 617d0a747bb1977de943ec794fde2c4975bc5058d93c5e6cdd1ae88a8075e24c20db6b187b3d8fb59661961974555305c50ace0558662697103bb60c3feab20c
|
7
|
+
data.tar.gz: 0c82c4f051092f3517279e1c5d4ca0cd4e7eaae8471dfe81b8240bad3517d0d023965e129cf0fb169d6df5b372cd23d7fa8d8b4b88f695ccceef35a85b1bac2e
|
data/README.md
CHANGED
@@ -47,12 +47,17 @@ RSpec.configure do |config|
|
|
47
47
|
|
48
48
|
config.apidoc_title = 'YOUR.APP API Documentation'
|
49
49
|
config.apidoc_description = \
|
50
|
-
'A longer intro to add before the examples:
|
50
|
+
'A longer intro to add before the examples: authentication, status codes...'
|
51
51
|
|
52
52
|
config.apidoc_host = 'https://api.YOUR.APP'
|
53
53
|
# Optionally specify the output file path.
|
54
54
|
config.apidoc_output_filename = 'apidoc.html'
|
55
55
|
|
56
|
+
# Customize the authentication header
|
57
|
+
config.apidoc_auth_header = lambda do |headers|
|
58
|
+
'"Authorization: Bearer $AUTH_TOKEN"' if headers['Authorization']
|
59
|
+
end
|
60
|
+
|
56
61
|
# You can add it to any example based on the metadata.
|
57
62
|
config.after(:each, type: :request) do |example|
|
58
63
|
RSpec::Apidoc.add(self, example)
|
@@ -92,12 +92,12 @@
|
|
92
92
|
<% examples.each do |controller, items| %>
|
93
93
|
<% items.sort.each_with_index do |(action, action_items), mindex| %>
|
94
94
|
<% action_items.each_with_index do |item, index| %>
|
95
|
-
<div class="example">
|
95
|
+
<div class="example" id="<%= controller %>-<%= action %>-<%= mindex + index %>">
|
96
96
|
<% if mindex == 0 %>
|
97
97
|
<%= item[:controller_comment] %>
|
98
98
|
<% end %>
|
99
99
|
|
100
|
-
<% if index == 0 %>
|
100
|
+
<% if mindex == 0 && index == 0 %>
|
101
101
|
<div class="example-doc" id="<%= controller %>-<%= action %>">
|
102
102
|
<%= item[:action_comment] || ( item[:method] + ' ' + controller ) %>
|
103
103
|
</div>
|
@@ -108,15 +108,20 @@
|
|
108
108
|
<div class="request">
|
109
109
|
<span>Request</span>
|
110
110
|
<pre>
|
111
|
-
$ curl '<%= host %><%= item[:path] %><%= ('?' + item[:query]) if item[:query] != '' %>' \
|
112
|
-
|
113
|
-
-H
|
114
|
-
|
115
|
-
|
116
|
-
<%=
|
111
|
+
$ curl -X <%= item[:method] %> '<%= host %><%= item[:path] %><%= ('?' + item[:query]) if item[:query] != '' %>' \
|
112
|
+
<%- if item[:auth_header] -%>
|
113
|
+
-H <%= item[:auth_header] %> <%- if item[:content_type] %>\<% end %>
|
114
|
+
<%- end -%>
|
115
|
+
<%- if item[:content_type] -%>
|
116
|
+
-H 'Content-Type: <%= item[:content_type] %>' <%- if item[:request_body] %>\<% end %>
|
117
|
+
<%- end -%>
|
118
|
+
<%- if item[:request_body] != '' -%>
|
119
|
+
-d - << EOF
|
120
|
+
<% if item[:request_body].is_a?(String) -%>
|
121
|
+
<%=h item[:request_body] -%>
|
117
122
|
<% else %>
|
118
123
|
<%=h JSON.pretty_generate(item[:request_body]) %>
|
119
|
-
|
124
|
+
<%- end %>
|
120
125
|
EOF
|
121
126
|
<% end %>
|
122
127
|
</pre>
|
@@ -124,14 +129,14 @@ EOF
|
|
124
129
|
<div class="response">
|
125
130
|
<span>Response</span>
|
126
131
|
<pre>
|
127
|
-
< Content-Type: <%= item[:response_content_type]
|
132
|
+
< Content-Type: <%= item[:response_content_type] -%>
|
128
133
|
< Status: <%= item[:status] %>
|
129
134
|
|
130
|
-
<% if item[:response_body].is_a?(String)
|
131
|
-
<%=h item[:response_body]
|
135
|
+
<% if item[:response_body].is_a?(String) -%>
|
136
|
+
<%=h item[:response_body] -%>
|
132
137
|
<% else %>
|
133
|
-
<%=h JSON.pretty_generate(item[:response_body])
|
134
|
-
|
138
|
+
<%=h JSON.pretty_generate(item[:response_body]) -%>
|
139
|
+
<%- end -%>
|
135
140
|
</pre>
|
136
141
|
</div>
|
137
142
|
</div>
|
@@ -148,6 +153,9 @@ EOF
|
|
148
153
|
</div>
|
149
154
|
<div class="footer">
|
150
155
|
© <%= Date.current.year %> <%= title %>
|
156
|
+
<p>
|
157
|
+
<small>Latest update at <%= DateTime.current.to_s %></small>
|
158
|
+
</p>
|
151
159
|
</div>
|
152
160
|
</body>
|
153
161
|
</html>
|
data/lib/rspec/apidoc.rb
CHANGED
@@ -13,6 +13,7 @@ module RSpec
|
|
13
13
|
config.add_setting(:apidoc_title)
|
14
14
|
config.add_setting(:apidoc_description)
|
15
15
|
config.add_setting(:apidoc_host)
|
16
|
+
config.add_setting(:apidoc_auth_header, default: ->(headers) {})
|
16
17
|
config.add_setting(
|
17
18
|
:apidoc_template_path,
|
18
19
|
default: File.expand_path('apidoc/static/template.html.erb', __dir__)
|
@@ -65,6 +66,14 @@ module RSpec
|
|
65
66
|
RSpec.configuration.apidoc_host
|
66
67
|
end
|
67
68
|
|
69
|
+
# Returns the API authentication header callback result
|
70
|
+
#
|
71
|
+
# @param headers [ActionDispatch::Http::Headers] object
|
72
|
+
# @return [Object]
|
73
|
+
def self.auth_header(headers)
|
74
|
+
RSpec.configuration.apidoc_auth_header.call(headers)
|
75
|
+
end
|
76
|
+
|
68
77
|
# Returns the collected examples, sorted
|
69
78
|
#
|
70
79
|
# @return [Array] a list of [Hash] items
|
@@ -111,6 +120,7 @@ module RSpec
|
|
111
120
|
action_comment: action_comment,
|
112
121
|
|
113
122
|
content_type: spec.request.content_type,
|
123
|
+
auth_header: auth_header(spec.request.headers),
|
114
124
|
method: spec.request.method,
|
115
125
|
path: spec.request.path,
|
116
126
|
query: spec.request.query_parameters.to_param,
|
@@ -153,7 +163,7 @@ module RSpec
|
|
153
163
|
def close(_notification)
|
154
164
|
return if examples.empty?
|
155
165
|
|
156
|
-
erb = ERB.new(File.read(template_path))
|
166
|
+
erb = ERB.new(File.read(template_path), trim_mode: '-')
|
157
167
|
File.write(output_filename, erb.result(self.binding))
|
158
168
|
end
|
159
169
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-apidoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stas Suscov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-11-
|
11
|
+
date: 2021-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: method_source
|