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 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,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ Minitest::OpenAPI::UI::Engine.routes.draw do
4
+ get "/" => Minitest::OpenAPI::UI::PageEndpoint.new, :as => :ui
5
+ end
@@ -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,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Minitest
4
+ module OpenAPI
5
+ module UI
6
+ VERSION = "0.1.0"
7
+ end
8
+ end
9
+ 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: []