Class: OpenapiFirst::Operation
- Inherits:
-
Object
- Object
- OpenapiFirst::Operation
- Extended by:
- Forwardable
- Defined in:
- lib/openapi_first/operation.rb
Overview
rubocop:disable Metrics/ClassLength
Instance Attribute Summary collapse
-
#method ⇒ Object
readonly
Returns the value of attribute method.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
Instance Method Summary collapse
- #content_type_for(status) ⇒ Object
-
#initialize(path, request_method, path_item_object) ⇒ Operation
constructor
A new instance of Operation.
- #name ⇒ Object
- #operation_id ⇒ Object
- #parameters_schema ⇒ Object
- #read? ⇒ Boolean
- #request_body ⇒ Object
- #request_body_schema(request_content_type) ⇒ Object
- #response_for(status) ⇒ Object
- #response_schema_for(status, content_type) ⇒ Object
- #write? ⇒ Boolean
Constructor Details
#initialize(path, request_method, path_item_object) ⇒ Operation
Returns a new instance of Operation.
20 21 22 23 24 |
# File 'lib/openapi_first/operation.rb', line 20 def initialize(path, request_method, path_item_object) @path = path @method = request_method @path_item_object = path_item_object end |
Instance Attribute Details
#method ⇒ Object (readonly)
Returns the value of attribute method.
18 19 20 |
# File 'lib/openapi_first/operation.rb', line 18 def method @method end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
18 19 20 |
# File 'lib/openapi_first/operation.rb', line 18 def path @path end |
Instance Method Details
#content_type_for(status) ⇒ Object
49 50 51 52 |
# File 'lib/openapi_first/operation.rb', line 49 def content_type_for(status) content = response_for(status)['content'] content.keys[0] if content end |
#name ⇒ Object
87 88 89 |
# File 'lib/openapi_first/operation.rb', line 87 def name "#{method.upcase} #{path} (#{operation_id})" end |
#operation_id ⇒ Object
26 27 28 |
# File 'lib/openapi_first/operation.rb', line 26 def operation_id operation_object['operationId'] end |
#parameters_schema ⇒ Object
42 43 44 45 46 47 |
# File 'lib/openapi_first/operation.rb', line 42 def parameters_schema @parameters_schema ||= begin parameters_json_schema = build_parameters_json_schema parameters_json_schema && SchemaValidation.new(parameters_json_schema) end end |
#read? ⇒ Boolean
30 31 32 |
# File 'lib/openapi_first/operation.rb', line 30 def read? !write? end |
#request_body ⇒ Object
38 39 40 |
# File 'lib/openapi_first/operation.rb', line 38 def request_body operation_object['requestBody'] end |
#request_body_schema(request_content_type) ⇒ Object
70 71 72 73 74 75 76 77 |
# File 'lib/openapi_first/operation.rb', line 70 def request_body_schema(request_content_type) content = operation_object.dig('requestBody', 'content') media_type = find_content_for_content_type(content, request_content_type) schema = media_type&.fetch('schema', nil) return unless schema SchemaValidation.new(schema, write: write?) end |
#response_for(status) ⇒ Object
79 80 81 82 83 84 85 |
# File 'lib/openapi_first/operation.rb', line 79 def response_for(status) response_content = response_by_code(status) return response_content if response_content = "Response status code or default not found: #{status} for '#{name}'" raise OpenapiFirst::ResponseCodeNotFoundError, end |
#response_schema_for(status, content_type) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/openapi_first/operation.rb', line 54 def response_schema_for(status, content_type) content = response_for(status)['content'] return if content.nil? || content.empty? raise ResponseInvalid, "Response has no content-type for '#{name}'" unless content_type media_type = find_content_for_content_type(content, content_type) unless media_type = "Response content type not found '#{content_type}' for '#{name}'" raise ResponseContentTypeNotFoundError, end schema = media_type['schema'] SchemaValidation.new(schema, write: false) if schema end |
#write? ⇒ Boolean
34 35 36 |
# File 'lib/openapi_first/operation.rb', line 34 def write? WRITE_METHODS.include?(method) end |