apitome 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 03db784396e463e2e3117c3876221da9501bdf370b2b31d64af0aeb20832f6a7
4
- data.tar.gz: 2c44ee118c18033c0ff752156b34501bc915afa2f1ff14db11bdd48cb63ad899
3
+ metadata.gz: efbf3bab00d3066329b5e4e13d06759c955126affdf49134524c53ca598e4cd7
4
+ data.tar.gz: 17eb4bdfe7ae58f73bc61a60e20e2326e8315c332992b63f43e3c5b28354b968
5
5
  SHA512:
6
- metadata.gz: 2ad3ae73aac6bc4fda71089236cc5b1387ace99b0289777249da6cd0c5e44efb3e99d07d2107006a23149b902dc5890835b18fd9034c34759054436a1dd0731e
7
- data.tar.gz: c565e5d1a99fc2157d7892bdd7bed7d8bf353c6472c234c8ac7468d0fc8eb50dc8511ee96a115b071343ddb61cf93bd71284644b2da72e5a26c872489f63ec83
6
+ metadata.gz: 50602b8235b8f3f6bc3499526044853f478a353de18d2117e135f749bf76aeb3222283a60613a6dc88a20b8118f15790b5f3a44e8fb7edd0b1b203194f1a77a8
7
+ data.tar.gz: 5e1c5b4dd2ecdd6db82f120a96ff7132defea2cf9e642acab80272f7821a854cd9b4f78e8e266bdb1a81b015033997073707419a390b4a32d3e44856fc148fbb
data/README.md CHANGED
@@ -5,7 +5,7 @@ Apitome
5
5
  [![Build Status](https://img.shields.io/travis/jejacks0n/apitome.svg)](https://travis-ci.org/jejacks0n/apitome)
6
6
  [![Maintainability](https://api.codeclimate.com/v1/badges/eb8dd1c22f1da11b6c02/maintainability)](https://codeclimate.com/github/jejacks0n/apitome/maintainability)
7
7
  [![Test Coverage](https://api.codeclimate.com/v1/badges/eb8dd1c22f1da11b6c02/test_coverage)](https://codeclimate.com/github/jejacks0n/apitome/test_coverage)
8
- [![License](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)
8
+ [![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://opensource.org/licenses/MIT)
9
9
 
10
10
  Apitome is a API documentation tool for Rails built on top of the great RSpec DSL included in
11
11
  [rspec_api_documentation](https://github.com/zipmark/rspec_api_documentation) (RAD). It's designed to display the
@@ -166,8 +166,8 @@ documentation for each configuration directive. Otherwise you can get a refreshe
166
166
 
167
167
  ## Customization
168
168
  You can put custom views and partials in your own `views/apitome/docs` -- check
169
- [here for examples](tree/master/app/views/apitome/docs). You can put any partial in your own path and they will be
170
- overridden.
169
+ [here for examples](https://github.com/jejacks0n/apitome/tree/master/app/views/apitome/docs). You can put any
170
+ partial in your own path and they will be overridden.
171
171
 
172
172
  Additional customization can come in the form of providing custom css and javascript. You can do this by creating the
173
173
  files you want (that often times require the default assets in the gem), and then configure Apitome to use those instead
@@ -3,7 +3,7 @@ require "open-uri"
3
3
  class Apitome::DocsController < Object.const_get(Apitome.configuration.parent_controller)
4
4
  layout Apitome.configuration.layout
5
5
 
6
- helper_method *[
6
+ helper_method(*[
7
7
  :resources,
8
8
  :example,
9
9
  :formatted_body,
@@ -13,7 +13,7 @@ class Apitome::DocsController < Object.const_get(Apitome.configuration.parent_co
13
13
  :set_example,
14
14
  :id_for,
15
15
  :rendered_markdown
16
- ]
16
+ ])
17
17
 
18
18
  def index
19
19
  end
@@ -62,7 +62,7 @@ class Apitome::DocsController < Object.const_get(Apitome.configuration.parent_co
62
62
  if Apitome.configuration.remote_url && Apitome.configuration.http_basic_authentication
63
63
  { http_basic_authentication: Apitome.configuration.http_basic_authentication }
64
64
  else
65
- {}
65
+ nil
66
66
  end
67
67
  end
68
68
 
@@ -80,14 +80,19 @@ class Apitome::DocsController < Object.const_get(Apitome.configuration.parent_co
80
80
  end
81
81
 
82
82
  def formatted_body(body, type)
83
+ return body if body == " "
84
+ return body if body == "[binary data]" # see https://github.com/zipmark/rspec_api_documentation/blob/560c3bdc7bd5581e7c223334390221ecfc910be8/lib/rspec_api_documentation/client_base.rb#L88-L96
83
85
  if type =~ /json/ && body.present?
84
86
  JSON.pretty_generate(JSON.parse(body))
85
87
  else
86
88
  body
87
89
  end
88
- rescue JSON::ParserError
89
- return body if body == " "
90
- raise JSON::ParserError
90
+ rescue => e
91
+ if Apitome.configuration.formatted_body_error_handler
92
+ Apitome.configuration.formatted_body_error_handler.call(e, body, type)
93
+ else
94
+ raise
95
+ end
91
96
  end
92
97
 
93
98
  def param_headers(params)
@@ -8,15 +8,26 @@
8
8
  <div id="<%= "request-#{index}" %>">
9
9
  <h3><%= t(:request, scope: :apitome) %></h3>
10
10
  <div class="request">
11
+ <% begin %>
11
12
  <%= render partial: 'apitome/docs/route', locals: {request: request, index: index} %>
12
13
  <%= render partial: 'apitome/docs/headers', locals: {request: request, index: index, headers: request['request_headers']} %>
13
14
  <%= render partial: 'apitome/docs/query', locals: {request: request, index: index} unless request['request_query_parameters'].empty? %>
14
15
  <%= render partial: 'apitome/docs/body', locals: {request: request, index: index, body: request['request_body'], type: request['request_content_type']} if request['request_body'] %>
15
16
  <%= render partial: 'apitome/docs/curl', locals: {request: request, index: index} if request['curl'] %>
17
+ <%
18
+ rescue => e
19
+ if Apitome.configuration.example_error_handler
20
+ Apitome.configuration.example_error_handler.call(e, "request", request)
21
+ else
22
+ raise
23
+ end
24
+ end
25
+ %>
16
26
  </div>
17
27
 
18
28
  <h3><%= t(:response, scope: :apitome) %></h3>
19
29
  <div class="response">
30
+ <% begin %>
20
31
  <%- if Apitome.configuration.simulated_response %>
21
32
  <%= link_to('Simulated Response', simulated_path(example[:link])) if example[:link].present? %>
22
33
  <%- end %>
@@ -24,6 +35,15 @@
24
35
  <%= render partial: 'apitome/docs/status', locals: {request: request, index: index} %>
25
36
  <%= render partial: 'apitome/docs/headers', locals: {request: request, index: index, headers: request['response_headers']} %>
26
37
  <%= render partial: 'apitome/docs/body', locals: {request: request, index: index, body: request['response_body'], type: request['response_content_type']} if request['response_body'] %>
38
+ <%
39
+ rescue => e
40
+ if Apitome.configuration.example_error_handler
41
+ Apitome.configuration.example_error_handler.call(e, "response", request)
42
+ else
43
+ raise
44
+ end
45
+ end
46
+ %>
27
47
  </div>
28
48
  </div>
29
49
  <% end %>
@@ -11,7 +11,7 @@
11
11
  <tr>
12
12
  <td class="name">
13
13
  <% if param['scope'] %>
14
- <%= "#{param['scope']}[#{param['name']}]" %>
14
+ <%= "#{format_scope(param['scope'])}[#{param['name']}]" %>
15
15
  <% else %>
16
16
  <%= param['name'] %>
17
17
  <% end %>
@@ -1,4 +1,4 @@
1
1
  <section class="route">
2
2
  <h4><%= t(:route, scope: :apitome) %></h4>
3
- <pre><%= "#{request['request_method']} #{request['request_path']}" %></pre>
3
+ <pre><%= "#{request["request_method"]} #{request["request_path"]}" %></pre>
4
4
  </section>
@@ -1,4 +1,4 @@
1
1
  <section class="status">
2
2
  <h4><%= t(:status, scope: :apitome) %></h4>
3
- <pre><code class="http"><%= request['response_status'] %></code></pre>
3
+ <pre><code class="http"><%= request["response_status"] %></code></pre>
4
4
  </section>
@@ -6,6 +6,6 @@
6
6
  </section>
7
7
  <% end %>
8
8
  <% if Apitome.configuration.single_page %>
9
- <a href="#top" id="scroll-to-top" class="hidden btn btn-primary">Back to Top</a>
9
+ <a href="#top" id="scroll-to-top" class="hidden btn btn-primary">Back to Top</a>
10
10
  <% end %>
11
- <%= render 'all_examples' if Apitome.configuration.single_page %>
11
+ <%= render "all_examples" if Apitome.configuration.single_page %>
@@ -1,3 +1,3 @@
1
- <h1 class="resource-name"><%= example['resource'] %></h1>
2
- <%= render partial: 'resource_explanation', locals: { explanation: example['resource_explanation'] } if example['resource_explanation'] %>
3
- <%= render partial: 'example', locals: { example: example.merge!(link: params[:path]) } %>
1
+ <h1 class="resource-name"><%= example["resource"] %></h1>
2
+ <%= render partial: "resource_explanation", locals: { explanation: example["resource_explanation"] } if example["resource_explanation"] %>
3
+ <%= render partial: "example", locals: { example: example.merge!(link: params[:path]) } %>
@@ -10,12 +10,12 @@
10
10
  <body class="<%= Apitome.configuration.single_page ? "single-page" : "" %>">
11
11
 
12
12
  <div class="container">
13
- <%= render 'header' %>
13
+ <%= render "header" %>
14
14
  <div class="container docs-container">
15
15
  <div class="row">
16
16
  <div class="col-md-4">
17
17
  <div id="sidebar" class="sidebar hidden-print" role="complementary">
18
- <%= render 'navigation' %>
18
+ <%= render "navigation" %>
19
19
  </div>
20
20
  </div>
21
21
  <div class="col-md-8" role="main">
@@ -4,7 +4,7 @@ module Apitome
4
4
  class Configuration
5
5
  include Singleton
6
6
 
7
- cattr_accessor *[
7
+ cattr_accessor(*[
8
8
  :mount_at,
9
9
  :root,
10
10
  :doc_path,
@@ -21,7 +21,9 @@ module Apitome
21
21
  :http_basic_authentication,
22
22
  :precompile_assets,
23
23
  :simulated_response,
24
- ]
24
+ :formatted_body_error_handler,
25
+ :example_error_handler,
26
+ ])
25
27
 
26
28
  @@mount_at = "/api/docs"
27
29
  @@root = nil # will default to Rails.root if left unset
@@ -39,6 +41,8 @@ module Apitome
39
41
  @@http_basic_authentication = nil
40
42
  @@precompile_assets = true
41
43
  @@simulated_response = true
44
+ @@formatted_body_error_handler = nil
45
+ @@example_error_handler = nil
42
46
 
43
47
  def self.root=(path)
44
48
  @@root = Pathname.new(path.to_s) if path.present?
@@ -51,5 +55,6 @@ module Apitome
51
55
  def self.configure
52
56
  yield @@configuration
53
57
  end
58
+
54
59
  singleton_class.send(:alias_method, :setup, :configure)
55
60
  end
@@ -1,3 +1,3 @@
1
1
  module Apitome
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -46,7 +46,7 @@ Apitome.configure do |config|
46
46
 
47
47
  # You can specify how urls are formatted using a Proc or other callable object. Your proc will be called with a
48
48
  # resource name or link, giving you the opportunity to modify it as necessary for in the documentation url.
49
- config.url_formatter = -> (str) { str.gsub(/\.json$/, '').underscore.gsub(/[^0-9a-z\:]+/i, '-') }
49
+ config.url_formatter = -> (str) { str.gsub(/\.json$/, '').underscore.gsub(/[^[:word:]]/, '-') }
50
50
 
51
51
  # You can setup the docs to be loaded from a remote URL if they are not available in the application environment. This
52
52
  # URL is used as the base location and should be set to where the readme is located. If left nil, local is assumed.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apitome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - jejacks0n
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-13 00:00:00.000000000 Z
11
+ date: 2021-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -52,8 +52,8 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: API documentation renderer for Rails using RSpec API Documentation JSON
56
- output
55
+ description: Present clean and usable API documentation generated from RSpec API Documentation
56
+ JSON output.
57
57
  email:
58
58
  - jejacks0n@gmail.com
59
59
  executables: []
@@ -183,13 +183,13 @@ homepage: https://github.com/jejacks0n/apitome
183
183
  licenses:
184
184
  - MIT
185
185
  metadata: {}
186
- post_install_message:
186
+ post_install_message:
187
187
  rdoc_options: []
188
188
  require_paths:
189
189
  - lib
190
190
  required_ruby_version: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - "~>"
192
+ - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '2.4'
195
195
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -198,8 +198,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
198
  - !ruby/object:Gem::Version
199
199
  version: '0'
200
200
  requirements: []
201
- rubygems_version: 3.0.3
202
- signing_key:
201
+ rubygems_version: 3.2.3
202
+ signing_key:
203
203
  specification_version: 4
204
204
  summary: 'Apitome: /iˈpitəmē/ An API documentation reader RSpec API Documentation'
205
205
  test_files: []