From d0cece721c14ee7487abd84bb1ccbf6cb18f5d5c Mon Sep 17 00:00:00 2001 From: Mercedes Bernard Date: Thu, 30 Nov 2023 13:33:09 -0600 Subject: [PATCH 1/2] add ability to define custom summary and tags builders --- README.md | 6 ++++++ lib/rspec/openapi.rb | 4 ++++ lib/rspec/openapi/record_builder.rb | 4 ++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index af1bd4a..f8350b7 100644 --- a/README.md +++ b/README.md @@ -169,6 +169,12 @@ EOS # Generate a custom description, given an RSpec example RSpec::OpenAPI.description_builder = -> (example) { example.description } +# Generate a custom summary, given an RSpec example +RSpec::OpenAPI.summary_builder = -> (example) { example.metadata[:summary] } + +# Generate a custom tags, given an RSpec example +RSpec::OpenAPI.tags_builder = -> (example) { example.metadata[:tags] } + # Change the example type(s) that will generate schema RSpec::OpenAPI.example_types = %i[request] diff --git a/lib/rspec/openapi.rb b/lib/rspec/openapi.rb index 212e926..911e407 100644 --- a/lib/rspec/openapi.rb +++ b/lib/rspec/openapi.rb @@ -19,6 +19,8 @@ module RSpec::OpenAPI @comment = nil @enable_example = true @description_builder = ->(example) { example.description } + @summary_builder = ->(example) { example.metadata[:summary] } + @tags_builder = ->(example) { example.metadata[:tags] } @info = {} @application_version = '1.0.0' @request_headers = [] @@ -35,6 +37,8 @@ class << self :comment, :enable_example, :description_builder, + :summary_builder, + :tags_builder, :info, :application_version, :request_headers, diff --git a/lib/rspec/openapi/record_builder.rb b/lib/rspec/openapi/record_builder.rb index f4686b2..64b83d2 100644 --- a/lib/rspec/openapi/record_builder.rb +++ b/lib/rspec/openapi/record_builder.rb @@ -62,8 +62,8 @@ def extract_headers(request, response) def extract_request_attributes(request, example) metadata = example.metadata[:openapi] || {} - summary = metadata[:summary] - tags = metadata[:tags] + summary = metadata[:summary] || RSpec::OpenAPI.summary_builder.call(example) + tags = metadata[:tags] || RSpec::OpenAPI.tags_builder.call(example) operation_id = metadata[:operation_id] required_request_params = metadata[:required_request_params] || [] security = metadata[:security] From 08f0c2a76c76d3b04e4bd03f6d2df017cbd8f178 Mon Sep 17 00:00:00 2001 From: Mercedes Bernard Date: Fri, 1 Dec 2023 09:29:30 -0600 Subject: [PATCH 2/2] add some examples for summary and tags to README --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f8350b7..f273f1f 100644 --- a/README.md +++ b/README.md @@ -170,10 +170,12 @@ EOS RSpec::OpenAPI.description_builder = -> (example) { example.description } # Generate a custom summary, given an RSpec example -RSpec::OpenAPI.summary_builder = -> (example) { example.metadata[:summary] } +# This example uses the summary from the example_group. +RSpec::OpenAPI.summary_builder = ->(example) { example.metadata.dig(:example_group, :openapi, :summary) } # Generate a custom tags, given an RSpec example -RSpec::OpenAPI.tags_builder = -> (example) { example.metadata[:tags] } +# This example uses the tags from the parent_example_group +RSpec::OpenAPI.tags_builder = -> (example) { example.metadata.dig(:example_group, :parent_example_group, :openapi, :tags) } # Change the example type(s) that will generate schema RSpec::OpenAPI.example_types = %i[request]