The public Travis API
![]() In order to protect us from rendering a resource simply converted to json, without processing it with API data class, this commit changes JSON responder behavior to render 404 if we can't find associated data class. The only exception to that rule is when resource is already a Hash, meaning that it was processed before - we sometimes return for example simple Hash responses like { result: true }. The Hash exception could allow to accidentally pass resource.as_json to responder, but in travis-ci/travis-support@124b8b6 I disabled default as_json method on AR::Base classes, so the risk of such mistake is lowered. |
||
---|---|---|
config | ||
docs | ||
lib/travis/api | ||
public/images/result | ||
script | ||
spec | ||
.buildpacks | ||
.gitignore | ||
.travis.yml | ||
config.ru | ||
CONTRIBUTING.md | ||
Gemfile | ||
Gemfile.lock | ||
Procfile | ||
Rakefile | ||
README.md | ||
travis-api.gemspec |
The public Travis API
This is the app running on https://api.travis-ci.org/
Installation
Setup:
$ bundle install
Run tests:
$ RAILS_ENV=test rake db:create db:schema:load
$ rake spec
Run the server:
$ rake db:create db:schema:load
$ foreman start
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
API documentation
We use source code comments to add documentation. If the server is running, you
can browse an HTML documenation at /docs
.
Project architecture
lib
`-- travis
`-- api
`-- app
|-- endpoint # API endpoints
|-- extensions # Sinatra extensions
|-- helpers # Sinatra helpers
`-- middleware # Rack middleware
Classes inheriting from Endpoint
or Middleware
, they will automatically be
set up properly.
Each endpoint class gets mapped to a prefix, which defaults to the snake-case
class name (i.e. Travis::Api::App::Profile
will map to /profile
).
It can be overridden by setting :prefix
:
require 'travis/api/app'
class Travis::Api::App
class MyRouts < Endpoint
set :prefix, '/awesome'
end
end