api_blueprint 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c06b5d206b8bf0f3ca2d9540ce47da6200ff8c5
4
- data.tar.gz: 1979c9532714e356234d04858b37b437629d674a
3
+ metadata.gz: 6ce8f3d792afe506423895b1f7a80c2b63810b82
4
+ data.tar.gz: 76925ee493aaaae50cd7779bc11db13b02ed11df
5
5
  SHA512:
6
- metadata.gz: ff4835d306e95aa438ef3cfeaed9e777c3600e0beaaa6f0eb3b5569a544060b19c0c4ed4879eac9bc17bf1e47385c87f9618237c6a837cfb2833e5a5b8e8dd32
7
- data.tar.gz: 7811e24b5dfdd4912635ca738657e0c888b12520ae4b5a7cd6f616dd2ca075cfed70dd730c36c275d252075cdd157e454c3ae557be7d2ec250a1872fe1c7342b
6
+ metadata.gz: 03addbc9798e412cc9190aa447065701ce85c46fd625ac93d2d066b749492098d21511153c211a3dbf6559ec2a77ac49270d53f42fe69729331763737c839b30
7
+ data.tar.gz: 540918ac22be65b4997a86bad3b03edc55867d84c5c411cec7d8ddb7be702369a04c843a0fc1911dcb7ce2aa762b71c6f9af277532d4ac191df1d89d882159ad
@@ -0,0 +1,387 @@
1
+ (function() { 'use strict';
2
+ $(function() {
3
+ var docTitle = $('title').text();
4
+ var addLinkToHistory = false;
5
+
6
+ /* init href position */
7
+
8
+ var href = window.location.href.split('#')[1];
9
+ if (href) {
10
+ var target = $('#' + href);
11
+ if (target.length == 0) {
12
+ href = href.replace(/^\d+\-/g, '');
13
+ target = $('#' + href);
14
+ }
15
+
16
+ if (target.length) {
17
+ $('html, body').scrollTop( target.offset().top - 20 );
18
+
19
+ $(window).load(function() {
20
+ $('html, body').scrollTop( target.offset().top - 20 );
21
+
22
+ var interval = null, i = 0;
23
+
24
+ interval = setInterval(function() {
25
+ $('html, body').scrollTop( target.offset().top - 20 );
26
+ ++i;
27
+
28
+ if (i > 100) {
29
+ clearInterval(interval);
30
+ }
31
+ }, 10);
32
+ });
33
+ }
34
+ }
35
+
36
+ /* wrap contents */
37
+
38
+ var wrapFromTo = function(container, from, to) {
39
+ $(from).each(function() {
40
+ var starter = $(this);
41
+ var wrapper = $(container);
42
+ var content = starter.nextUntil(to);
43
+
44
+ starter.before(wrapper);
45
+ wrapper.append(starter);
46
+ wrapper.append(content);
47
+ });
48
+ };
49
+
50
+ wrapFromTo('<div class="toc">', "h1:contains('Table Of Contents')", 'h1');
51
+ wrapFromTo('<div class="resource">', "h1:contains('Resource: ')", 'h1, p.footer');
52
+ wrapFromTo('<div class="action">', ".resource > h2:contains('Action: ')", 'h2');
53
+ wrapFromTo('<div class="description">', ".action > h3:contains('Description:')", 'h3:contains("Examples")');
54
+ wrapFromTo('<div class="examples">', ".action > h3:contains('Examples:')", 'h3');
55
+ wrapFromTo('<div class="example">', ".examples > h4:contains('Example: ')", 'h4');
56
+
57
+ /* highlighting active toc */
58
+
59
+ var markTocActive = function() {
60
+ var pos = $(window).scrollTop() + 30;
61
+
62
+ var resources = $('h1');
63
+ var pickResource = resources[0]; // null;
64
+ resources.each(function() {
65
+ if ($(this).offset().top > pos) {
66
+ return false;
67
+ }
68
+ pickResource = this;
69
+ });
70
+
71
+ var tocLinks = $('.toc a');
72
+ tocLinks.removeClass('active');
73
+
74
+ var actions = $('h2');
75
+ var pickAction = null;
76
+ actions.each(function() {
77
+ if ($(this).offset().top > pos) {
78
+ return false;
79
+ }
80
+ pickAction = this;
81
+ });
82
+
83
+ if (pickAction) {
84
+ var id = $(pickAction).attr('id');
85
+ var tocActionLink = $('.toc a[href="#' + id + '"]');
86
+
87
+ tocActionLink.addClass('active');
88
+ }
89
+
90
+ if (pickResource) {
91
+ var id = $(pickResource).attr('id');
92
+ var tocLink = $('.toc a[href="#' + id + '"]');
93
+
94
+ var currentTocSection = tocLink.closest('li');
95
+ var otherSections = currentTocSection.siblings();
96
+ var activeChildren = currentTocSection.find('ul li a.active').length > 0;
97
+
98
+ tocLink.addClass('active');
99
+ tocLink.toggleClass('active-children',
100
+ activeChildren);
101
+ otherSections.find('a').removeClass('active');
102
+
103
+ currentTocSection.children('ul').slideDown();
104
+ otherSections.children('ul').slideUp();
105
+
106
+ if (history && history.replaceState) {
107
+ if (activeChildren) {
108
+ var newHash = tocActionLink.attr('href').split('#')[1];
109
+ var newTitle = tocActionLink.text() + ' - ' + tocLink.text() + ' - ' + docTitle;
110
+ } else {
111
+ var newHash = tocLink.attr('href').split('#')[1];
112
+ var newTitle = tocLink.text() + ' - ' + docTitle;
113
+ }
114
+
115
+ if (window.location.hash.split('#')[1] != newHash || document.title != newTitle) {
116
+ document.title = newTitle;
117
+
118
+ var newUrl = window.location.href.split('#')[0] + '#' + newHash;
119
+ var newData = { hash: newHash };
120
+
121
+ if (addLinkToHistory) {
122
+ history.pushState(newData, newTitle, newUrl);
123
+
124
+ addLinkToHistory = false;
125
+ } else {
126
+ history.replaceState(newData, newTitle, newUrl);
127
+ }
128
+ }
129
+ }
130
+ }
131
+ };
132
+
133
+ $(window).scroll(markTocActive);
134
+ markTocActive();
135
+
136
+ /* scroll for toc links */
137
+
138
+ var scrollToTarget = function(target) {
139
+ if (target.length < 1) {
140
+ return;
141
+ }
142
+
143
+ var position = target.offset().top;
144
+
145
+ $('html, body').scrollTop( position + 80 ).animate({
146
+ scrollTop: position - 20
147
+ });
148
+ };
149
+
150
+ var scrollToLinkTarget = function(link) {
151
+ addLinkToHistory = true;
152
+
153
+ var selector = link.attr('href');
154
+ var target = $(selector);
155
+
156
+ scrollToTarget(target);
157
+
158
+ return false;
159
+ };
160
+
161
+ window.onpopstate = function(event) {
162
+ var hash = event.state.hash;
163
+ if (!hash) {
164
+ return;
165
+ }
166
+
167
+ var target = $('#' + hash);
168
+ setTimeout(function() {
169
+ scrollToTarget(target);
170
+ }, 0);
171
+ };
172
+
173
+ /* prettify code */
174
+
175
+ $('pre').addClass('prettyprint');
176
+ $('h5:contains("headers:") + pre').removeClass('prettyprint');
177
+
178
+ /* generate the curl requests */
179
+
180
+ var getHost = function() {
181
+ var host = $('#host');
182
+
183
+ if (host.length && host.text().substr(0, 4) === 'http') {
184
+ return host.text();
185
+ } else if (window.location.host.length) {
186
+ return window.location.protocol + '//' + window.location.host;
187
+ } else {
188
+ return 'http://www.example.com';
189
+ }
190
+ };
191
+
192
+ var generateCurlExample = function(exampleContent) {
193
+ if (exampleContent.find('.curl').length) {
194
+ return;
195
+ }
196
+
197
+ var actionContent = exampleContent.closest('.action');
198
+ var method = actionContent.find('h4:contains("Signature:") + p > strong').text().toUpperCase();
199
+ if (method !== 'GET' && method !== 'POST' && method !== 'PATCH' && method !== 'DELETE') {
200
+ return;
201
+ }
202
+
203
+ var path = actionContent.find('h4:contains("Signature:") + p > code').text();
204
+ if (path[0] !== '/') {
205
+ return;
206
+ }
207
+
208
+ var headers = exampleContent.find('h5:contains("Request headers:") + pre').text();
209
+ var params = exampleContent.find('h5:contains("Request params:") + pre').text();
210
+ var rawInfo = exampleContent.children('h5:contains("Request"), h5:contains("Request") + pre');
211
+ var prefix = ' ', suffix = ' \\\\\n', curl = '';
212
+ var multipart = !! headers.match(/multipart/);
213
+
214
+ var rawWrapper = $('<div class="raw"></div>');
215
+ exampleContent.children('h4').after(rawWrapper);
216
+ rawWrapper.append(rawInfo);
217
+
218
+ curl += 'curl --include' + suffix;
219
+ curl += prefix + '--request ' + method + suffix;
220
+
221
+ if (headers) {
222
+ headers.split("\n").forEach(function(header) {
223
+ if (header.length) {
224
+ curl += prefix + '--header "' + header.replace(/\s+/, ' ') + '"' + suffix;
225
+ }
226
+ });
227
+ }
228
+
229
+ if (params && method !== 'GET') {
230
+ if (multipart) {
231
+ $.each($.param($.parseJSON(params)).split("&"), function(index, param) {
232
+ var file = decodeURIComponent(param).match(/\S+\+\<(\S+?)\>/);
233
+
234
+ if (file) {
235
+ curl += prefix + '--form "' + decodeURIComponent(param).split('=')[0] + '=@' + file[1] + '"' + suffix;
236
+ } else {
237
+ curl += prefix + '--form "' + decodeURIComponent(param) + '"' + suffix;
238
+ }
239
+ });
240
+ } else {
241
+ curl += prefix + "--data-binary '" + params.replace(/\n+$/, '') + "'" + suffix;
242
+ }
243
+ }
244
+
245
+ curl += prefix + '"' + getHost() + path;
246
+ if (params && method === 'GET') {
247
+ curl += '?' + $.param($.parseJSON(params)).replace(/&/g, '&amp;');
248
+ }
249
+ curl += '"';
250
+
251
+ exampleContent.children('h4').after('<div class="curl"><h5>Request in cURL:</h5><pre><code>' + curl + '</code></pre></div>');
252
+
253
+ var controls = $("<span class='format-toggle'><a class='as-raw' href=''>Raw</a><a class='as-curl' href=''>cURL</a></span>");
254
+ exampleContent.find('> div h5:first-child').append(controls);
255
+ }
256
+
257
+ $(document).on('click', '.format-toggle a', function() {
258
+ $('html').toggleClass('example-curl', $(this).hasClass('as-curl'));
259
+
260
+ return false;
261
+ });
262
+
263
+ /* example unfolding */
264
+
265
+ $(document).on('click', '.example > h4', function() {
266
+ var thisExample = $(this).closest('.example');
267
+
268
+ $('.example').not(thisExample).removeClass('visible');
269
+ thisExample.toggleClass('visible');
270
+
271
+ if (thisExample.hasClass('visible')) {
272
+ generateCurlExample(thisExample);
273
+
274
+ $('html, body').animate({
275
+ scrollTop: thisExample.offset().top - 20
276
+ });
277
+ }
278
+
279
+ return false;
280
+ });
281
+
282
+ $('h5:contains("Response headers:") + pre').filter(function(item) {
283
+ var status = $(this).text().match(/Status\:\s*(\d+)/)[1];
284
+
285
+ return (status && parseInt(status) > 0 && parseInt(status) >= 400);
286
+ }).closest('.example').addClass('failed');
287
+
288
+ /* cut unnecessary texts */
289
+
290
+ $('.example > h4').each(function(header) {
291
+ $(this).text($(this).text().replace('Example: ', ''))
292
+ });
293
+
294
+ /* add example status descriptions */
295
+
296
+ $('.examples').append("<p class='example-description'>Examples that depict proper requests resulting in status 200 are marked with <em class='green'>green dots</em>, while those that depict wrong usage are marked with <em class='red'>red dots</em>.</p>")
297
+
298
+ /* add & handle the toc hider */
299
+
300
+ var tocHider = $('<a href="#" class="toc-hider"></a>');
301
+ var tocHeader = $('.toc h1');
302
+ tocHeader.after(tocHider);
303
+ tocHider.append(tocHeader);
304
+
305
+ tocHider.click(function() {
306
+ $('html').toggleClass('hide-toc');
307
+
308
+ return false;
309
+ });
310
+
311
+ /* mark js */
312
+
313
+ $('html').addClass('js');
314
+
315
+ /* handle param table */
316
+
317
+ $('h4:contains("Parameters:") + table').addClass('parameters');
318
+
319
+ $('table.parameters td:contains("[]")').each(function() {
320
+ var td = $(this),
321
+ level = td.text().match(/\[\]/g).length + 1,
322
+ row = td.closest('tr');
323
+
324
+ td.text(td.text().replace(/\[\]/g, ''));
325
+ row.addClass('param-level-' + level);
326
+ });
327
+
328
+ $('table.parameters code:contains("Example:")').addClass('example').each(function() {
329
+ $(this).text($(this).text().replace("Example:", ''));
330
+ });
331
+
332
+ $('table.parameters td:nth-child(2) strong:contains("required")').addClass("required");
333
+
334
+ /* Autolink */
335
+
336
+ $('a[href="#menu"]').addClass('menu-autolink');
337
+
338
+ $(document).on('click', 'a[href="#menu"]', function() {
339
+ var link = $(this);
340
+ var text = link.text();
341
+ var targetLink = $('.toc a:contains("' + text + '")');
342
+
343
+ if (targetLink.length) {
344
+ if (targetLink.length > 1) {
345
+ targetLink.each(function() {
346
+ var eachLink = $(this);
347
+
348
+ if (eachLink.text() == text) {
349
+ targetLink = eachLink;
350
+ return false;
351
+ }
352
+ });
353
+ }
354
+
355
+ link.attr('href', targetLink.attr('href'));
356
+
357
+ return scrollToLinkTarget(targetLink);
358
+ }
359
+
360
+ return false;
361
+ });
362
+
363
+ $('a[href="#example"]').addClass('example-autolink');
364
+
365
+ $(document).on('click', 'a[href="#example"]', function(e) {
366
+ var link = $(this);
367
+ var text = link.text();
368
+ var target = $('.example h4:contains("' + text + '")');
369
+
370
+ if (target.length) {
371
+ scrollToTarget(target);
372
+
373
+ if (! target.closest('.example').hasClass('visible')) {
374
+ target.click();
375
+ }
376
+ }
377
+
378
+ return false;
379
+ });
380
+
381
+ $(document).on('click', 'a[href^="#"]', function() {
382
+ return scrollToLinkTarget($(this));
383
+ });
384
+ });
385
+ })();
386
+
387
+
@@ -0,0 +1,172 @@
1
+ $lead: rgb(204, 17, 67);
2
+ $code: rgb(240, 230, 140);
3
+ $succ: rgb(152, 251, 152);
4
+ $fail: rgb(255, 160, 160);
5
+
6
+ $toc-width: 200px;
7
+
8
+ #title, #host, #copyright { display: none; }
9
+
10
+ html, body { background: #eee; font-family: Helvetica, "Trebuchet MS", Arial, sans-serif; padding: 0; margin: 0; font-size: 14px; }
11
+ code { font-family: "Lucida Console", Monaco, monospace; }
12
+ @media screen {
13
+ html.js body { padding-left: $toc-width; }
14
+ }
15
+
16
+ html.hide-toc {
17
+ body { padding-left: 0; }
18
+ .toc { bottom: auto; opacity: 0; border-bottom: 1px solid #ccc; box-shadow: 0px 0px 20px #888;
19
+ &:hover { opacity: 1; }
20
+ ul { display: none; }
21
+ }
22
+ }
23
+
24
+ a { text-decoration: none; color: $lead; }
25
+ a:hover { text-decoration: underline; }
26
+ h1, h2, h3, h4, h5 { font-weight: 300; margin: 20px; color: $lead; }
27
+ p { margin: 20px; }
28
+ p, li, td { line-height: 1.4em; }
29
+ pre { margin: 20px; padding: 5px; overflow-x: auto; background: #111 !important; color: $code; }
30
+ li { margin: 5px 0; }
31
+ ul ul { padding-left: 20px; }
32
+
33
+ table { text-align: left; width: 100%; border-spacing: 0; margin: 20px 0; margin-left: 10px;
34
+ p { margin: 0; }
35
+ span.param-level { display: none; }
36
+ td, th { padding: 8px 10px; vertical-align: top; }
37
+ th { font-size: 1em; font-weight: normal; color: #999; text-transform: uppercase; padding: 4px 10px; }
38
+ td { border-top: 1px solid #bbb; }
39
+ }
40
+
41
+ table.parameters {
42
+ tr.param-level-2 {
43
+ td { border-top-color: transparent; }
44
+ td:first-child { padding-left: 20px; }
45
+ }
46
+ tr.param-level-3 {
47
+ td { border-top-color: transparent; }
48
+ td:first-child { padding-left: 30px; }
49
+ }
50
+ tr.param-level-4 {
51
+ td { border-top-color: transparent; }
52
+ td:first-child { padding-left: 40px; }
53
+ }
54
+ code.example { display: block; word-wrap: break-word; color: #999; max-width: 120px; font-size: 0.9em; }
55
+ td:first-child { font-weight: bold; }
56
+ strong.required { color: $lead; display: block; }
57
+ }
58
+
59
+ a.menu-autolink, a.example-autolink {
60
+ &:before { margin-right: 1px; background: rgba($lead, 0); border-radius: 100px; text-decoration: none !important; width: 1.25em; display: inline-block; text-align: center; font-weight: bold; transition: 0.15s; }
61
+ &:hover:before { background: $lead; color: white; }
62
+ }
63
+
64
+ a.menu-autolink {
65
+ &:before { content: '☍'; }
66
+ }
67
+
68
+ a.example-autolink {
69
+ &:before { content: '✎'; }
70
+ }
71
+
72
+ @media screen {
73
+ blockquote { margin: 20px; background: #fff; overflow: hidden; border: 1px solid #ccc; box-shadow: 4px 0px 0px $lead inset;
74
+ p { margin: 10px 20px; }
75
+ }
76
+
77
+ .toc { position: fixed; left: 0; top: 0; bottom: 0; width: $toc-width; z-index: 10; overflow-y: auto; background: #f5f5f5; border-right: 1px solid #ccc; transition: opacity 0.3s; font-size: 0.9em;
78
+ h1 { font-size: 1.1em; }
79
+ ul li { margin: 0;
80
+ a { padding: 4px 10px; transition: 0.15s; line-height: 1.2em; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;
81
+ &:hover { text-decoration: none; box-shadow: -2px 0px 0px 0px #bbb inset; }
82
+ &.active { color: #000; }
83
+ &.active:not(.active-children) { box-shadow: -2px 0px 0px 0px $lead inset; }
84
+ }
85
+ }
86
+ > ul { list-style-type: none; margin: 0; padding-left: 0;
87
+ > li {
88
+ > a { font-size: 1em; text-transform: uppercase; margin: 0; display: block; color: #999;
89
+ }
90
+ > ul { list-style-type: none; padding-left: 0; padding-bottom: 20px; padding-top: 0px; display: none;
91
+ > li > a { font-size: 1.0em; display: block; padding-left: 20px; color: #888;
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+
99
+ @media print {
100
+ html, body { height: 100%; }
101
+
102
+ #title, #copyright { display: block; }
103
+ #title { font-size: 2em; color: $lead; padding-top: 50%; margin-top: 60px; }
104
+ #copyright { page-break-after: always; }
105
+
106
+ p.footer.copyright { display: none; }
107
+
108
+ h1 { page-break-before: always; }
109
+ .toc h1 { page-break-before: auto; }
110
+ .examples {
111
+ .example-description { display: none; }
112
+ .example { display: none; }
113
+ .example:nth-child(2) { display: block; }
114
+
115
+ &:after { content: 'Refer to online documentation for more examples on this action\'s usage.'; display: block; margin: 20px; font-weight: 300; }
116
+ }
117
+ table { padding: 0 20px; }
118
+ }
119
+
120
+ @media screen {
121
+ .resource { clear: both; position: relative; z-index: 1;
122
+ .action { clear: both; border-bottom: 1px solid #ccc; overflow: hidden;
123
+ h3 { text-transform: uppercase; }
124
+
125
+ .description { float: left; width: 50%; background: #fff; border-top: 1px solid #ccc; position: relative;
126
+ blockquote { background: #eee; }
127
+ }
128
+ .examples { float: right; width: 50%; color: #fff; background: #333; border-top: 1px solid #ccc; position: relative;
129
+ .example-description { color: #888; font-style: italic; margin-top: 15px; margin-bottom: 15px;
130
+ em { color: #aaa; white-space: nowrap; font-style: normal; }
131
+ em:before { content: ' '; display: inline-block; height: 10px; width: 10px; border-radius: 5px; margin-right: 3px; background: $succ; }
132
+ em.red:before { background: $fail; }
133
+ }
134
+ h3 { color: #eee; margin-bottom: 13px; }
135
+ h5 { color: #888; text-transform: uppercase; }
136
+ .example.visible {
137
+ > * { display: block; }
138
+ }
139
+ .example {
140
+ > * { display: none; margin: 20px; }
141
+ > h4 { display: block; cursor: pointer; color: #ddd; font-size: 1em; padding: 7px 20px 7px 40px; position: relative; margin: 0; transition: 0.15s; }
142
+ > h4:before { position: absolute; top: 50%; margin-top: -5px; left: 20px; height: 10px; width: 10px; border-radius: 5px; background: $succ; display: block; content: ' '; }
143
+ > h4:hover { color: #fff; background: #4c4c4c; }
144
+ > .curl, > .raw { margin: 0; }
145
+ > .curl { display: none; }
146
+ }
147
+
148
+ .example.failed > h4:before { background: $fail; }
149
+ }
150
+
151
+ .description:after, .examples:after { position: absolute; top: 100%; height: 10000px; left: 0; right: 0; background: #fff; content: ' '; }
152
+ .examples:after { background: #333; }
153
+ }
154
+ }
155
+ }
156
+
157
+ .format-toggle { float: right;
158
+ a { color: #888; margin-left: 5px; }
159
+ .as-raw { color: #bbb; }
160
+ }
161
+
162
+ html.example-curl .resource .action .examples .example.visible {
163
+ > .curl { display: block; }
164
+ > .raw { display: none; }
165
+ .format-toggle {
166
+ .as-raw { color: #888; }
167
+ .as-curl { color: #bbb; }
168
+ }
169
+ }
170
+
171
+ p.footer { text-align: center; color: #888; clear: both; }
172
+
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html lang="en">
4
+ <head>
5
+ <title>Visuality API</title>
6
+
7
+ <meta charset="utf-8">
8
+
9
+ <style id="blueprint-style"></style>
10
+
11
+ <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
12
+ <script id="blueprint-script"></script>
13
+ <script type="text/javascript" src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js?skin=desert"></script>
14
+ </head>
15
+
16
+ <body>
17
+ <div id="blueprint-document">
18
+ </div>
19
+
20
+ <p class='footer copyright'>© Visuality</p>
21
+ </body>
22
+ </html>
23
+
@@ -1,3 +1,3 @@
1
1
  module ApiBlueprint
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_blueprint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol Słuszniak
@@ -80,12 +80,8 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- description: You start with method list generated from RSpec request specs. For each
84
- method, you get a list of parameters and examples. Then, you can extend it in whatever
85
- way you need using Markdown syntax. You can organize documentation files into partials.
86
- Upon any API change, like serializer change that changes responses, you can update
87
- automatically generated parts of docs. Once done, you can compile your documentation
88
- into single, nicely styled HTML file. You can also auto-deploy it via SSH.
83
+ description: Semi-automatic solution for creating Rails app's API documentation based
84
+ on RSpec request specs.
89
85
  email: k.sluszniak@visuality.pl
90
86
  executables: []
91
87
  extensions: []
@@ -100,6 +96,9 @@ files:
100
96
  - lib/api_blueprint/collect/renderer.rb
101
97
  - lib/api_blueprint/collect/spec_hook.rb
102
98
  - lib/api_blueprint/collect/storage.rb
99
+ - lib/api_blueprint/compile/assets/blueprint.js
100
+ - lib/api_blueprint/compile/assets/blueprint.scss
101
+ - lib/api_blueprint/compile/assets/index.html
103
102
  - lib/api_blueprint/compile/compile.rb
104
103
  - lib/api_blueprint/compile/storage.rb
105
104
  - lib/api_blueprint/railtie.rb