oas_rage 0.2.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.
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OasRage
4
+ module Web
5
+ class View
6
+ def self.call(env)
7
+ new.call(env)
8
+ end
9
+
10
+ def call(env)
11
+ @request = Rack::Request.new(env)
12
+ oas = OasRage.build.to_json
13
+
14
+ if @request.path.end_with?('.json')
15
+ [200, { 'Content-Type' => 'application/json' }, [oas]]
16
+ elsif @request.path.end_with?('.js')
17
+ [200, { 'Content-Type' => 'application/javascript' }, [render_js]]
18
+ else
19
+ [200, { 'Content-Type' => 'text/html' }, [render_view]]
20
+ end
21
+ end
22
+
23
+ def render_view
24
+ template_path = File.expand_path('views/index.html.erb', __dir__)
25
+ template = File.read(template_path)
26
+ ERB.new(template).result(binding)
27
+ end
28
+
29
+ def render_js
30
+ template_path = File.expand_path('assets/rapidoc-min.js', __dir__)
31
+ File.read(template_path)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,145 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= OasRage.config.info.title %></title>
5
+ <meta charset="utf-8">
6
+ <!-- Important: rapi-doc uses utf8 characters -->
7
+ <script type="module" src="<%= @request.env['SCRIPT_NAME'] %>/rapidoc-min.js"></script>
8
+ <script>
9
+ function applyTheme() {
10
+ const theme = "<%= OasRage.config.rapidoc_theme %>";
11
+ const docEl = document.querySelector('rapi-doc');
12
+
13
+ // Reset all theme-related attributes
14
+ docEl.removeAttribute('theme');
15
+ docEl.removeAttribute('bg-color');
16
+ docEl.removeAttribute('text-color');
17
+ docEl.removeAttribute('nav-bg-color');
18
+ docEl.removeAttribute('nav-text-color');
19
+ docEl.removeAttribute('nav-hover-bg-color');
20
+ docEl.removeAttribute('nav-hover-text-color');
21
+ docEl.removeAttribute('nav-accent-color');
22
+ docEl.removeAttribute('primary-color');
23
+
24
+ console.log(theme === 'dark')
25
+
26
+ if (theme === 'dark'){
27
+ docEl.setAttribute('theme','dark');
28
+ docEl.setAttribute('bg-color','#333');
29
+ docEl.setAttribute('text-color','#BBB');
30
+ } else if (theme === 'light'){
31
+ docEl.setAttribute('theme','light');
32
+ docEl.setAttribute('bg-color','#FFF');
33
+ docEl.setAttribute('text-color','#444');
34
+ } else if (theme === 'night') {
35
+ docEl.setAttribute('theme','dark');
36
+ docEl.setAttribute('bg-color','#14191f');
37
+ docEl.setAttribute('text-color','#aec2e0');
38
+ } else if (theme === 'mud') {
39
+ docEl.setAttribute('theme','dark');
40
+ docEl.setAttribute('bg-color','#403635');
41
+ docEl.setAttribute('text-color','#c3b8b7');
42
+ } else if (theme === 'cofee') {
43
+ docEl.setAttribute('theme','dark');
44
+ docEl.setAttribute('bg-color','#36312C');
45
+ docEl.setAttribute('text-color','#ceb8a0');
46
+ } else if (theme === 'forest') {
47
+ docEl.setAttribute('theme','dark');
48
+ docEl.setAttribute('bg-color','#384244');
49
+ docEl.setAttribute('text-color','#BDD6DB');
50
+ } else if (theme === 'olive') {
51
+ docEl.setAttribute('theme','dark');
52
+ docEl.setAttribute('bg-color','#2a2f31');
53
+ docEl.setAttribute('text-color','#acc7c8');
54
+ } else if (theme === 'outerspace') {
55
+ docEl.setAttribute('theme','dark');
56
+ docEl.setAttribute('bg-color','#2D3133');
57
+ docEl.setAttribute('text-color','#CAD9E3');
58
+ } else if (theme === 'ebony') {
59
+ docEl.setAttribute('theme','dark');
60
+ docEl.setAttribute('bg-color','#2B303B');
61
+ docEl.setAttribute('text-color','#dee3ec');
62
+ } else if (theme === 'snow') {
63
+ docEl.setAttribute('theme','light');
64
+ docEl.setAttribute('bg-color','#FAFAFA');
65
+ docEl.setAttribute('text-color','#555');
66
+ } else if (theme === 'green') {
67
+ docEl.setAttribute('theme','light');
68
+ docEl.setAttribute('bg-color','#f9fdf7');
69
+ docEl.setAttribute('text-color','#375F1B');
70
+ } else if (theme === 'blue') {
71
+ docEl.setAttribute('theme','light');
72
+ docEl.setAttribute('bg-color','#ecf1f7');
73
+ docEl.setAttribute('text-color','#133863');
74
+ } else if (theme === 'beige') {
75
+ docEl.setAttribute('show-header','true');
76
+ docEl.setAttribute('theme','light');
77
+ docEl.setAttribute('bg-color','#fdf8ed');
78
+ docEl.setAttribute('text-color','#342809');
79
+ } else if (theme === 'graynav') {
80
+ docEl.setAttribute('show-header','false');
81
+ docEl.setAttribute('theme','light');
82
+ docEl.setAttribute('nav-bg-color','#3e4b54');
83
+ docEl.setAttribute('nav-accent-color','#fd6964');
84
+ docEl.setAttribute('primary-color','#ea526f');
85
+ } else if (theme === 'purplenav') {
86
+ docEl.setAttribute('show-header','false');
87
+ docEl.setAttribute('theme','light');
88
+ docEl.setAttribute('nav-accent-color','#ffd8e7');
89
+ docEl.setAttribute('nav-bg-color','#666699');
90
+ docEl.setAttribute('primary-color','#ea526f');
91
+ docEl.setAttribute('bg-color','#fff9fb');
92
+ } else if (theme === 'lightgraynav') {
93
+ docEl.setAttribute('show-header','false');
94
+ docEl.setAttribute('theme','light');
95
+ docEl.setAttribute('nav-bg-color','#fafafa');
96
+ docEl.setAttribute('nav-hover-text-color','#9b0700');
97
+ docEl.setAttribute('nav-hover-bg-color','#ffebea');
98
+ docEl.setAttribute('primary-color','#F63C41');
99
+ docEl.setAttribute('bg-color','#ffffff');
100
+ } else if (theme === 'darkbluenav') {
101
+ docEl.setAttribute('show-header','false');
102
+ docEl.setAttribute('theme','light');
103
+ docEl.setAttribute('bg-color','#f9f9fa');
104
+ docEl.setAttribute('nav-bg-color','#3f4d67');
105
+ docEl.setAttribute('nav-text-color','#a9b7d0');
106
+ docEl.setAttribute('nav-hover-bg-color','#333f54');
107
+ docEl.setAttribute('nav-hover-text-color','#fff');
108
+ docEl.setAttribute('nav-accent-color','#f87070');
109
+ docEl.setAttribute('primary-color','#5c7096');
110
+ } else if (theme === 'rails') {
111
+ docEl.setAttribute('theme','light');
112
+ docEl.setAttribute('bg-color','#FFFFFF');
113
+ docEl.setAttribute('nav-bg-color','#101828');
114
+ docEl.setAttribute('nav-text-color','#fff');
115
+ docEl.setAttribute('nav-hover-bg-color','#261B23');
116
+ docEl.setAttribute('nav-hover-text-color','#fff');
117
+ docEl.setAttribute('nav-accent-color','#D30001');
118
+ docEl.setAttribute('primary-color','#D30001');
119
+ }
120
+ }
121
+
122
+ document.addEventListener('DOMContentLoaded', applyTheme);
123
+ </script>
124
+ </head>
125
+ <body>
126
+ <rapi-doc
127
+ spec-url="<%= @request.env['SCRIPT_NAME'] %>/.json"
128
+ show-header="false"
129
+ font-size="largest"
130
+ show-method-in-nav-bar="as-colored-text"
131
+ nav-item-spacing="relaxed"
132
+ allow-spec-file-download="true"
133
+ schema-style="table"
134
+ sort-tags="true"
135
+ >
136
+ </rapi-doc>
137
+
138
+ <style>
139
+ rapi-doc::part(btn btn-outline) {
140
+ width: 220px;
141
+ min-width: 170px;
142
+ }
143
+ </style>
144
+ </body>
145
+ </html>
data/lib/oas_rage.rb ADDED
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rack'
4
+ require 'oas_core'
5
+
6
+ OasCore.configure_yard!
7
+
8
+ module OasRage
9
+ autoload :VERSION, 'oas_rage/version'
10
+ autoload :Configuration, 'oas_rage/configuration'
11
+ autoload :RouteExtractor, 'oas_rage/route_extractor'
12
+ autoload :OasRouteBuilder, 'oas_rage/oas_route_builder'
13
+ autoload :Utils, 'oas_rage/utils'
14
+
15
+ module Web
16
+ autoload :View, 'oas_rage/web/view'
17
+ end
18
+
19
+ class << self
20
+ def build
21
+ OasCore.config = config
22
+
23
+ host_routes = RouteExtractor.new.host_routes
24
+ oas = OasCore::Builders::SpecificationBuilder.new.with_oas_routes(host_routes).build
25
+
26
+ oas.to_spec
27
+ end
28
+
29
+ def configure
30
+ yield config
31
+ end
32
+
33
+ def config
34
+ @config ||= Configuration.new
35
+ end
36
+ end
37
+ end
data/sig/oas_rage.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module OasRage
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oas_rage
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - a-chacon
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: erb
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '5.0'
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 5.0.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '5.0'
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 5.0.1
32
+ - !ruby/object:Gem::Dependency
33
+ name: oas_core
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: 0.5.1
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: 0.5.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: rack
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.0'
53
+ type: :runtime
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.0'
60
+ description: |
61
+ OasRage is a Rails engine for generating automatic interactive documentation for your Rails APIs.
62
+ It generates an OAS 3.1 document and displays it using RapiDoc.
63
+ email:
64
+ - andres.ch@protonmail.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - ".release-please-config.json"
70
+ - ".release-please-manifest.json"
71
+ - ".rubocop.yml"
72
+ - ".rubocop_todo.yml"
73
+ - ".ruby-version"
74
+ - CHANGELOG.md
75
+ - README.md
76
+ - Rakefile
77
+ - lib/oas_rage.rb
78
+ - lib/oas_rage/configuration.rb
79
+ - lib/oas_rage/oas_route_builder.rb
80
+ - lib/oas_rage/route_extractor.rb
81
+ - lib/oas_rage/utils.rb
82
+ - lib/oas_rage/version.rb
83
+ - lib/oas_rage/web/assets/rapidoc-min.js
84
+ - lib/oas_rage/web/view.rb
85
+ - lib/oas_rage/web/views/index.html.erb
86
+ - sig/oas_rage.rbs
87
+ homepage: https://github.com/a-chacon/oas_rage
88
+ licenses: []
89
+ metadata:
90
+ homepage_uri: https://github.com/a-chacon/oas_rage
91
+ source_code_uri: https://github.com/a-chacon/oas_rage
92
+ changelog_uri: https://github.com/achacon/oas_rage/blob/main/CHANGELOG.md
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 3.1.0
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ requirements: []
107
+ rubygems_version: 3.6.7
108
+ specification_version: 4
109
+ summary: OasRage is a tool for generating automatic interactive documentation for
110
+ your APIs.
111
+ test_files: []