Hovercraft
Generate a RESTful API from a directory of ActiveRecord models.
Short Disclaimer
I am not yet running this in production and the gem is not very extensible at this point. Consider it a proof of concept.
Get Up and Running
- Throw this in your Gemfile:
gem 'hovercraft'
- Put your ActiveRecord models in
models/
(make sure the file names are the same as the class names).
Here's an example:
# models/employee.rb
class Employee < ActiveRecord::Base
attr_accessible :name, :career
end
If you need help setting up an entire sinatra app here's a full example: http://github.com/vanstee/hovercraft_example
- Create a rackup file that generates the application:
# config.ru
require 'bundler'
Bundler.require
run Hovercraft::Server.new
If you need more setup I'd recommend using an application.rb
file
and requiring that in the config.ru
instead.
- Run the application like normal:
bundle exec rackup
- Make some requests:
Create a record:
curl -H 'Content-type: application/json' \
-X POST \
-d '{ "employee": { "name": "Philip J. Fry", "career": "Delivery Boy 1st Class" } }' \
http://localhost:9292/employees.json
Show all records:
curl http://localhost:9292/employees.json
Show a single record:
curl http://localhost:9292/employees/1.json
Update a record:
curl -H "Content-type: application/json" \
-X PUT \
-d '{ "employee": { "name": "Philip J. Fry", "career": "Executive Delivery Boy" } }' \
http://localhost:9292/employees/1.json
Delete a record:
curl -X DELETE http://localhost:9292/employees/1.json
Authentication
- Include
warden
in your Gemfile:
gem 'warden'
- Use rack builder to add warden strategies to your rackup file:
# config.ru
require 'bundler'
Bundler.require
application = Rack::Builder.new do
use Rack::Session::Cookie, secret: '...'
Warden::Strategies.add :password do
def valid?
...
end
def authenticate
...
end
end
use Warden::Manager do |manager|
manager.default_strategies :password
manager.failure_app = ...
end
run Hovercraft::Server
end
run application
See the warden project for more in-depth examples or help troubleshooting.
Give Back
- Fork it:
https://help.github.com/articles/fork-a-repo
- Create your feature branch:
git checkout -b fixes_horrible_spelling_errors
- Commit your changes:
git commit -am 'Really? You spelled application as "applickachon"?'
- Push the branch:
git push origin fixes_horrible_spelling_errors
- Create a pull request: