Class: Miniswag::OpenapiGenerator
- Inherits:
-
Object
- Object
- Miniswag::OpenapiGenerator
- Defined in:
- lib/miniswag/openapi_generator.rb
Overview
Collects metadata from test definitions and generates OpenAPI spec files. This is the Minitest equivalent of rswag’s OpenapiFormatter.
Instance Method Summary collapse
- #generate! ⇒ Object
-
#initialize(config = Miniswag.config) ⇒ OpenapiGenerator
constructor
A new instance of OpenapiGenerator.
Constructor Details
#initialize(config = Miniswag.config) ⇒ OpenapiGenerator
Returns a new instance of OpenapiGenerator.
12 13 14 |
# File 'lib/miniswag/openapi_generator.rb', line 12 def initialize(config = Miniswag.config) @config = config end |
Instance Method Details
#generate! ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/miniswag/openapi_generator.rb', line 16 def generate! @config.validate! # Process all registered test class metadata Miniswag.registered_test_classes.each do |test_class| test_class.miniswag_test_definitions.each do || next if [:document] == false || .dig(:response, :document) == false next unless .key?(:response) openapi_spec = @config.get_openapi_spec([:openapi_spec]) raise ConfigurationError, 'Unsupported OpenAPI version' unless doc_version(openapi_spec)&.start_with?('3') upgrade_request_type!() upgrade_response_produces!(openapi_spec, ) openapi_spec.deep_merge!(()) end end # Post-process and write files @config.openapi_specs.each do |url_path, doc| parse_parameters(doc) file_path = File.join(@config.openapi_root, url_path) dirname = File.dirname(file_path) FileUtils.mkdir_p(dirname) unless File.exist?(dirname) File.open(file_path, 'w') do |file| file.write(pretty_generate(doc)) end puts "Miniswag: OpenAPI doc generated at #{file_path}" end end |