oas_rails 0.2.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -1
  3. data/app/controllers/oas_rails/oas_rails_controller.rb +1 -1
  4. data/lib/generators/oas_rails/config/templates/oas_rails_initializer.rb +11 -0
  5. data/lib/oas_rails/builders/content_builder.rb +55 -0
  6. data/lib/oas_rails/builders/operation_builder.rb +32 -0
  7. data/lib/oas_rails/builders/parameter_builder.rb +28 -0
  8. data/lib/oas_rails/builders/parameters_builder.rb +39 -0
  9. data/lib/oas_rails/builders/path_item_builder.rb +22 -0
  10. data/lib/oas_rails/builders/request_body_builder.rb +60 -0
  11. data/lib/oas_rails/builders/response_builder.rb +40 -0
  12. data/lib/oas_rails/builders/responses_builder.rb +58 -0
  13. data/lib/oas_rails/configuration.rb +25 -5
  14. data/lib/oas_rails/esquema_builder.rb +37 -0
  15. data/lib/oas_rails/extractors/oas_route_extractor.rb +66 -0
  16. data/lib/oas_rails/extractors/render_response_extractor.rb +148 -0
  17. data/lib/oas_rails/extractors/route_extractor.rb +125 -0
  18. data/lib/oas_rails/oas_route.rb +1 -99
  19. data/lib/oas_rails/spec/components.rb +85 -0
  20. data/lib/oas_rails/spec/contact.rb +18 -0
  21. data/lib/oas_rails/spec/hashable.rb +39 -0
  22. data/lib/oas_rails/{info.rb → spec/info.rb} +30 -24
  23. data/lib/oas_rails/spec/license.rb +18 -0
  24. data/lib/oas_rails/spec/media_type.rb +84 -0
  25. data/lib/oas_rails/spec/operation.rb +25 -0
  26. data/lib/oas_rails/spec/parameter.rb +34 -0
  27. data/lib/oas_rails/spec/path_item.rb +33 -0
  28. data/lib/oas_rails/spec/paths.rb +26 -0
  29. data/lib/oas_rails/spec/reference.rb +16 -0
  30. data/lib/oas_rails/spec/request_body.rb +21 -0
  31. data/lib/oas_rails/spec/response.rb +20 -0
  32. data/lib/oas_rails/spec/responses.rb +25 -0
  33. data/lib/oas_rails/spec/server.rb +17 -0
  34. data/lib/oas_rails/spec/specable.rb +51 -0
  35. data/lib/oas_rails/spec/specification.rb +50 -0
  36. data/lib/oas_rails/spec/tag.rb +18 -0
  37. data/lib/oas_rails/utils.rb +39 -0
  38. data/lib/oas_rails/version.rb +1 -1
  39. data/lib/oas_rails.rb +47 -26
  40. metadata +32 -18
  41. data/lib/oas_rails/contact.rb +0 -12
  42. data/lib/oas_rails/license.rb +0 -11
  43. data/lib/oas_rails/media_type.rb +0 -76
  44. data/lib/oas_rails/oas_base.rb +0 -30
  45. data/lib/oas_rails/operation.rb +0 -134
  46. data/lib/oas_rails/parameter.rb +0 -47
  47. data/lib/oas_rails/path_item.rb +0 -25
  48. data/lib/oas_rails/paths.rb +0 -19
  49. data/lib/oas_rails/request_body.rb +0 -29
  50. data/lib/oas_rails/response.rb +0 -12
  51. data/lib/oas_rails/responses.rb +0 -20
  52. data/lib/oas_rails/route_extractor.rb +0 -119
  53. data/lib/oas_rails/server.rb +0 -10
  54. data/lib/oas_rails/specification.rb +0 -72
  55. data/lib/oas_rails/tag.rb +0 -17
@@ -0,0 +1,84 @@
1
+ module OasRails
2
+ module Spec
3
+ class MediaType
4
+ include Specable
5
+
6
+ attr_accessor :schema, :example, :examples, :encoding
7
+
8
+ @context = :incoming
9
+ @factory_examples = {}
10
+
11
+ # Initializes a new MediaType object.
12
+ #
13
+ # @param schema [Hash] the schema of the media type.
14
+ # @param kwargs [Hash] additional keyword arguments.
15
+ def initialize(specification)
16
+ @specification = specification
17
+ @schema = {}
18
+ @example = {}
19
+ @examples = {}
20
+ end
21
+
22
+ def oas_fields
23
+ [:schema, :example, :examples, :encoding]
24
+ end
25
+
26
+ class << self
27
+ # Searches for examples in test files based on the provided class and test framework.
28
+ #
29
+ # @param klass [Class] the class to search examples for.
30
+ # @param utils [Module] a utility module that provides the `detect_test_framework` method. Defaults to `Utils`.
31
+ # @return [Hash] a hash containing examples data or an empty hash if no examples are found.
32
+ def search_for_examples_in_tests(klass, context: :incoming, utils: Utils)
33
+ @context = context
34
+ case utils.detect_test_framework
35
+ when :factory_bot
36
+ fetch_factory_bot_examples(klass:)
37
+ when :fixtures
38
+ fetch_fixture_examples(klass:)
39
+ else
40
+ {}
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ # Fetches examples from FactoryBot for the provided class.
47
+ #
48
+ # @param klass [Class] the class to fetch examples for.
49
+ # @return [Hash] a hash containing examples data or an empty hash if no examples are found.
50
+ def fetch_factory_bot_examples(klass:)
51
+ klass_sym = Utils.class_to_symbol(klass)
52
+
53
+ begin
54
+ @factory_examples[klass_sym] = FactoryBot.build_stubbed_list(klass_sym, 1) if @factory_examples[klass_sym].nil?
55
+
56
+ @factory_examples[klass_sym].each_with_index.to_h do |obj, index|
57
+ ["#{klass_sym}#{index + 1}", { value: { klass_sym => clean_example_object(obj: obj.as_json) } }]
58
+ end
59
+ rescue KeyError
60
+ {}
61
+ end
62
+ end
63
+
64
+ # Fetches examples from fixtures for the provided class.
65
+ #
66
+ # @param klass [Class] the class to fetch examples for.
67
+ # @return [Hash] a hash containing examples data or an empty hash if no examples are found.
68
+ def fetch_fixture_examples(klass:)
69
+ fixture_file = Rails.root.join('test', 'fixtures', "#{klass.to_s.pluralize.downcase}.yml")
70
+ begin
71
+ fixture_data = YAML.load_file(fixture_file).with_indifferent_access
72
+ rescue Errno::ENOENT
73
+ return {}
74
+ end
75
+ fixture_data.transform_values { |attributes| { value: { klass.to_s.downcase => clean_example_object(obj: attributes) } } }
76
+ end
77
+
78
+ def clean_example_object(obj:)
79
+ obj.reject { |key, _| OasRails.config.send("excluded_columns_#{@context}").include?(key.to_sym) }
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,25 @@
1
+ module OasRails
2
+ module Spec
3
+ class Operation
4
+ include Specable
5
+
6
+ attr_accessor :specification, :tags, :summary, :description, :operation_id, :parameters, :request_body, :responses, :security
7
+
8
+ def initialize(specification)
9
+ @specification = specification
10
+ @summary = ""
11
+ @operation_id = ""
12
+ @tags = []
13
+ @description = @summary
14
+ @parameters = []
15
+ @request_body = {}
16
+ @responses = Spec::Responses.new(specification)
17
+ @security = []
18
+ end
19
+
20
+ def oas_fields
21
+ [:tags, :summary, :description, :operation_id, :parameters, :request_body, :responses, :security]
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ module OasRails
2
+ module Spec
3
+ class Parameter
4
+ include Specable
5
+ include Hashable
6
+
7
+ STYLE_DEFAULTS = { query: 'form', path: 'simple', header: 'simple', cookie: 'form' }.freeze
8
+
9
+ attr_accessor :name, :in, :style, :description, :required, :schema
10
+
11
+ def initialize(specification)
12
+ @specification = specification
13
+ @name = ""
14
+ @in = ""
15
+ @description = ""
16
+ @required = false
17
+ @style = ""
18
+ @schema = { type: 'string' }
19
+ end
20
+
21
+ def default_from_in
22
+ STYLE_DEFAULTS[@in.to_sym]
23
+ end
24
+
25
+ def required?
26
+ @in == 'path'
27
+ end
28
+
29
+ def oas_fields
30
+ [:name, :in, :description, :required, :schema, :style]
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,33 @@
1
+ module OasRails
2
+ module Spec
3
+ class PathItem
4
+ include Specable
5
+ attr_reader :get, :post, :put, :patch, :delete
6
+
7
+ def initialize(specification)
8
+ @specification = specification
9
+ @get = nil
10
+ @post = nil
11
+ @put = nil
12
+ @patch = nil
13
+ @delete = nil
14
+ end
15
+
16
+ def fill_from(path, route_extractor: Extractors::RouteExtractor)
17
+ route_extractor.host_routes_by_path(path).each do |oas_route|
18
+ add_operation(oas_route.verb.downcase, Spec::Operation.new(@specification).fill_from(oas_route))
19
+ end
20
+
21
+ self
22
+ end
23
+
24
+ def add_operation(http_method, operation)
25
+ instance_variable_set("@#{http_method}", operation)
26
+ end
27
+
28
+ def oas_fields
29
+ [:get, :post, :put, :patch, :delete]
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,26 @@
1
+ module OasRails
2
+ module Spec
3
+ class Paths
4
+ include Specable
5
+
6
+ attr_accessor :path_items
7
+
8
+ def initialize(specification)
9
+ @specification = specification
10
+ @path_items = {}
11
+ end
12
+
13
+ def add_path(path)
14
+ @path_items[path] = Builders::PathItemBuilder.new(@specification).from_path(path).build
15
+ end
16
+
17
+ def to_spec
18
+ paths_hash = {}
19
+ @path_items.each do |path, path_object|
20
+ paths_hash[path] = path_object.to_spec
21
+ end
22
+ paths_hash
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ module OasRails
2
+ module Spec
3
+ class Reference
4
+ include Specable
5
+ attr_reader :ref
6
+
7
+ def initialize(ref)
8
+ @ref = ref
9
+ end
10
+
11
+ def to_spec
12
+ { '$ref' => @ref }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ module OasRails
2
+ module Spec
3
+ class RequestBody
4
+ include Specable
5
+ include Hashable
6
+
7
+ attr_accessor :description, :content, :required
8
+
9
+ def initialize(specification)
10
+ @specification = specification
11
+ @description = ""
12
+ @content = {} # a hash with media type objects
13
+ @required = false
14
+ end
15
+
16
+ def oas_fields
17
+ [:description, :content, :required]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ module OasRails
2
+ module Spec
3
+ class Response
4
+ include Specable
5
+ include Hashable
6
+
7
+ attr_accessor :code, :description, :content
8
+
9
+ def initialize(specification)
10
+ @specification = specification
11
+ @description = ""
12
+ @content = {} # Hash with {content: MediaType}
13
+ end
14
+
15
+ def oas_fields
16
+ [:description, :content]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ module OasRails
2
+ module Spec
3
+ class Responses
4
+ include Specable
5
+ attr_accessor :responses
6
+
7
+ def initialize(specification)
8
+ @specification = specification
9
+ @responses = {}
10
+ end
11
+
12
+ def add_response(response)
13
+ @responses[response.code] = @specification.components.add_response(response)
14
+ end
15
+
16
+ def to_spec
17
+ spec = {}
18
+ @responses.each do |key, value|
19
+ spec[key] = value.to_spec
20
+ end
21
+ spec
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ module OasRails
2
+ module Spec
3
+ class Server
4
+ include Specable
5
+ attr_accessor :url, :description
6
+
7
+ def initialize(url:, description:)
8
+ @url = url
9
+ @description = description
10
+ end
11
+
12
+ def oas_fields
13
+ [:url, :description]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,51 @@
1
+ module OasRails
2
+ module Spec
3
+ module Specable
4
+ def oas_fields
5
+ []
6
+ end
7
+
8
+ def to_spec
9
+ hash = {}
10
+ oas_fields.each do |var|
11
+ key = var.to_s
12
+
13
+ camel_case_key = key.camelize(:lower).to_sym
14
+ value = send(var)
15
+
16
+ processed_value = if value.respond_to?(:to_spec)
17
+ value.to_spec
18
+ elsif value.is_a?(Array) && value.all? { |elem| elem.respond_to?(:to_spec) }
19
+ value.map(&:to_spec)
20
+ # elsif value.is_a?(Hash)
21
+ # p "Here"
22
+ # p value
23
+ # hash = {}
24
+ # value.each do |key, object|
25
+ # hash[key] = object.to_spec
26
+ # end
27
+ # hash
28
+ else
29
+ value
30
+ end
31
+
32
+ # hash[camel_case_key] = processed_value unless (processed_value.is_a?(Hash) || processed_value.is_a?(Array)) && processed_value.empty?
33
+ hash[camel_case_key] = processed_value unless processed_value.nil?
34
+ end
35
+ hash
36
+ end
37
+
38
+ def as_json
39
+ to_spec
40
+ end
41
+
42
+ private
43
+
44
+ def snake_to_camel(snake_str)
45
+ words = snake_str.to_s.split('_')
46
+ words[1..].map!(&:capitalize)
47
+ (words[0] + words[1..].join).to_sym
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,50 @@
1
+ require 'json'
2
+
3
+ module OasRails
4
+ module Spec
5
+ class Specification
6
+ include Specable
7
+ attr_accessor :components, :info, :openapi, :servers, :tags, :external_docs, :paths
8
+
9
+ # Initializes a new Specification object.
10
+ # Clears the cache if running in the development environment.
11
+ def initialize
12
+ clear_cache unless Rails.env.production?
13
+
14
+ @components = Components.new(self)
15
+ @info = OasRails.config.info
16
+ @openapi = '3.1.0'
17
+ @servers = OasRails.config.servers
18
+ @tags = OasRails.config.tags
19
+ @external_docs = {}
20
+ @paths = Spec::Paths.new(self)
21
+ end
22
+
23
+ def build(route_extractor: Extractors::RouteExtractor)
24
+ route_extractor.host_paths.each do |path|
25
+ @paths.add_path(path)
26
+ end
27
+ end
28
+
29
+ # Clears the cache for MethodSource and RouteExtractor.
30
+ #
31
+ # @return [void]
32
+ def clear_cache
33
+ MethodSource.clear_cache
34
+ Extractors::RouteExtractor.clear_cache
35
+ end
36
+
37
+ def oas_fields
38
+ [:openapi, :info, :servers, :paths, :components, :security, :tags, :external_docs]
39
+ end
40
+
41
+ # Create the Security Requirement Object.
42
+ # @see https://spec.openapis.org/oas/latest.html#security-requirement-object
43
+ def security
44
+ return [] unless OasRails.config.authenticate_all_routes_by_default
45
+
46
+ OasRails.config.security_schemas.map { |key, _| { key => [] } }
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,18 @@
1
+ module OasRails
2
+ module Spec
3
+ class Tag
4
+ include Specable
5
+
6
+ attr_accessor :name, :description
7
+
8
+ def initialize(name:, description:)
9
+ @name = name.titleize
10
+ @description = description
11
+ end
12
+
13
+ def oas_fields
14
+ [:name, :description]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -13,6 +13,14 @@ module OasRails
13
13
  'DateTime' => 'string'
14
14
  }.freeze
15
15
 
16
+ HTTP_STATUS_DEFINITIONS = {
17
+ 404 => "The requested resource could not be found.",
18
+ 401 => "You are not authorized to access this resource. You need to authenticate yourself first.",
19
+ 403 => "You are not allowed to access this resource. You do not have the necessary permissions.",
20
+ 500 => "An unexpected error occurred on the server. The server was unable to process the request.",
21
+ 422 => "The server could not process the request due to semantic errors. Please check your input and try again."
22
+ }.freeze
23
+
16
24
  class << self
17
25
  # Method for detect test framework of the Rails App
18
26
  # It is used for generate examples in operations
@@ -61,6 +69,37 @@ module OasRails
61
69
  def ruby_type_to_json_type(ruby_type)
62
70
  TYPE_MAPPING.fetch(ruby_type, 'string')
63
71
  end
72
+
73
+ # Converts a status symbol or string to an integer.
74
+ #
75
+ # @param status [String, Symbol, nil] The status to convert.
76
+ # @return [Integer] The status code as an integer.
77
+ def status_to_integer(status)
78
+ return 200 if status.nil?
79
+
80
+ if status.to_s =~ /^\d+$/
81
+ status.to_i
82
+ else
83
+ status = "unprocessable_content" if status == "unprocessable_entity"
84
+ Rack::Utils::SYMBOL_TO_STATUS_CODE[status.to_sym]
85
+ end
86
+ end
87
+
88
+ # Converts a status code to its corresponding text description.
89
+ #
90
+ # @param status_code [Integer] The status code.
91
+ # @return [String] The text description of the status code.
92
+ def status_code_to_text(status_code)
93
+ Rack::Utils::HTTP_STATUS_CODES[status_code] || "Unknown Status Code"
94
+ end
95
+
96
+ def get_definition(status_code)
97
+ HTTP_STATUS_DEFINITIONS[status_code] || "Definition not found for status code #{status_code}"
98
+ end
99
+
100
+ def class_to_symbol(klass)
101
+ klass.name.underscore.to_sym
102
+ end
64
103
  end
65
104
  end
66
105
  end
@@ -1,3 +1,3 @@
1
1
  module OasRails
2
- VERSION = "0.2.3"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/oas_rails.rb CHANGED
@@ -6,35 +6,64 @@ module OasRails
6
6
  require "oas_rails/version"
7
7
  require "oas_rails/engine"
8
8
 
9
- autoload :OasBase, "oas_rails/oas_base"
10
9
  autoload :Configuration, "oas_rails/configuration"
11
- autoload :Specification, "oas_rails/specification"
12
- autoload :RouteExtractor, "oas_rails/route_extractor"
13
10
  autoload :OasRoute, "oas_rails/oas_route"
14
- autoload :Operation, "oas_rails/operation"
15
- autoload :Info, "oas_rails/info"
16
- autoload :Contact, "oas_rails/contact"
17
- autoload :Paths, "oas_rails/paths"
18
- autoload :PathItem, "oas_rails/path_item"
19
- autoload :Parameter, "oas_rails/parameter"
20
- autoload :Tag, "oas_rails/tag"
21
- autoload :License, "oas_rails/license"
22
- autoload :Server, "oas_rails/server"
23
- autoload :RequestBody, "oas_rails/request_body"
24
- autoload :MediaType, "oas_rails/media_type"
25
- autoload :Response, "oas_rails/response"
26
- autoload :Responses, "oas_rails/responses"
27
-
28
11
  autoload :Utils, "oas_rails/utils"
12
+ autoload :EsquemaBuilder, "oas_rails/esquema_builder"
13
+
14
+ module Builders
15
+ autoload :OperationBuilder, "oas_rails/builders/operation_builder"
16
+ autoload :PathItemBuilder, "oas_rails/builders/path_item_builder"
17
+ autoload :ResponseBuilder, "oas_rails/builders/response_builder"
18
+ autoload :ResponsesBuilder, "oas_rails/builders/responses_builder"
19
+ autoload :ContentBuilder, "oas_rails/builders/content_builder"
20
+ autoload :ParametersBuilder, "oas_rails/builders/parameters_builder"
21
+ autoload :ParameterBuilder, "oas_rails/builders/parameter_builder"
22
+ autoload :RequestBodyBuilder, "oas_rails/builders/request_body_builder"
23
+ end
24
+
25
+ # This module contains all the clases that represent a part of the OAS file.
26
+ module Spec
27
+ autoload :Hashable, "oas_rails/spec/hashable"
28
+ autoload :Specable, "oas_rails/spec/specable"
29
+ autoload :Components, "oas_rails/spec/components"
30
+ autoload :Parameter, "oas_rails/spec/parameter"
31
+ autoload :License, "oas_rails/spec/license"
32
+ autoload :Response, "oas_rails/spec/response"
33
+ autoload :PathItem, "oas_rails/spec/path_item"
34
+ autoload :Operation, "oas_rails/spec/operation"
35
+ autoload :RequestBody, "oas_rails/spec/request_body"
36
+ autoload :Responses, "oas_rails/spec/responses"
37
+ autoload :MediaType, "oas_rails/spec/media_type"
38
+ autoload :Paths, "oas_rails/spec/paths"
39
+ autoload :Contact, "oas_rails/spec/contact"
40
+ autoload :Info, "oas_rails/spec/info"
41
+ autoload :Server, "oas_rails/spec/server"
42
+ autoload :Tag, "oas_rails/spec/tag"
43
+ autoload :Specification, "oas_rails/spec/specification"
44
+ autoload :Reference, "oas_rails/spec/reference"
45
+ end
29
46
 
30
47
  module YARD
31
48
  autoload :OasYARDFactory, 'oas_rails/yard/oas_yard_factory'
32
49
  end
33
50
 
51
+ module Extractors
52
+ autoload :RenderResponseExtractor, 'oas_rails/extractors/render_response_extractor'
53
+ autoload :RouteExtractor, "oas_rails/extractors/route_extractor"
54
+ autoload :OasRouteExtractor, "oas_rails/extractors/oas_route_extractor"
55
+ end
56
+
34
57
  class << self
58
+ def build
59
+ oas = Spec::Specification.new
60
+ oas.build
61
+
62
+ oas.to_spec
63
+ end
64
+
35
65
  # Configurations for make the OasRails engine Work.
36
66
  def configure
37
- OasRails.configure_esquema!
38
67
  OasRails.configure_yard!
39
68
  yield config
40
69
  end
@@ -59,13 +88,5 @@ module OasRails
59
88
  ::YARD::Tags::Library.define_tag(tag_name, method_name, handler)
60
89
  end
61
90
  end
62
-
63
- def configure_esquema!
64
- Esquema.configure do |config|
65
- config.exclude_associations = true
66
- config.exclude_foreign_keys = true
67
- config.excluded_columns = %i[id created_at updated_at deleted_at]
68
- end
69
- end
70
91
  end
71
92
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oas_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - a-chacon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-01 00:00:00.000000000 Z
11
+ date: 2024-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: esquema
@@ -100,25 +100,39 @@ files:
100
100
  - lib/generators/oas_rails/config/config_generator.rb
101
101
  - lib/generators/oas_rails/config/templates/oas_rails_initializer.rb
102
102
  - lib/oas_rails.rb
103
+ - lib/oas_rails/builders/content_builder.rb
104
+ - lib/oas_rails/builders/operation_builder.rb
105
+ - lib/oas_rails/builders/parameter_builder.rb
106
+ - lib/oas_rails/builders/parameters_builder.rb
107
+ - lib/oas_rails/builders/path_item_builder.rb
108
+ - lib/oas_rails/builders/request_body_builder.rb
109
+ - lib/oas_rails/builders/response_builder.rb
110
+ - lib/oas_rails/builders/responses_builder.rb
103
111
  - lib/oas_rails/configuration.rb
104
- - lib/oas_rails/contact.rb
105
112
  - lib/oas_rails/engine.rb
106
- - lib/oas_rails/info.rb
107
- - lib/oas_rails/license.rb
108
- - lib/oas_rails/media_type.rb
109
- - lib/oas_rails/oas_base.rb
113
+ - lib/oas_rails/esquema_builder.rb
114
+ - lib/oas_rails/extractors/oas_route_extractor.rb
115
+ - lib/oas_rails/extractors/render_response_extractor.rb
116
+ - lib/oas_rails/extractors/route_extractor.rb
110
117
  - lib/oas_rails/oas_route.rb
111
- - lib/oas_rails/operation.rb
112
- - lib/oas_rails/parameter.rb
113
- - lib/oas_rails/path_item.rb
114
- - lib/oas_rails/paths.rb
115
- - lib/oas_rails/request_body.rb
116
- - lib/oas_rails/response.rb
117
- - lib/oas_rails/responses.rb
118
- - lib/oas_rails/route_extractor.rb
119
- - lib/oas_rails/server.rb
120
- - lib/oas_rails/specification.rb
121
- - lib/oas_rails/tag.rb
118
+ - lib/oas_rails/spec/components.rb
119
+ - lib/oas_rails/spec/contact.rb
120
+ - lib/oas_rails/spec/hashable.rb
121
+ - lib/oas_rails/spec/info.rb
122
+ - lib/oas_rails/spec/license.rb
123
+ - lib/oas_rails/spec/media_type.rb
124
+ - lib/oas_rails/spec/operation.rb
125
+ - lib/oas_rails/spec/parameter.rb
126
+ - lib/oas_rails/spec/path_item.rb
127
+ - lib/oas_rails/spec/paths.rb
128
+ - lib/oas_rails/spec/reference.rb
129
+ - lib/oas_rails/spec/request_body.rb
130
+ - lib/oas_rails/spec/response.rb
131
+ - lib/oas_rails/spec/responses.rb
132
+ - lib/oas_rails/spec/server.rb
133
+ - lib/oas_rails/spec/specable.rb
134
+ - lib/oas_rails/spec/specification.rb
135
+ - lib/oas_rails/spec/tag.rb
122
136
  - lib/oas_rails/utils.rb
123
137
  - lib/oas_rails/version.rb
124
138
  - lib/oas_rails/yard/oas_yard_factory.rb
@@ -1,12 +0,0 @@
1
- module OasRails
2
- class Contact < OasBase
3
- attr_accessor :name, :url, :email
4
-
5
- def initialize(**kwargs)
6
- super()
7
- @name = kwargs[:name] || ''
8
- @url = kwargs[:url] || ''
9
- @email = kwargs[:email] || ''
10
- end
11
- end
12
- end