# Hyperdrive [![Gem Version](https://badge.fury.io/rb/hyperdrive.png)](http://badge.fury.io/rb/hyperdrive) [![Build Status](https://travis-ci.org/styleseek/hyperdrive.svg?branch=master)](https://travis-ci.org/styleseek/hyperdrive) [![Code Climate](https://codeclimate.com/github/styleseek/hyperdrive.png)](https://codeclimate.com/github/styleseek/hyperdrive) [![Test Coverage](https://codeclimate.com/github/styleseek/hyperdrive/coverage.png)](https://codeclimate.com/github/styleseek/hyperdrive) [![Dependency Status](https://gemnasium.com/styleseek/hyperdrive.svg)](https://gemnasium.com/styleseek/hyperdrive) Ruby DSL for defining self-documenting, HATEOAS™ complaint, Hypermedia endpoints. ## Installation Add this line to your application's Gemfile: gem 'hyperdrive' And then execute: $ bundle Or install it yourself as: $ gem install hyperdrive ## Usage Proposed Syntax (WIP): ```ruby # api.rb hyperdrive do resource(:thing) do name 'Thing Resource' desc 'Description of Thing Resource' # Register the params you want to allow in POST, PUT, PATCH, # and DELETE requests. The :id param is auto-registered # and is allowed for all requests but only required for PUT, # PATCH, and DELETE requests param :name, '50 Chars or less' # params are required by default param :start_date, 'Format: YYYY-MM-DD', required: false param :end_date, 'Format: YYYY-MM-DD', required: false # Filters only apply to GET, HEAD and OPTIONS requests # Like allowed params, :id is registered by default. Requests without an ID # should return an array of 1 or more resources (that match any filters # applied). Unlike allowed params, filters are not required by default. filter :start_date, 'Format: YYYY-MM-DD' filter :end_date, 'Format: YYYY-MM-DD' filter :parent_id, 'Parent ID of Thing', required: true # Handle API Requests # # - Simply return a string to be used as the body of the response. How you generate # that string is completely up to you. # - Status Codes and Headers will be handled automatically. # - Any unhandled requests will return a 405 "Method Not Supported" error request(:get) do # retrieve 1-N objects... '{ ... }' end # Options and Head requests will be handled automatically and # will use info from the GET request block you define, as needed. # POST Requests should return the full object that was created during the request. request(:post) do # create the object... '{ ... }' end # PUT Requests should return the full object that was updated during the request. request(:put) do # 'upsert' the object... '{ ... }' end # PATCH requests should return the full object that was updated during the request. request(:patch) do # update the object... '{ ... }' end # DELETE requests should return a simple response indicating success. request(:delete) do # delete the object... '{"deleted":true}' end end end # config.ru run Hyperdrive::Server ``` ## CLI ### Generating Documentation `$ hyperdrive docs