travis-api/lib/travis/api/app/responders/service.rb
2012-10-24 20:49:06 +02:00

55 lines
1.5 KiB
Ruby

module Travis::Api::App::Responders
class Service < Base
def apply?
resource.respond_to?(:run)
end
def apply
cache_control
result = normalize(resource.run)
result[:flash] = resource.messages if result && resource.respond_to?(:messages) # TODO should rather happen in the JSON responder, no?
result
end
private
def cache_control
if final?
mode = endpoint.public? ? :public : :private
endpoint.expires(31536000, mode, :must_revalidate) # 1 year
else
# FIXME: Chrome WTF?
endpoint.cache_control :no_cache
end
endpoint.etag resource.cache_key if cache_key?
endpoint.last_modified resource.updated_at if updated_at?
end
def final?
resource.respond_to?(:final?) && resource.final?
end
def updated_at?
resource.respond_to?(:updated_at) && resource.updated_at
end
def cache_key?
resource.respond_to?(:cache_key) && resource.cache_key
end
# Services potentially return all sorts of things
# If it's a string, true or false we'll wrap it into a hash.
# If it's an active record or scope we just pass so it can be processed by the json responder.
# If it's nil we also pass it but yield not_found.
def normalize(result)
case result
when String, true, false
{ result: result }
else
result
end
end
end
end