rc-minitest-openapi-ui 0.1.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 +7 -0
- data/README.md +22 -0
- data/config/routes.rb +5 -0
- data/lib/minitest/openapi/ui/configuration.rb +25 -0
- data/lib/minitest/openapi/ui/engine.rb +16 -0
- data/lib/minitest/openapi/ui/page_endpoint.rb +49 -0
- data/lib/minitest/openapi/ui/version.rb +9 -0
- data/lib/minitest/openapi/ui.rb +23 -0
- metadata +63 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 24028baf7b6d71e8c5e682a771b8cd6c7e94b18c60e7560410cef1b1256b40d8
|
|
4
|
+
data.tar.gz: 8f169a37ef45b9716b766ef793deb7845403b2a1ee727196a8e9394d0d8c6429
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: dc98e1fc8384fcd33e59fe6af30e901b10a4068a5f0cae5b16ee19fb1c890358b34bdd986c475136399367e980c6fe1d7aed5c8c8db03195baadeb13b3be697a
|
|
7
|
+
data.tar.gz: c51d689ac3bb9e8927ac16233782ff7846e4cc37781575570e8baa4b0f90915e003e7a7ebd3ac485dbe9b9d8577372b7fbc8bf17e26dba4ccc7240d3f4cab5eb
|
data/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# rc-minitest-openapi-ui
|
|
2
|
+
|
|
3
|
+
A mountable Rails engine that renders Swagger UI for an OpenAPI document,
|
|
4
|
+
pairing with [`rc-minitest-openapi`](https://github.com/RailsComposer/minitest-openapi)
|
|
5
|
+
and `rc-minitest-openapi-api`.
|
|
6
|
+
|
|
7
|
+
```ruby
|
|
8
|
+
# config/routes.rb
|
|
9
|
+
mount Minitest::OpenAPI::UI::Engine => "/api-docs/ui"
|
|
10
|
+
|
|
11
|
+
# config/initializers/minitest_openapi.rb
|
|
12
|
+
Minitest::OpenAPI::UI.configure { |c| c.openapi_url = "/api-docs" }
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Swagger UI assets are loaded from the jsDelivr CDN; no assets are vendored.
|
|
16
|
+
|
|
17
|
+
See the [repository README](https://github.com/RailsComposer/minitest-openapi)
|
|
18
|
+
for full documentation.
|
|
19
|
+
|
|
20
|
+
## License
|
|
21
|
+
|
|
22
|
+
MIT
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Minitest
|
|
4
|
+
module OpenAPI
|
|
5
|
+
module UI
|
|
6
|
+
class Configuration
|
|
7
|
+
# URL the Swagger UI page loads the OpenAPI document from. Point this
|
|
8
|
+
# at wherever minitest-openapi-api is mounted.
|
|
9
|
+
attr_accessor :openapi_url
|
|
10
|
+
|
|
11
|
+
# Page <title>.
|
|
12
|
+
attr_accessor :page_title
|
|
13
|
+
|
|
14
|
+
# swagger-ui-dist version loaded from the jsDelivr CDN.
|
|
15
|
+
attr_accessor :swagger_ui_version
|
|
16
|
+
|
|
17
|
+
def initialize
|
|
18
|
+
@openapi_url = "/api-docs"
|
|
19
|
+
@page_title = "API documentation"
|
|
20
|
+
@swagger_ui_version = "5.17.14"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails/engine"
|
|
4
|
+
|
|
5
|
+
module Minitest
|
|
6
|
+
module OpenAPI
|
|
7
|
+
module UI
|
|
8
|
+
# Mountable engine. In the host app's routes:
|
|
9
|
+
#
|
|
10
|
+
# mount Minitest::OpenAPI::UI::Engine => "/api-docs/ui"
|
|
11
|
+
class Engine < ::Rails::Engine
|
|
12
|
+
isolate_namespace Minitest::OpenAPI::UI
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "erb"
|
|
4
|
+
|
|
5
|
+
module Minitest
|
|
6
|
+
module OpenAPI
|
|
7
|
+
module UI
|
|
8
|
+
# Rack endpoint rendering a Swagger UI page. swagger-ui-dist is loaded
|
|
9
|
+
# from the jsDelivr CDN so the gem ships no vendored assets.
|
|
10
|
+
class PageEndpoint
|
|
11
|
+
HTML_HEADERS = {"content-type" => "text/html; charset=utf-8"}.freeze
|
|
12
|
+
|
|
13
|
+
def call(_env)
|
|
14
|
+
[200, HTML_HEADERS.dup, [render]]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def render
|
|
20
|
+
config = Minitest::OpenAPI::UI.configuration
|
|
21
|
+
base = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@#{config.swagger_ui_version}"
|
|
22
|
+
|
|
23
|
+
<<~HTML
|
|
24
|
+
<!DOCTYPE html>
|
|
25
|
+
<html lang="en">
|
|
26
|
+
<head>
|
|
27
|
+
<meta charset="UTF-8">
|
|
28
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
29
|
+
<title>#{ERB::Util.html_escape(config.page_title)}</title>
|
|
30
|
+
<link rel="stylesheet" href="#{base}/swagger-ui.css">
|
|
31
|
+
</head>
|
|
32
|
+
<body>
|
|
33
|
+
<div id="swagger-ui"></div>
|
|
34
|
+
<script src="#{base}/swagger-ui-bundle.js"></script>
|
|
35
|
+
<script>
|
|
36
|
+
window.ui = SwaggerUIBundle({
|
|
37
|
+
url: #{config.openapi_url.to_json},
|
|
38
|
+
dom_id: "#swagger-ui",
|
|
39
|
+
deepLinking: true
|
|
40
|
+
});
|
|
41
|
+
</script>
|
|
42
|
+
</body>
|
|
43
|
+
</html>
|
|
44
|
+
HTML
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "ui/version"
|
|
4
|
+
require_relative "ui/configuration"
|
|
5
|
+
require_relative "ui/page_endpoint"
|
|
6
|
+
require_relative "ui/engine" if defined?(::Rails::Engine)
|
|
7
|
+
|
|
8
|
+
module Minitest
|
|
9
|
+
module OpenAPI
|
|
10
|
+
# Renders Swagger UI for an OpenAPI document.
|
|
11
|
+
module UI
|
|
12
|
+
class << self
|
|
13
|
+
def configuration
|
|
14
|
+
@configuration ||= Configuration.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def configure
|
|
18
|
+
yield configuration
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rc-minitest-openapi-ui
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- RailsComposer
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: railties
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '7.1'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '7.1'
|
|
26
|
+
description: A mountable Rails engine that renders Swagger UI for an OpenAPI document,
|
|
27
|
+
intended to pair with rc-minitest-openapi and rc-minitest-openapi-api.
|
|
28
|
+
executables: []
|
|
29
|
+
extensions: []
|
|
30
|
+
extra_rdoc_files: []
|
|
31
|
+
files:
|
|
32
|
+
- README.md
|
|
33
|
+
- config/routes.rb
|
|
34
|
+
- lib/minitest/openapi/ui.rb
|
|
35
|
+
- lib/minitest/openapi/ui/configuration.rb
|
|
36
|
+
- lib/minitest/openapi/ui/engine.rb
|
|
37
|
+
- lib/minitest/openapi/ui/page_endpoint.rb
|
|
38
|
+
- lib/minitest/openapi/ui/version.rb
|
|
39
|
+
homepage: https://github.com/RailsComposer/minitest-openapi
|
|
40
|
+
licenses:
|
|
41
|
+
- MIT
|
|
42
|
+
metadata:
|
|
43
|
+
homepage_uri: https://github.com/RailsComposer/minitest-openapi
|
|
44
|
+
source_code_uri: https://github.com/RailsComposer/minitest-openapi
|
|
45
|
+
rubygems_mfa_required: 'true'
|
|
46
|
+
rdoc_options: []
|
|
47
|
+
require_paths:
|
|
48
|
+
- lib
|
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '3.2'
|
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
version: '0'
|
|
59
|
+
requirements: []
|
|
60
|
+
rubygems_version: 3.6.9
|
|
61
|
+
specification_version: 4
|
|
62
|
+
summary: Swagger UI for the OpenAPI document generated by rc-minitest-openapi.
|
|
63
|
+
test_files: []
|