apitome 0.2.1 → 0.3.0

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
- SHA1:
3
- metadata.gz: 7030929a3b7aa8256f66336fd0e7cd8d426a7ef0
4
- data.tar.gz: 5d5d6ccab330d45c953d16044776b0d5d07f008b
2
+ SHA256:
3
+ metadata.gz: 03db784396e463e2e3117c3876221da9501bdf370b2b31d64af0aeb20832f6a7
4
+ data.tar.gz: 2c44ee118c18033c0ff752156b34501bc915afa2f1ff14db11bdd48cb63ad899
5
5
  SHA512:
6
- metadata.gz: 74b44b9646f5cc71cc7587d172d2f8b9dbb7d1439b3543961501f0fd71cf5b560c8c3f833d6538b5a09fd74a808a00851e4568750a4d5703c193dc6c29269c1a
7
- data.tar.gz: 59a62baaa4dce5a8015d3ef441bda1496d1a25daceca37242ed28d63a02099df25a2082f9ed7ef43ba85606f943f2a602b1c9e70bb55c9e666934685cbf3b39b
6
+ metadata.gz: 2ad3ae73aac6bc4fda71089236cc5b1387ace99b0289777249da6cd0c5e44efb3e99d07d2107006a23149b902dc5890835b18fd9034c34759054436a1dd0731e
7
+ data.tar.gz: c565e5d1a99fc2157d7892bdd7bed7d8bf353c6472c234c8ac7468d0fc8eb50dc8511ee96a115b071343ddb61cf93bd71284644b2da72e5a26c872489f63ec83
@@ -1,6 +1,6 @@
1
- Copyright 2013 Jeremy Jackson / ModeSet
1
+ Copyright 2019 Jeremy Jackson / ModeSet
2
2
 
3
- https://github.com/modeset/teaspoon
3
+ https://github.com/jejacks0n/apitome
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -2,24 +2,21 @@ Apitome
2
2
  =======
3
3
 
4
4
  [![Gem Version](https://img.shields.io/gem/v/apitome.svg)](https://rubygems.org/gems/apitome)
5
- [![Dependency Status](https://gemnasium.com/modeset/apitome.svg)](https://gemnasium.com/modeset/apitome)
6
5
  [![Build Status](https://img.shields.io/travis/jejacks0n/apitome.svg)](https://travis-ci.org/jejacks0n/apitome)
7
- [![Code Climate](https://img.shields.io/codeclimate/github/modeset/apitome.svg)](https://codeclimate.com/github/modeset/apitome)
8
- [![Test Coverage](https://codeclimate.com/github/modeset/apitome/badges/coverage.svg)](https://codeclimate.com/github/modeset/apitome)
6
+ [![Maintainability](https://api.codeclimate.com/v1/badges/eb8dd1c22f1da11b6c02/maintainability)](https://codeclimate.com/github/jejacks0n/apitome/maintainability)
7
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/eb8dd1c22f1da11b6c02/test_coverage)](https://codeclimate.com/github/jejacks0n/apitome/test_coverage)
9
8
  [![License](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)
10
9
 
11
- Apitome is a API documentation tool for Rails built on top of the great rspec DSL included in
10
+ Apitome is a API documentation tool for Rails built on top of the great RSpec DSL included in
12
11
  [rspec_api_documentation](https://github.com/zipmark/rspec_api_documentation) (RAD). It's designed to display the
13
- documentation generated by RAD in either a single page (with scrollspy), or on individual pages, and uses Bootstrap3 for
14
- most of the basic styling and [highlight.js](https://github.com/isagalaev/highlight.js) for code highlighting.
12
+ documentation generated by RAD in either a single page, or on individual pages, and uses Bootstrap for most of the basic
13
+ styling and [highlight.js](https://github.com/isagalaev/highlight.js) for code highlighting.
15
14
 
16
15
  You can provide a markdown file that will be displayed as the README page, and by taking advantage of its modular view
17
16
  structure you can override any number of views and partials to customize the output. You can also specify custom css and
18
17
  javascript if you want to do fancier things or change how it looks.
19
18
 
20
-
21
19
  ## Installation
22
-
23
20
  Add it to your Gemfile.
24
21
 
25
22
  ```ruby
@@ -32,6 +29,8 @@ Optionally run the install generator to get the initializer and an initial readm
32
29
  rails generate apitome:install
33
30
  ```
34
31
 
32
+ You can get the assets installed using the generator by providing a `--assets` flag.
33
+
35
34
  Update your `spec_helper.rb` to adjust how RAD outputs its results -- Apitome reads these JSON files to generate the
36
35
  documentation.
37
36
 
@@ -41,117 +40,142 @@ RspecApiDocumentation.configure do |config|
41
40
  end
42
41
  ```
43
42
 
44
-
45
43
  ## Usage
46
-
47
44
  You can view your documentation at the default `api/docs` route.
48
45
 
49
-
50
46
  ## Configuration
51
-
52
- After installation, your app will have an apitome initializer (app/config/initializers/apitome.rb). You will find the following parameters that can be used to customize apitome. Note: Restart rails after changing any of these parameters.
47
+ After installation, your app will have an apitome initializer (app/config/initializers/apitome.rb). You will find the
48
+ following parameters that can be used to customize apitome. Note: Restart rails after changing any of these parameters.
53
49
 
54
50
  <dl>
55
-
56
51
  <dt> mount_at </dt><dd>
57
- This determines where the Apitome routes will be mounted. Changing this to "/api/documentation" for instance would allow you to browse to http://localhost:3000/api/documentation to see your api documentation. Set to nil and mount it yourself if you need to.<br/>
58
-
52
+ This determines where the Apitome routes will be mounted. Changing this to "/api/documentation" for instance would
53
+ allow you to browse to http://localhost:3000/api/documentation to see your api documentation. Set to nil and mount
54
+ it yourself if you need to.
55
+ <br/>
59
56
  <b>default:</b> <code>"/api/docs"</code>
60
57
  </dd>
61
58
 
62
59
  <dt> root </dt><dd>
63
- This defaults to Rails.root if left nil. If you're providing documentation for an engine using a dummy application it can be useful to set this to your engines root.. E.g. <code>Application::Engine.root</code><br/>
64
-
60
+ This defaults to Rails.root if left nil. If you're providing documentation for an engine using a dummy application
61
+ it can be useful to set this to your engines root. (E.g. <code>Application::Engine.root</code>)
62
+ <br/>
65
63
  <b>default:</b> <code>nil</code>
66
64
  </dd>
67
65
 
68
66
  <dt> doc_path </dt><dd>
69
- This is where rspec_api_documentation outputs the JSON files. This is configurable within RAD, and so is configurable here.<br/>
70
-
67
+ This is where rspec_api_documentation outputs the JSON files. This is configurable within RAD, and so is
68
+ configurable here.
69
+ <br/>
71
70
  <b>default:</b> <code>"doc/api"</code>
72
71
  </dd>
73
72
 
74
73
  <dt> parent_controller </dt><dd>
75
- Set a parent controller that Apitome::DocsController inherits from. Useful if you want to use a custom `before_action`.<br/>
76
-
74
+ Set the parent controller that Apitome::DocsController will inherit from. Useful if you want to use a custom
75
+ <code>before_action</code> for instance.
76
+ <br/>
77
77
  <b>default:</b> <code>"ActionController::Base"</code>
78
78
  </dd>
79
79
 
80
80
  <dt> title </dt><dd>
81
- The title of the documentation -- If your project has a name, you'll want to put it here.<br/>
82
-
81
+ The title of the documentation -- If your project has a name, you'll want to put it here.
82
+ <br/>
83
83
  <b>default:</b> <code>"Apitome Documentation"</code>
84
84
  </dd>
85
85
 
86
86
  <dt> layout </dt><dd>
87
- The main layout view for all documentation pages. By default this is pretty basic, but you may want to use your own application layout.<br/>
88
-
87
+ The main layout view for all documentation pages. By default this is pretty basic, but you may want to use your own
88
+ application layout.
89
+ <br/>
89
90
  <b>default:</b> <code>"apitome/application"</code>
90
91
  </dd>
91
92
 
92
93
  <dt> code_theme </dt><dd>
93
- We're using [highlight.js](https://github.com/isagalaev/highlight.js) for code highlighting, and it comes with some great themes. You can check [here for themes](http://softwaremaniacs.org/media/soft/highlight/test.html), and enter the theme as lowercase/underscore.<br/>
94
-
94
+ We're using [highlight.js](https://github.com/isagalaev/highlight.js) for code highlighting, and it comes with some
95
+ great themes. You can check [here for themes](http://softwaremaniacs.org/media/soft/highlight/test.html), and enter
96
+ the theme as lowercase/underscore.
97
+ <br/>
95
98
  <b>default:</b> <code>"default"</code>
96
99
  </dd>
97
100
 
98
101
  <dt> css_override </dt><dd>
99
- This allows you to override the css manually. You typically want to require `apitome/application` within the override, but if you want to override it entirely you can do so.<br/>
100
-
102
+ This allows you to override the css manually. You typically want to require <code>apitome/application</code> within the
103
+ override, but if you want to override it entirely you can do so.
104
+ <br/>
101
105
  <b>default:</b> <code>nil</code>
102
106
  </dd>
103
107
 
104
108
  <dt> js_override </dt><dd>
105
- This allows you to override the javascript manually. You typically want to require `apitome/application` within the override, but if you want to override it entirely you can do so.<br/>
106
-
109
+ This allows you to override the javascript manually. You typically want to require <code>apitome/application</code> within the
110
+ override, but if you want to override it entirely you can do so.
111
+ <br/>
107
112
  <b>default:</b> <code>nil</code>
108
113
  </dd>
109
114
 
110
115
  <dt> readme </dt><dd>
111
- You can provide a "README" style markdown file for the documentation, which is a useful place to include general information. This path is relative to your doc_path configuration.<br/>
112
-
116
+ You can provide a "README" style markdown file for the documentation, which is a useful place to include general
117
+ information. This path is relative to your doc_path configuration.
118
+ <br/>
113
119
  <b>default:</b> <code>"../api.md"</code>
114
120
  </dd>
115
121
 
116
122
  <dt> single_page </dt><dd>
117
- Apitome can render the documentation into a single page that uses scrollspy, or it can render the documentation on individual pages on demand. This allows you to specify which one you want, as a single page may impact performance.<br/>
118
-
123
+ Apitome can render the documentation into a single page that uses scrollspy, or it can render the documentation on
124
+ individual pages on demand. This allows you to specify which one you want, as a single page may impact performance.
125
+ <br/>
119
126
  <b>default:</b> <code>true</code>
127
+ </dd>
120
128
 
121
129
  <dt> url_formatter </dt><dd>
122
- You can specify how urls are formatted using a Proc or other callable object. Your proc will be called with a resource name or link, giving you the opportunity to modify it as necessary for in the documentation url.<br/>
123
-
130
+ You can specify how urls are formatted using a Proc or other callable object. Your proc will be called with a
131
+ resource name or link, giving you the opportunity to modify it as necessary for in the documentation url.
132
+ <br/>
124
133
  <b>default:</b> <code>-> (str) { str.gsub(/\.json$/, '').underscore.gsub(/[^0-9a-z]+/i, '-') }</code>
125
134
  </dd>
126
135
 
136
+ <dt> remote_url </dt><dd>
137
+ You can setup the docs to be loaded from a remote URL if they are not available in the application environment. This
138
+ URL is used as the base location and should be set to where the readme is located. If left nil, local is assumed.
139
+ <br/>
140
+ <b>default:</b> <code>nil</code>
141
+ </dd>
142
+
143
+ <dt> http_basic_authentication </dt><dd>
144
+ If using remote urls you can fetch the remote docs using HTTP Basic Authentication by configuring this to be an
145
+ array of the user and password. (E.g. <code>['user', 'password']</code>)
146
+ <br/>
147
+ <b>default:</b> <code>nil</code>
148
+ </dd>
149
+
127
150
  <dt> precompile_assets </dt><dd>
128
- By default all assets that ship with this library are precompiled by the asset pipeline. If you would prefer to control this yourself, you can disable it by changing this to false.<br/>
151
+ By default all assets that ship with this library are precompiled by the asset pipeline. If you would prefer to
152
+ control this yourself, you can disable it by changing this to false.
153
+ <br/>
154
+ <b>default:</b> <code>true</code>
155
+ </dd>
129
156
 
157
+ <dt> simulated_response </dt><dd>
158
+ If <code>simulated_response</code> is disabled you can hide the "Simulated Response" links.
159
+ <br>
130
160
  <b>default:</b> <code>true</code>
131
161
  </dd>
132
- =======
133
162
 
134
163
  When you install Apitime an initializer file (app/config/initializers/apitome.rb) is generated that contains good
135
164
  documentation for each configuration directive. Otherwise you can get a refresher by checking the
136
165
  [Apitome Configuration](https://github.com/modeset/apitome/wiki/Apitome-Configuration) article.
137
166
 
138
167
  ## Customization
139
-
140
- You can put custom views and partials in your own `views/apitome/docs` -- check the repo here for
141
- [examples](https://github.com/modeset/apitome/tree/master/app/views/apitome/docs). You can put any partial in your own
142
- path and they will be overridden.
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.
143
171
 
144
172
  Additional customization can come in the form of providing custom css and javascript. You can do this by creating the
145
173
  files you want (that often times require the default assets in the gem), and then configure Apitome to use those instead
146
174
  of the defaults.
147
175
 
148
-
149
176
  ## License
150
-
151
177
  Licensed under the [MIT License](http://creativecommons.org/licenses/MIT/)
152
178
 
153
- Copyright 2013 [Mode Set](https://github.com/modeset)
154
-
179
+ Copyright 2016 [jejacks0n](https://github.com/jejacks0n)
155
180
 
156
181
  ## Make Code Not War
157
- ![crest](https://secure.gravatar.com/avatar/aa8ea677b07f626479fd280049b0e19f?s=75)
@@ -1,4 +1,4 @@
1
- require 'open-uri'
1
+ require "open-uri"
2
2
 
3
3
  class Apitome::DocsController < Object.const_get(Apitome.configuration.parent_controller)
4
4
  layout Apitome.configuration.layout
@@ -24,7 +24,7 @@ class Apitome::DocsController < Object.const_get(Apitome.configuration.parent_co
24
24
  def simulate
25
25
  request = example["requests"][0]
26
26
  if request
27
- request["response_headers"].delete('Content-Length')
27
+ request["response_headers"].delete("Content-Length")
28
28
  request["response_headers"].each { |k, v| headers[k] = v }
29
29
  render body: request["response_body"], status: request["response_status"]
30
30
  else
@@ -34,72 +34,75 @@ class Apitome::DocsController < Object.const_get(Apitome.configuration.parent_co
34
34
 
35
35
  private
36
36
 
37
- def file_for(file, readme: false)
38
- if Apitome.configuration.remote_docs
39
- file = if readme
40
- "#{file}"
37
+ def file_for(file, readme: false)
38
+ if Apitome.configuration.remote_url
39
+ file = readme ? file : "#{Apitome.configuration.doc_path}/#{file}"
40
+ file = CGI.escape("#{Apitome.configuration.remote_url}/#{file}")
41
41
  else
42
- "#{Apitome.configuration.doc_path}/#{file}"
42
+ file = Apitome.configuration.root.join(Apitome.configuration.doc_path, file)
43
+ raise Apitome::FileNotFoundError.new("Unable to find #{file}") unless File.exist?(file)
43
44
  end
44
45
 
45
- file = "#{Apitome.configuration.remote_url}/#{file}"
46
- else
47
- file = Apitome.configuration.root.join(Apitome.configuration.doc_path, file)
48
- raise Apitome::FileNotFoundError.new("Unable to find #{file}") unless File.exists?(file)
46
+ open(file, file_opts).read
49
47
  end
50
48
 
51
- open(file).read
52
- end
49
+ def resources
50
+ @resources ||= JSON.parse(file_for("index.json"))["resources"]
51
+ end
53
52
 
54
- def resources
55
- @resources ||= JSON.parse(file_for("index.json"))["resources"]
56
- end
53
+ def example
54
+ @example ||= JSON.parse(file_for("#{params[:path]}.json"))
55
+ end
57
56
 
58
- def example
59
- @example ||= JSON.parse(file_for("#{params[:path]}.json"))
60
- end
57
+ def set_example(resource)
58
+ @example = JSON.parse(file_for("#{resource}.json"))
59
+ end
61
60
 
62
- def set_example(resource)
63
- @example = JSON.parse(file_for("#{resource}.json"))
64
- end
61
+ def file_opts
62
+ if Apitome.configuration.remote_url && Apitome.configuration.http_basic_authentication
63
+ { http_basic_authentication: Apitome.configuration.http_basic_authentication }
64
+ else
65
+ {}
66
+ end
67
+ end
65
68
 
66
- def formatted_readme
67
- return unless Apitome.configuration.readme
68
- rendered_markdown(file_for(Apitome.configuration.readme, readme: true))
69
- end
69
+ def formatted_readme
70
+ return unless Apitome.configuration.readme
71
+ rendered_markdown(file_for(Apitome.configuration.readme, readme: true))
72
+ end
70
73
 
71
- def rendered_markdown(string)
72
- if defined?(GitHub::Markdown)
73
- GitHub::Markdown.render(string)
74
- else
75
- Kramdown::Document.new(string).to_html
74
+ def rendered_markdown(string)
75
+ if defined?(GitHub::Markdown)
76
+ GitHub::Markdown.render(string)
77
+ else
78
+ Kramdown::Document.new(string).to_html
79
+ end
76
80
  end
77
- end
78
81
 
79
- def formatted_body(body, type)
80
- if type =~ /json/ && body.present?
81
- JSON.pretty_generate(JSON.parse(body))
82
- else
83
- body
82
+ def formatted_body(body, type)
83
+ if type =~ /json/ && body.present?
84
+ JSON.pretty_generate(JSON.parse(body))
85
+ else
86
+ body
87
+ end
88
+ rescue JSON::ParserError
89
+ return body if body == " "
90
+ raise JSON::ParserError
84
91
  end
85
- rescue JSON::ParserError
86
- return body if body == " "
87
- raise JSON::ParserError
88
- end
89
92
 
90
- def param_headers(params)
91
- titles = %w{Name Description}
92
- titles += param_extras(params)
93
- titles
94
- end
93
+ def param_headers(params)
94
+ titles = %w{Name Description}
95
+ titles += param_extras(params)
96
+ titles
97
+ end
95
98
 
96
- def param_extras(params)
97
- params.map do |param|
98
- param.reject { |k, _v| %w{name description required scope}.include?(k) }.keys
99
- end.flatten.uniq
100
- end
99
+ def param_extras(params)
100
+ params.map do |param|
101
+ param.reject { |k, _v| %w{name description required scope}.include?(k) }.keys
102
+ end.flatten.uniq
103
+ end
101
104
 
102
- def id_for(str)
103
- Apitome.configuration.url_formatter.call(str)
104
- end
105
+ def id_for(str)
106
+ Apitome.configuration.url_formatter.call(str)
107
+ end
105
108
  end
@@ -1,20 +1,16 @@
1
1
  module Apitome::DocsHelper
2
- def format_scope(scope)
3
- Array(scope).each_with_index.map do |scope, index|
4
- if index == 0
5
- scope
6
- else
7
- "[#{scope}]"
8
- end
2
+ def format_scope(scopes)
3
+ Array(scopes).each_with_index.map do |scope, index|
4
+ index == 0 ? scope : "[#{scope}]"
9
5
  end.join
10
6
  end
11
7
 
12
8
  def resource_link(resource)
13
- "#{Apitome.configuration.mount_at}/#{resource['examples'].first['link'].gsub(/\.json$/, '')}"
9
+ "#{Apitome.configuration.mount_at}/#{CGI.escape(resource['examples'].first['link'].gsub(/\.json$/, ''))}"
14
10
  end
15
11
 
16
12
  def example_link(example)
17
- "#{Apitome.configuration.mount_at}/#{example['link'].gsub(/\.json$/, '')}"
13
+ "#{Apitome.configuration.mount_at}/#{CGI.escape(example['link'].gsub(/\.json$/, ''))}"
18
14
  end
19
15
 
20
16
  def link_active?(link)
@@ -5,9 +5,9 @@
5
5
  <%= render partial: 'resource_explanation', locals: { explanation: resource['explanation'] } if resource['explanation'] %>
6
6
 
7
7
  <% resource['examples'].each do |example| %>
8
- <% link = example['link'].gsub('.json', '') %>
8
+ <% link = example['link'].gsub(/.json$/, '') %>
9
9
  <article id="<%= id_for(link) %>">
10
- <%= render partial: 'example', locals: { example: set_example(link), link: link } %>
10
+ <%= render partial: 'example', locals: { example: set_example(link).merge!(link: link) } %>
11
11
  </article>
12
12
  <% end %>
13
13
  </section>
@@ -17,7 +17,9 @@
17
17
 
18
18
  <h3><%= t(:response, scope: :apitome) %></h3>
19
19
  <div class="response">
20
- <%= link_to('Simulated Response', simulated_path(link)) unless link.empty? %>
20
+ <%- if Apitome.configuration.simulated_response %>
21
+ <%= link_to('Simulated Response', simulated_path(example[:link])) if example[:link].present? %>
22
+ <%- end %>
21
23
  <%= render partial: 'apitome/docs/response_fields', locals: {params: example['response_fields']} if example['response_fields'].size > 0 %>
22
24
  <%= render partial: 'apitome/docs/status', locals: {request: request, index: index} %>
23
25
  <%= render partial: 'apitome/docs/headers', locals: {request: request, index: index, headers: request['response_headers']} %>
@@ -4,7 +4,7 @@
4
4
  <table class="table table-bordered">
5
5
  <tr>
6
6
  <% param_headers(params).each do |title| %>
7
- <th><%= title %></th>
7
+ <th><%= title.titlecase %></th>
8
8
  <% end %>
9
9
  </tr>
10
10
  <% params.each do |param| %>
@@ -1,3 +1,3 @@
1
1
  <h1 class="resource-name"><%= example['resource'] %></h1>
2
2
  <%= render partial: 'resource_explanation', locals: { explanation: example['resource_explanation'] } if example['resource_explanation'] %>
3
- <%= render partial: 'example', locals: { example: example, link: example['link'].to_s.gsub('.json', '') } %>
3
+ <%= render partial: 'example', locals: { example: example.merge!(link: params[:path]) } %>
@@ -3,11 +3,11 @@
3
3
  <head>
4
4
  <title><%= Apitome.configuration.title %></title>
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <%= stylesheet_link_tag Apitome.configuration.code_theme_url, media: 'all' %>
7
- <%= stylesheet_link_tag Apitome.configuration.css_override || 'apitome/application', media: 'all' %>
8
- <%= javascript_include_tag Apitome.configuration.js_override || 'apitome/application' %>
6
+ <%= stylesheet_link_tag Apitome.configuration.css_override || "apitome/application", media: "all" %>
7
+ <%= stylesheet_link_tag "apitome/highlight_themes/#{Apitome.configuration.code_theme}", media: "all" %>
8
+ <%= javascript_include_tag Apitome.configuration.js_override || "apitome/application" %>
9
9
  </head>
10
- <body class="<%= Apitome.configuration.single_page ? 'single-page' : '' %>">
10
+ <body class="<%= Apitome.configuration.single_page ? "single-page" : "" %>">
11
11
 
12
12
  <div class="container">
13
13
  <%= render 'header' %>
@@ -1,5 +1,9 @@
1
+ require "singleton"
2
+
1
3
  module Apitome
2
4
  class Configuration
5
+ include Singleton
6
+
3
7
  cattr_accessor *[
4
8
  :mount_at,
5
9
  :root,
@@ -12,41 +16,40 @@ module Apitome
12
16
  :js_override,
13
17
  :readme,
14
18
  :single_page,
15
- :remote_docs,
16
- :remote_url,
17
19
  :url_formatter,
18
- :precompile_assets
20
+ :remote_url,
21
+ :http_basic_authentication,
22
+ :precompile_assets,
23
+ :simulated_response,
19
24
  ]
20
25
 
21
- @@mount_at = "/api/docs"
22
- @@root = nil # will default to Rails.root if left unset
23
- @@doc_path = "doc/api"
26
+ @@mount_at = "/api/docs"
27
+ @@root = nil # will default to Rails.root if left unset
28
+ @@doc_path = "doc/api"
24
29
  @@parent_controller = "ActionController::Base"
25
- @@title = "Apitome Documentation"
26
- @@layout = "apitome/application"
27
- @@code_theme = "default"
28
- @@css_override = nil
29
- @@js_override = nil
30
- @@readme = "../api.md"
31
- @@single_page = true
32
- @@remote_docs = false
33
- @@remote_url = nil
34
- @@url_formatter = -> (str) { str.gsub(/\.json$/, '').underscore.gsub(/[^0-9a-z]+/i, '-') }
30
+ @@title = "Apitome Documentation"
31
+ @@layout = "apitome/application"
32
+ @@code_theme = "default"
33
+ @@css_override = nil
34
+ @@js_override = nil
35
+ @@readme = "../api.md"
36
+ @@single_page = true
37
+ @@url_formatter = -> (str) { str.gsub(/\.json$/, "").underscore.gsub(/[^0-9a-z]+/i, "-") }
38
+ @@remote_url = nil
39
+ @@http_basic_authentication = nil
35
40
  @@precompile_assets = true
41
+ @@simulated_response = true
36
42
 
37
43
  def self.root=(path)
38
44
  @@root = Pathname.new(path.to_s) if path.present?
39
45
  end
40
-
41
- def self.code_theme_url
42
- "apitome/highlight_themes/#{@@code_theme}"
43
- end
44
46
  end
45
47
 
46
48
  mattr_accessor :configuration
47
49
  @@configuration = Configuration
48
50
 
49
- def self.setup
51
+ def self.configure
50
52
  yield @@configuration
51
53
  end
54
+ singleton_class.send(:alias_method, :setup, :configure)
52
55
  end
@@ -1,26 +1,26 @@
1
1
  module Apitome
2
2
  class Engine < ::Rails::Engine
3
3
  isolate_namespace Apitome
4
+ apitome = Apitome.configuration
4
5
 
5
- if Apitome.configuration.precompile_assets && config.respond_to?(:assets)
6
- config.assets.precompile += %w{apitome/*.css apitome/*.js}
7
- else
8
- config.assets.precompile += %w{} # Have to set this to empty for it to work
6
+ routes do
7
+ root to: "docs#index"
8
+ get "/simulate/*path", to: "docs#simulate", as: :simulated if apitome.simulated_response
9
+ get "/*path", to: "docs#show" unless Apitome.configuration.single_page
9
10
  end
10
11
 
11
- config.assets.paths << root.join('assets', 'stylesheets').to_s
12
- config.assets.paths << root.join('assets', 'javascripts').to_s
13
-
14
12
  initializer :assets, group: :all do |app|
15
- # default the root if it's not set
16
- Apitome.configuration.root ||= app.root
13
+ apitome.root ||= app.root
14
+
15
+ config.assets.precompile += ["apitome/*.css", "apitome/*.js"]
16
+ config.assets.paths << root.join("assets", "stylesheets").to_s
17
+ config.assets.paths << root.join("assets", "javascripts").to_s
17
18
  end
18
19
 
19
20
  config.after_initialize do |app|
20
- # prepend routes so a catchall doesn't get in the way
21
- if Apitome.configuration.mount_at.present?
21
+ if apitome.mount_at.present?
22
22
  app.routes.prepend do
23
- mount Apitome::Engine => Apitome.configuration.mount_at
23
+ mount Apitome::Engine => apitome.mount_at
24
24
  end
25
25
  end
26
26
  end
@@ -1,3 +1,3 @@
1
1
  module Apitome
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -1,4 +1,4 @@
1
1
  +============================================================================+
2
2
  Congratulations! Apitome was successfully installed.
3
3
 
4
- Documentation and more can be found at: https://github.com/modeset/apitome
4
+ Documentation and more can be found at: https://github.com/jejacks0n/apitome
@@ -5,11 +5,8 @@ module Apitome
5
5
 
6
6
  desc "Installs the Apitome initializer and markdown file into your application."
7
7
 
8
- class_option :assets,
9
- type: :boolean,
10
- aliases: "-a",
11
- default: false,
12
- desc: "Install the javascript and stylesheet assets to /public"
8
+ class_option :assets, type: :boolean, default: false,
9
+ aliases: "-a", desc: "Install the javascript and stylesheet assets to /public"
13
10
 
14
11
  def copy_initializers
15
12
  copy_file "templates/initializer.rb", "config/initializers/apitome.rb"
@@ -18,11 +15,13 @@ module Apitome
18
15
 
19
16
  def copy_assets
20
17
  return unless options[:assets]
21
- copy_file "../../../../app/assets/javascripts/apitome/bundle.js", "public/javascripts/apitome/application.js"
22
- copy_file "../../../../app/assets/stylesheets/apitome/bundle.css", "public/stylesheets/apitome/application.css"
18
+ @asset_root = "../../../../app/assets"
19
+
20
+ copy_file "#{@asset_root}/javascripts/apitome/bundle.js", "public/javascripts/apitome/application.js"
21
+ copy_file "#{@asset_root}/stylesheets/apitome/bundle.css", "public/stylesheets/apitome/application.css"
23
22
  end
24
23
 
25
- def display_readme
24
+ def display_post_install
26
25
  readme "POST_INSTALL" if behavior == :invoke
27
26
  end
28
27
  end
@@ -1,19 +1,19 @@
1
- Apitome.setup do |config|
2
- # This determines where the Apitome routes will be mounted. Changing this to '/api/documentation' for instance would
1
+ Apitome.configure do |config|
2
+ # This determines where the Apitome routes will be mounted. Changing this to "/api/documentation" for instance would
3
3
  # allow you to browse to http://localhost:3000/api/documentation to see your api documentation. Set to nil and mount
4
4
  # it yourself if you need to.
5
5
  config.mount_at = "/api/docs"
6
6
 
7
7
  # This defaults to Rails.root if left nil. If you're providing documentation for an engine using a dummy application
8
- # it can be useful to set this to your engines root.. E.g. Application::Engine.root
8
+ # it can be useful to set this to your engines root.. E.g. `Application::Engine.root`
9
9
  config.root = nil
10
10
 
11
11
  # This is where rspec_api_documentation outputs the JSON files. This is configurable within RAD, and so is
12
12
  # configurable here.
13
13
  config.doc_path = "doc/api"
14
14
 
15
- # Set a parent controller that Apitome::DocsController inherits from. Useful if you want to use a custom
16
- # `before_action`.
15
+ # Set the parent controller that Apitome::DocsController will inherit from. Useful if you want to use a custom
16
+ # `before_action` for instance.
17
17
  config.parent_controller = "ActionController::Base"
18
18
 
19
19
  # The title of the documentation -- If your project has a name, you'll want to put it here.
@@ -24,8 +24,8 @@ Apitome.setup do |config|
24
24
  config.layout = "apitome/application"
25
25
 
26
26
  # We're using highlight.js (https://github.com/isagalaev/highlight.js) for code highlighting, and it comes with some
27
- # great themes. You can check http://softwaremaniacs.org/media/soft/highlight/test.html for themes, and enter the
28
- # theme as lowercase/underscore.
27
+ # great themes. You can check [here for themes](http://softwaremaniacs.org/media/soft/highlight/test.html), and enter
28
+ # the theme as lowercase/underscore.
29
29
  config.code_theme = "default"
30
30
 
31
31
  # This allows you to override the css manually. You typically want to require `apitome/application` within the
@@ -36,7 +36,7 @@ Apitome.setup do |config|
36
36
  # override, but if you want to override it entirely you can do so.
37
37
  config.js_override = nil
38
38
 
39
- # You can provide a 'README' style markdown file for the documentation, which is a useful place to include general
39
+ # You can provide a "README" style markdown file for the documentation, which is a useful place to include general
40
40
  # information. This path is relative to your doc_path configuration.
41
41
  config.readme = "../api.md"
42
42
 
@@ -44,22 +44,23 @@ Apitome.setup do |config|
44
44
  # individual pages on demand. This allows you to specify which one you want, as a single page may impact performance.
45
45
  config.single_page = true
46
46
 
47
- # You can specify how urls are formatted using a Proc or other callable object.
48
- # Your proc will be called with a resource name or link, giving you the opportunity to modify it as necessary for in the documentation url.
47
+ # You can specify how urls are formatted using a Proc or other callable object. Your proc will be called with a
48
+ # resource name or link, giving you the opportunity to modify it as necessary for in the documentation url.
49
49
  config.url_formatter = -> (str) { str.gsub(/\.json$/, '').underscore.gsub(/[^0-9a-z\:]+/i, '-') }
50
50
 
51
- # You can setup the docs to be loaded from a remote URL if they are
52
- # not available in the application environment. This defaults to
53
- # false.
54
- config.remote_docs = false
55
-
56
- # If the remote_docs is set to true, this URL is used as the base for
57
- # the doc location. This should be the root of the doc location, where
58
- # the readme is located. It uses the doc_path setting to build the
59
- # URLs for the API documentation. This defaults to nil.
51
+ # You can setup the docs to be loaded from a remote URL if they are not available in the application environment. This
52
+ # URL is used as the base location and should be set to where the readme is located. If left nil, local is assumed.
60
53
  config.remote_url = nil
61
54
 
55
+ # If the remote_docs is set to true, and the remote URL is protected by
56
+ # HTTP Basic Authentication you can set the user and password here as an array.
57
+ # Usage: `http_basic_authentication = ['user', 'password']`.
58
+ # This defaults to nil.
59
+ config.http_basic_authentication = nil
60
+
62
61
  # If you would like to precompile your own assets, you can disable auto-compilation.
63
- # This defaults to true
64
62
  config.precompile_assets = true
63
+
64
+ # If you do not want "Simulated Response" links to appear you can disable them.
65
+ config.simulated_response = true
65
66
  end
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.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jejacks0n
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-30 00:00:00.000000000 Z
11
+ date: 2019-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -25,13 +25,13 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec_api_documentation
28
+ name: kramdown
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
- type: :development
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
@@ -39,13 +39,13 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: kramdown
42
+ name: rspec_api_documentation
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
- type: :runtime
48
+ type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
@@ -55,7 +55,7 @@ dependencies:
55
55
  description: API documentation renderer for Rails using RSpec API Documentation JSON
56
56
  output
57
57
  email:
58
- - info@modeset.com
58
+ - jejacks0n@gmail.com
59
59
  executables: []
60
60
  extensions: []
61
61
  extra_rdoc_files: []
@@ -88,7 +88,6 @@ files:
88
88
  - app/views/layouts/apitome/application.html.erb
89
89
  - config/locales/en.yml
90
90
  - config/locales/es.yml
91
- - config/routes.rb
92
91
  - lib/apitome.rb
93
92
  - lib/apitome/configuration.rb
94
93
  - lib/apitome/engine.rb
@@ -180,7 +179,7 @@ files:
180
179
  - vendor/assets/stylesheets/apitome/highlight_themes/xcode.css
181
180
  - vendor/assets/stylesheets/apitome/highlight_themes/xt256.css
182
181
  - vendor/assets/stylesheets/apitome/highlight_themes/zenburn.css
183
- homepage: https://github.com/modeset/apitome
182
+ homepage: https://github.com/jejacks0n/apitome
184
183
  licenses:
185
184
  - MIT
186
185
  metadata: {}
@@ -192,15 +191,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
192
191
  requirements:
193
192
  - - "~>"
194
193
  - !ruby/object:Gem::Version
195
- version: '2.3'
194
+ version: '2.4'
196
195
  required_rubygems_version: !ruby/object:Gem::Requirement
197
196
  requirements:
198
197
  - - ">="
199
198
  - !ruby/object:Gem::Version
200
199
  version: '0'
201
200
  requirements: []
202
- rubyforge_project:
203
- rubygems_version: 2.6.12
201
+ rubygems_version: 3.0.3
204
202
  signing_key:
205
203
  specification_version: 4
206
204
  summary: 'Apitome: /iˈpitəmē/ An API documentation reader RSpec API Documentation'
@@ -1,5 +0,0 @@
1
- Apitome::Engine.routes.draw do
2
- root to: "docs#index"
3
- get "/simulate/*path", to: "docs#simulate", as: :simulated
4
- get "/*path", to: "docs#show" unless Apitome.configuration.single_page
5
- end