rodauth-openapi 0.1.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ce74f8234f280f924c119e914ee31e88ee7714ccd10770626de4034edcac7da
4
- data.tar.gz: 42f9cd22c79d36a6ae06e4703ce80a0da926908e5bd72f4eeb0a77644db1cf68
3
+ metadata.gz: 4207f312e3af2d9d0ff8cd56091d559e53ed4ca6bc2467929560c58c6a2617ff
4
+ data.tar.gz: 29b35acd6163236b9db240a10af6aa69691ec325ceec52043c52eb6ef61c1ee3
5
5
  SHA512:
6
- metadata.gz: e3797f271d6735174e03beda40c98f2392a338d295dcb15d06d323d52cc8828a1b0c654d798a8c3380039759a7eb769f8c9747ad4a7f0678a0f293e07eaa16de
7
- data.tar.gz: bbdd36a6a8ab3d499b4f2af8487291111084e7a51851ef3e5463b861a6118922a20d217e2f5e56c185ca74e8f2a2b01b50d9694cbebd1f6312bf51cb18316b84
6
+ metadata.gz: c83451cfe842f8b736641d290daf3f0e5fdbff72b870d11133edef34923618dd18f49e1e2c574e6cb6452be51e85cd142c6aeb7761a65cc750c26e141e042c51
7
+ data.tar.gz: 519489230cb1ff5030635bbbcc26cc5bbde32d82c94d4a39a71d95b567bf6ca2e48ec5f253e34cf7e85cbd9e8e70311791fcee46599a288d2e8f8f75ad2f9971
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Rodauth OpenAPI
2
2
 
3
- Generates [OpenAPI] documentation for your Rodauth endpoints.
3
+ Generate [OpenAPI] documentation for your Rodauth endpoints.
4
4
 
5
5
  ## Installation
6
6
 
@@ -12,7 +12,7 @@ bundle add rodauth-openapi --group development
12
12
 
13
13
  The generated OpenAPI documentation can be uploaded to renderers such as [Swagger Editor] or [Redoc].
14
14
 
15
- ### Rails
15
+ ### In Rails
16
16
 
17
17
  Assuming you have Rodauth installed in your Rails application, you can use the generator provided by this gem:
18
18
 
@@ -45,22 +45,15 @@ open_api = Rodauth::OpenAPI.new(auth_class)
45
45
  File.write("openapi.yml", open_api.to_yaml)
46
46
  ```
47
47
 
48
- To generate JSON API endpoints:
48
+ Here are the various options and methods supported:
49
49
 
50
50
  ```rb
51
- Roduath::OpenAPI.new(auth_class, json: true)
52
- ```
53
-
54
- To assume the account doesn't have a password:
51
+ Rodauth::OpenAPI.new(auth_class, json: true) # generate JSON API endpoints
52
+ Rodauth::OpenAPI.new(auth_class, password: false) # assume account has no password
55
53
 
56
- ```rb
57
- Roduath::OpenAPI.new(auth_class, password: false)
58
- ```
59
-
60
- To generate the documentation in JSON format:
61
-
62
- ```rb
63
- Roduath::OpenAPI.new(auth_class).to_json
54
+ Rodauth::OpenAPI.new(auth_class).to_yaml # YAML format
55
+ Rodauth::OpenAPI.new(auth_class).to_json # JSON format
56
+ Rodauth::OpenAPI.new(auth_class).generate # ruby hash
64
57
  ```
65
58
 
66
59
  ## License
@@ -30,6 +30,8 @@ module Rodauth
30
30
  else
31
31
  puts documentation
32
32
  end
33
+ rescue Rodauth::OpenAPI::Error => error
34
+ say error.message, :red
33
35
  end
34
36
 
35
37
  private
@@ -46,6 +46,15 @@ module Rodauth
46
46
  data[:paths][path][verb] = {
47
47
  tags: [tag],
48
48
  summary: summary,
49
+ description: <<~MARKDOWN,
50
+ ```ruby
51
+ #{rodauth_invocation}.#{name}_route #=> "#{rodauth.send(:"#{name}_route")}"
52
+ #{rodauth_invocation}.#{name}_path #=> "#{path}"
53
+ #{rodauth_invocation}.#{name}_url #=> "https://example.com#{path}"
54
+
55
+ #{rodauth_invocation}.current_route #=> :#{name} (in the request)
56
+ ```
57
+ MARKDOWN
49
58
  responses: {},
50
59
  parameters: [],
51
60
  }
@@ -54,7 +63,8 @@ module Rodauth
54
63
  end
55
64
 
56
65
  def description(text)
57
- data[:paths].values.last.values.last[:description] = text
66
+ path = data[:paths].values.last.values.last
67
+ path[:description] = [path[:description], text].compact.join("\n")
58
68
  end
59
69
 
60
70
  def param(name, description, type:, example: nil, required: false, enum: nil)
@@ -124,6 +134,14 @@ module Rodauth
124
134
  def feature?(name)
125
135
  rodauth.features.include?(name)
126
136
  end
137
+
138
+ def rodauth_invocation
139
+ if rodauth.class.configuration_name
140
+ "rodauth(:#{rodauth.class.configuration_name})"
141
+ else
142
+ "rodauth"
143
+ end
144
+ end
127
145
  end
128
146
  end
129
147
  end
@@ -5,6 +5,8 @@ require "rodauth/openapi/routes"
5
5
 
6
6
  module Rodauth
7
7
  class OpenAPI
8
+ Error = Class.new(StandardError)
9
+
8
10
  DOCS_URL = "https://rodauth.jeremyevans.net/documentation.html"
9
11
  SPEC_VERSION = "3.0.1"
10
12
 
@@ -23,6 +25,10 @@ module Rodauth
23
25
  end
24
26
 
25
27
  def generate
28
+ if json? && !rodauth.features.include?(:json)
29
+ fail Error, "JSON API documentation was requested, but JSON feature is not enabled"
30
+ end
31
+
26
32
  data = {
27
33
  openapi: SPEC_VERSION,
28
34
  info: {
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "rodauth-openapi"
3
- spec.version = "0.1.0"
3
+ spec.version = "0.2.0"
4
4
  spec.authors = ["Janko Marohnić"]
5
5
  spec.email = ["janko.marohnic@gmail.com"]
6
6
 
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rodauth-openapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janko Marohnić
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-10-11 00:00:00.000000000 Z
10
+ date: 2024-12-29 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rodauth
@@ -64,7 +63,6 @@ homepage: https://github.com/janko/rodauth-openapi
64
63
  licenses:
65
64
  - MIT
66
65
  metadata: {}
67
- post_install_message:
68
66
  rdoc_options: []
69
67
  require_paths:
70
68
  - lib
@@ -79,8 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
77
  - !ruby/object:Gem::Version
80
78
  version: '0'
81
79
  requirements: []
82
- rubygems_version: 3.5.11
83
- signing_key:
80
+ rubygems_version: 3.6.2
84
81
  specification_version: 4
85
82
  summary: Allows dynamically generating OpenAPI documentation based on Rodauth configuration.
86
83
  test_files: []