Class: ThreeScaleToolbox::OpenAPI::Swagger
- Inherits:
-
Object
- Object
- ThreeScaleToolbox::OpenAPI::Swagger
- Defined in:
- lib/3scale_toolbox/openapi/swagger.rb
Overview
Swagger object
-
Swagger.title -> string
-
Swagger.description -> string
-
Swagger.version -> string
-
Swagger.basePath -> string
-
Swagger.host -> string
-
Swagger.scheme -> string
-
Swagger.operation -> array of operation hash
-
operation hash properties
-
:verb
-
:path
-
:description
-
:operation_id
-
-
-
Swagger.security -> security hash
-
security hash properties
-
:id -> string
-
:type -> string
-
:name -> string
-
:in_f -> string
-
:flow -> symbol (:implicit_flow_enabled, :direct_access_grants_enabled, :service_accounts_enabled, :standard_flow_enabled)
-
:scopes -> array of string
-
-
-
Swagger.service_backend_version -> string (‘1’,‘2’,‘oidc’)
-
Swagger.set_server_url -> def(spec, url)
-
Swagger.set_oauth2_urls-> def(spec, scheme_id, authorization_url, token_url)
Constant Summary collapse
- META_SCHEMA_PATH =
File.('../../../resources/swagger_meta_schema.json', __dir__)
Instance Attribute Summary collapse
-
#raw ⇒ Object
readonly
Returns the value of attribute raw.
Class Method Summary collapse
Instance Method Summary collapse
- #base_path ⇒ Object
- #description ⇒ Object
- #host ⇒ Object
- #operations ⇒ Object
- #scheme ⇒ Object
- #security ⇒ Object
- #service_backend_version ⇒ Object
-
#set_oauth2_urls(spec, sec_scheme_id, authorization_url, token_url) ⇒ Object
Update given spec with urls It is expected identified security scheme to be oauth2 type.
- #set_server_url(spec, url) ⇒ Object
- #title ⇒ Object
- #version ⇒ Object
Instance Attribute Details
#raw ⇒ Object (readonly)
Returns the value of attribute raw.
43 44 45 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 43 def raw @raw end |
Class Method Details
.build(raw, validate: true) ⇒ Object
37 38 39 40 41 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 37 def self.build(raw, validate: true) self.validate(raw) if validate new(raw) end |
.validate(raw) ⇒ Object
32 33 34 35 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 32 def self.validate(raw) = JSON.parse(File.read(META_SCHEMA_PATH)) JSON::Validator.validate!(, raw) end |
Instance Method Details
#base_path ⇒ Object
57 58 59 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 57 def base_path raw['basePath'] end |
#description ⇒ Object
49 50 51 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 49 def description raw.dig('info', 'description') end |
#host ⇒ Object
61 62 63 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 61 def host raw['host'] end |
#operations ⇒ Object
69 70 71 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 69 def operations @operations ||= parse_operations end |
#scheme ⇒ Object
65 66 67 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 65 def scheme Array(raw['schemes']).first end |
#security ⇒ Object
73 74 75 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 73 def security @security ||= parse_security end |
#service_backend_version ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 77 def service_backend_version # default authentication mode if no security requirement return '1' if security.nil? case security[:type] when 'oauth2' 'oidc' when 'apiKey' '1' else raise ThreeScaleToolbox::Error, "Unexpected security scheme type #{security[:type]}" end end |
#set_oauth2_urls(spec, sec_scheme_id, authorization_url, token_url) ⇒ Object
Update given spec with urls It is expected identified security scheme to be oauth2 type
102 103 104 105 106 107 108 109 110 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 102 def set_oauth2_urls(spec, sec_scheme_id, , token_url) sec_scheme_obj = spec.dig('securityDefinitions', sec_scheme_id) if sec_scheme_obj.nil? || sec_scheme_obj['type'] != 'oauth2' raise ThreeScaleToolbox::Error, "Expected security scheme {#{sec_scheme_id}} not found or not oauth2" end sec_scheme_obj['authorizationUrl'] = if %w[implicit accessCode].include?(sec_scheme_obj['flow']) sec_scheme_obj['tokenUrl'] = token_url if %w[password application accessCode].include?(sec_scheme_obj['flow']) end |
#set_server_url(spec, url) ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 91 def set_server_url(spec, url) URI(url).tap do |uri| spec['host'] = "#{uri.host}:#{uri.port}" spec['schemes'] = [uri.scheme] spec['basePath'] = uri.path end end |
#title ⇒ Object
45 46 47 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 45 def title raw.dig('info', 'title') end |
#version ⇒ Object
53 54 55 |
# File 'lib/3scale_toolbox/openapi/swagger.rb', line 53 def version raw.dig('info', 'version') end |