/lazy_api_doc

Primary LanguageRubyMIT LicenseMIT

LazyApiDoc

A library to generate OpenAPI V3 documentation from tests. Try out the results here.

LazyApiDoc collects requests and responses from your controller and request specs, retrieves data types, optional attributes, endpoint description and then generates OpenAPI documentation.

screenshot

Installation

Add this line to your application's Gemfile:

gem 'lazy_api_doc', require: false, group: :test

And then execute:

$ bundle install

Or install it yourself as:

$ gem install lazy_api_doc

Then run install task

$ rails g lazy_api_doc:install

Configuration

You can customize LazyApiDoc behavior using config file or environment variables.

# config/lazy_api_doc.yml

# base directory for storing layout files and generated documentation
path: 'doc/lazy_api_doc' # ENV['LAZY_API_DOC_PATH'] default: 'public/lazy_api_doc'

# TTL for files generated by running tests in different processes (ParallelTest). Each process generates a file.
# After all the processes are done one of them collects all example files and generates the documentation. In case 
# when the example files were not deleted before running the tests, old files will be ignored.
example_file_ttl: 1800 # ENV['LAZY_API_DOC_EXAMPLE_FILE_TTL'] default: 1800 (30 minutes)

Usage

Update files public/lazy_api_doc/index.html and public/lazy_api_doc/layout.yml. These files will be used as templates to show the documentation. You need to set your application name, description and so on.

And just run your tests with DOC=true environment variable:

$ LAZY_API_DOC=true rspec

or

# LAZY_API_DOC=true rake test

The documentation will be placed public/lazy_api_doc/api.yml. To see it just run server

$ rails server

and navigate to http://localhost:3000/lazy_api_doc/

How does it work under the hood?

LazyApiDoc gathers your test requests and responses, group them by controllers and actions that were affected, and tries to guess the type of every field.

user: {
 id: 1, // Integer
 name: "John Doe", // String,
 created_at: "2020-05-17 20:15:47Z -0400" // DateTime
}

After that, it just builds an OpenAPI specification based on it.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/bguban/lazy_api_doc. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the LazyApiDoc project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.