Project

betterdocs

0.0
A long-lived project that still receives updates
This library provides tools to generate API documention for a web site's REST-ful JSON API.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.17.1
>= 0
>= 0
>= 0

Runtime

>= 0
>= 3, < 8
~> 1.3, >= 1.3.5
 Project Readme

Betterdocs API Documentation

Code Climate

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 to decorate the objects you want to render. Betterdocs comes with it's own representer support baked in.

Controller

betterdocs comes with a DSL for the (Rails) controllers - see examples below.

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.

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

  # Add a link to the links list in the resulting JSON.
  link :self do
    description to <<-end
      Link to this resource itself
      (<a href="opinion_details.md">things details</a>)
    end
    url { thing_url(id) }
  end
end

GENERATING

rake doc:api:push will push the documentation onto a git branch. rake doc:api:swagger will call Swagger.

RELEASING

Edit Rakefile and VERSION and run rake (because we use gemhadar). Commit changes, run rake gem:push and git push --tags.

AUTHORS

Florian Frank flori@ping.de

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.