travis-api/lib/travis/api/app/endpoint.rb
2012-09-28 16:54:29 +02:00

35 lines
1.0 KiB
Ruby

require 'travis/api/app'
require 'addressable/uri'
class Travis::Api::App
# Superclass for HTTP endpoints. Takes care of prefixing.
class Endpoint < Responder
set(:prefix) { "/" << name[/[^:]+$/].underscore }
set disable_root_endpoint: false
register :scoping, :services
helpers :services, :current_user
before { content_type :json }
error(ActiveRecord::RecordNotFound, Sinatra::NotFound) { not_found }
not_found { content_type =~ /json/ ? { 'file' => 'not found' } : 'file not found' }
private
def redis
Thread.current[:redis] ||= ::Redis.connect(url: Travis.config.redis.url)
end
def endpoint(link, query_values = {})
link = url(File.join(env['travis.global_prefix'], link), true, false)
uri = Addressable::URI.parse(link)
query_values = query_values.merge(uri.query_values) if uri.query_values
uri.query_values = query_values
uri.to_s
end
def safe_redirect(url)
redirect(endpoint('/redirect', to: url), 301)
end
end
end