taro 1.3.0 → 1.4.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 +4 -4
- data/CHANGELOG.md +11 -0
- data/lib/taro/export/open_api_v3.rb +14 -3
- data/lib/taro/rails/declaration.rb +1 -21
- data/lib/taro/rails/normalized_route.rb +13 -1
- data/lib/taro/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d30f413c950e02e52f99ed96d234acdba122c92ec4e39dd2d35e87c899ed8a13
|
4
|
+
data.tar.gz: 5ed455623397ce6fbcb19412710bf98bc7ca2b6898db193a2cf858104a149327
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba99529dd914238371708a80b5f3f6497a4884a042a0e11ec7e9b557107379d0bfa2232b6a71137623658651e5d920f8ad47ab683119ae5ce105261fa627b980
|
7
|
+
data.tar.gz: 26b2652184c485aa7970707373cfe4ebfdecd3141fc7e995066060b5a0a5452b1e749d6e16fdc3d99e34a199434ed9edc7400d89fe8f8ed32df442d764d06175
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.4.0] - 2024-11-27
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- added operationId to OpenAPI export
|
8
|
+
|
9
|
+
### Fixed
|
10
|
+
|
11
|
+
- fixed potential ref name clashes in OpenAPI export
|
12
|
+
- e.g. `FooBar::BazController` & `Foo::BarBazController`
|
13
|
+
|
3
14
|
## [1.3.0] - 2024-11-25
|
4
15
|
|
5
16
|
### Added
|
@@ -31,9 +31,10 @@ class Taro::Export::OpenAPIv3 < Taro::Export::Base # rubocop:disable Metrics/Cla
|
|
31
31
|
description: declaration.desc,
|
32
32
|
summary: declaration.summary,
|
33
33
|
tags: declaration.tags,
|
34
|
+
operationId: route.openapi_operation_id,
|
34
35
|
parameters: route_parameters(declaration, route),
|
35
36
|
requestBody: request_body(declaration, route),
|
36
|
-
responses: responses(declaration),
|
37
|
+
responses: responses(declaration, route),
|
37
38
|
}.compact,
|
38
39
|
}
|
39
40
|
end
|
@@ -91,7 +92,7 @@ class Taro::Export::OpenAPIv3 < Taro::Export::Base # rubocop:disable Metrics/Cla
|
|
91
92
|
|
92
93
|
body_input_type = Class.new(params)
|
93
94
|
body_input_type.fields.replace(body_param_fields)
|
94
|
-
body_input_type.openapi_name =
|
95
|
+
body_input_type.openapi_name = "#{route.openapi_operation_id}_Input"
|
95
96
|
|
96
97
|
# For polymorphic routes (more than one for the same declaration),
|
97
98
|
# we can't use refs because their request body might differ:
|
@@ -109,7 +110,9 @@ class Taro::Export::OpenAPIv3 < Taro::Export::Base # rubocop:disable Metrics/Cla
|
|
109
110
|
end
|
110
111
|
end
|
111
112
|
|
112
|
-
def responses(declaration)
|
113
|
+
def responses(declaration, route)
|
114
|
+
name_anonymous_return_types(declaration, route)
|
115
|
+
|
113
116
|
declaration.returns.sort.to_h do |code, type|
|
114
117
|
[
|
115
118
|
code.to_s,
|
@@ -121,6 +124,14 @@ class Taro::Export::OpenAPIv3 < Taro::Export::Base # rubocop:disable Metrics/Cla
|
|
121
124
|
end
|
122
125
|
end
|
123
126
|
|
127
|
+
def name_anonymous_return_types(declaration, route)
|
128
|
+
declaration.returns.each do |code, type|
|
129
|
+
next if type.openapi_name?
|
130
|
+
|
131
|
+
type.openapi_name = "#{route.openapi_operation_id}_#{code}_Response"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
124
135
|
def export_type(type)
|
125
136
|
if type < Taro::Types::ScalarType && !custom_scalar_type?(type)
|
126
137
|
{ type: type.openapi_type }
|
@@ -53,11 +53,6 @@ class Taro::Rails::Declaration
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def finalize(controller_class:, action_name:)
|
56
|
-
add_routes(controller_class:, action_name:)
|
57
|
-
add_openapi_names(controller_class:, action_name:)
|
58
|
-
end
|
59
|
-
|
60
|
-
def add_routes(controller_class:, action_name:)
|
61
56
|
routes = Taro::Rails::RouteFinder.call(controller_class:, action_name:)
|
62
57
|
routes.any? || raise_missing_route(controller_class, action_name)
|
63
58
|
self.routes = routes
|
@@ -72,21 +67,6 @@ class Taro::Rails::Declaration
|
|
72
67
|
routes.size > 1
|
73
68
|
end
|
74
69
|
|
75
|
-
# TODO: these change when the controller class is renamed.
|
76
|
-
# We might need a way to set `base`. Perhaps as a kwarg to `::api`?
|
77
|
-
def add_openapi_names(controller_class:, action_name:)
|
78
|
-
base = "#{controller_class.name.chomp('Controller').gsub('::', '_')}_#{action_name}"
|
79
|
-
params.openapi_name = "#{base}_Input"
|
80
|
-
params.define_singleton_method(:name) { openapi_name }
|
81
|
-
|
82
|
-
returns.each do |status, return_type|
|
83
|
-
next if return_type.openapi_name? # only set for ad-hoc / nested return types
|
84
|
-
|
85
|
-
return_type.openapi_name = "#{base}_#{status}_Response"
|
86
|
-
return_type.define_singleton_method(:name) { openapi_name }
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
70
|
require 'rack'
|
91
71
|
def self.coerce_status_to_int(status)
|
92
72
|
# support using http status numbers directly
|
@@ -137,6 +117,6 @@ class Taro::Rails::Declaration
|
|
137
117
|
end
|
138
118
|
|
139
119
|
def <=>(other)
|
140
|
-
|
120
|
+
routes.first.openapi_operation_id <=> other.routes.first.openapi_operation_id
|
141
121
|
end
|
142
122
|
end
|
@@ -18,15 +18,26 @@ Taro::Rails::NormalizedRoute = Data.define(:rails_route) do
|
|
18
18
|
rails_route.path.spec.to_s.gsub('(.:format)', '').gsub(/:(\w+)/, '{\1}')
|
19
19
|
end
|
20
20
|
|
21
|
+
def openapi_operation_id
|
22
|
+
"#{verb}_#{action}_#{controller.gsub('/', '__')}"
|
23
|
+
end
|
24
|
+
|
21
25
|
def path_params
|
22
26
|
openapi_path.scan(/{(\w+)}/).flatten.map(&:to_sym)
|
23
27
|
end
|
24
28
|
|
25
29
|
def endpoint
|
26
|
-
controller, action = rails_route.requirements.values_at(:controller, :action)
|
27
30
|
"#{controller}##{action}"
|
28
31
|
end
|
29
32
|
|
33
|
+
def action
|
34
|
+
rails_route.requirements[:action]
|
35
|
+
end
|
36
|
+
|
37
|
+
def controller
|
38
|
+
rails_route.requirements[:controller]
|
39
|
+
end
|
40
|
+
|
30
41
|
def can_have_request_body?
|
31
42
|
%w[patch post put].include?(verb)
|
32
43
|
end
|
@@ -34,4 +45,5 @@ Taro::Rails::NormalizedRoute = Data.define(:rails_route) do
|
|
34
45
|
def inspect
|
35
46
|
%(#<#{self.class} "#{verb} #{openapi_path}">)
|
36
47
|
end
|
48
|
+
alias to_s inspect
|
37
49
|
end
|
data/lib/taro/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janosch Müller
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-11-
|
12
|
+
date: 2024-11-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|