rodauth-openapi 0.1.0 → 0.2.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
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: []