rswag/lib/swagger_rails/rspec/formatter.rb
2016-08-12 08:23:28 +08:00

42 lines
1.1 KiB
Ruby

require 'rspec/core/formatters'
require 'swagger_helper'
require 'swagger_rails/rspec/api_metadata'
module SwaggerRails
module RSpec
class Formatter
::RSpec::Core::Formatters.register self,
:example_group_finished,
:stop
def initialize(output)
@output = output
@swagger_root = ::RSpec.configuration.swagger_root
@swagger_docs = ::RSpec.configuration.swagger_docs
@output.puts 'Generating Swagger Docs ...'
end
def example_group_finished(notification)
metadata = APIMetadata.new(notification.group.metadata)
return unless metadata.response_example?
swagger_doc = @swagger_docs[metadata.swagger_doc] || @swagger_docs.values.first
swagger_doc.deep_merge!(metadata.swagger_data)
end
def stop(notification)
@swagger_docs.each do |url_path, doc|
file_path = File.join(@swagger_root, url_path)
File.open(file_path, 'w') do |file|
file.write(JSON.pretty_generate(doc))
end
end
@output.puts 'Swagger Doc generated'
end
end
end
end