taro 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|