Betterdocs API Documentation
============================
[![Code Climate](https://codeclimate.com/repos/51128561f3ea0022cc027f31/badges/2a9719de54628d821871/gpa.png)](https://codeclimate.com/repos/51128561f3ea0022cc027f31/feed)
DESCRIPTION
-----------
This library can be used to document a Rails-based API.
LICENSE
-------
Apache License Version 2.0, see also the COPYING file.
USAGE EXAMPLES
--------------
These are some examples. Note that they are neither complete, nor work out of the box.
This api generator requires that you follow the [representer pattern](http://nicksda.apotomo.de/2011/12/ruby-on-rest-introducing-the-representer-pattern/) to decorate the objects you want to render. Betterdocs comes with it's own representer support baked in.
## Controller
class ThingsController < ApplicationController
# :nocov: Documentation
doc :action do
section :things_list
title 'A List of things ⇄ [Details](things_details.md)'
description to <<-end
This action shows a list of things. **Markdown** can be used.
end
param :order do
description to <<-end
Optional parameter to order the list.
end
required no
value 'created_at:ASC'
end
response do
generate_fake_result_with_representer
end
end
# :nocov:
def index
render json: real_result_with_representer
end
# :nocov: Documentation
doc :action do
section :things_details
title 'Things Details ⇄ [List](things_list.md)'
description to <<-end
The details of a thing. You must give an id for the thing
end
param :thing_id do
description 'The id of the thing you want to see. Required.'
required yes # this is the default
value 38
end
response do
generate_fake_details_response_with_representer
end
end
# :nocov:
def show
render json: real_result_with_representer
end
end
## Representer
Betterdocs comes with its own representer class. It is not documented
yet but works kind of like [ROAR](https://github.com/apotonick/roar).
module ThingsRepresenter
extend ActiveSupport::Concern
include Betterdocs::Representer
property :microfleem_count, if: -> { has_microfleems? }, as: :number_of_fleems do
description 'If we have microfleems, return the count'
types Integer
example '5000'
end
property :title, as: :name do
description to <<-end
Represent the internal field "title" as the name of the thing
end
types String
example 'my_name'
end
link :self do
description to <<-end
Link to this resource itself
(things details)
end
url { thing_url(id) }
end
end
AUTHORS
-------
Florian Frank
TODO
----
- Implement some kind of scheme for versioning or at least better commit messages;
we also may want to keep other peoples commits if possible (how?).
- Refactor configuration to avoid singleton antipattern
- Create method in generator that considers a given string to be markdown
formatted and compiles it to html (as a work around to put multiline
descriptions inside of html tables in a markdown)
- Display enums as possible values in representers
- Automatically document error result documents
- Use private flag action/controller to skip docu creation by default. Make it
configurable to create private API as well.