Project

skeleton

0.0
No commit activity in last 3 years
No release in over 3 years
Construct an api skeleton for options
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Skeleton

Was born from the desire for api documentation that can live along side actively running code.

Example

# You would put this somewhere such as config/initializers/skeleton.rb
Skeleton.configure do |config|
  config.define do |structure|
    structure.host = 'api.example.com'
    structure.base_path = '/foo'

    structure.schemes = %w(https)
    structure.consumes = %(application/json)
    structure.produces = %(application/json)
  end

  config.info do |info|
    info.version = '1.0.6'
    info.title = 'An Example API'
    info.description = 'An api to interact with data'
    info.terms_of_service = 'https://api.example.com/terms/'
  end

  config.contact do |contact|
    contact.name = 'WarmWaffles'
    contact.email = 'warmwaffles@gmail.com'
    contact.url = 'https://github.com/warmwaffles/skeleton'
  end

  config.license do |license|
    license.name = 'MIT'
  end
end

Inside of your rails controller you would do the following

class ApplicationController < ActionController::Base
  include Skeleton::Helpers::ControllerHelpers
end

Inside a controller that you wish to document do the following

class AccountsController < ApplicationController
  define_api_path('/accounts') do |path|
    path.get do |operation|
      operation.tag('account')
      operation.description = 'List all of the accounts available to you'

      operation.parameter(:query, 'limit') do |p|
        p.description = 'maximum number of results to return'
        p.type = 'integer'
        p.format = 'int32'
        p.required = false
      end
      operation.parameter(:query, 'offset') do |p|
        p.description = 'offset within the results returned'
        p.type = 'integer'
        p.format = 'int32'
        p.required = false
      end
    end
  end

  define_api_path('/accounts/{account_id}') do |path|
    path.get do |operation|
      operation.tag('account')
      operation.description = 'Get an account'
      operation.parameter(:query, 'account_id') do |p|
        p.description = 'The account id'
        p.type = 'string'
        p.format = 'uuid'
        p.required = true
      end
    end

    path.options do |operation|
      operation.tag('account')
      operation.description = 'Show available options for the account'
      operation.parameter(:query, 'account_id') do |p|
        p.description = 'The account id'
        p.type = 'string'
        p.format = 'uuid'
        p.required = true
      end
    end
  end
end

If you want to dump the documentation to swagger you can simply do the following:

class DocumentationController < ApplicationController
  def swagger
    respond_to do |format|
      format.json do
        render(json: Skeleton.config.to_swagger_json, status: 200)
      end
    end
  end
end

Testing

We are using MiniTest in order to write tests. Please follow this guideline:

  • If the test is not a unit test, it belongs under spec
  • If the test is a unit test, it belongs under test
  • Test to the best you can
rake test

Contributing

  • Fork this repo
  • Do work on a separate branch
  • Submit a pull request
  • Drink a beer