From 4328ba8649bca93ab534d57fd68604abee132f85 Mon Sep 17 00:00:00 2001
From: Sven Fuchs <me@svenfuchs.com>
Date: Fri, 5 Oct 2012 03:31:53 +0200
Subject: [PATCH] adapt services changes from travis-core

---
 Gemfile.lock                                | 10 ++++-----
 lib/travis/api/app.rb                       |  2 +-
 lib/travis/api/app/endpoint.rb              |  2 +-
 lib/travis/api/app/endpoint/artifacts.rb    |  2 +-
 lib/travis/api/app/endpoint/builds.rb       | 23 ++++++++++++++++-----
 lib/travis/api/app/endpoint/jobs.rb         |  2 +-
 lib/travis/api/app/endpoint/repositories.rb |  4 ++--
 lib/travis/api/app/endpoint/workers.rb      |  4 ++++
 lib/travis/api/app/helpers/services.rb      | 19 ++++++++++++++---
 spec/integration/routes.backup.rb           |  4 +++-
 10 files changed, 52 insertions(+), 20 deletions(-)

diff --git a/Gemfile.lock b/Gemfile.lock
index abfddfe2..f8f71096 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -40,7 +40,7 @@ GIT
 
 GIT
   remote: git://github.com/travis-ci/travis-core.git
-  revision: c40cee1a6d66d0cc18034e6e5e90c335349ead97
+  revision: 6be27b79c655f49eaa1468f9156bebdafdb85e52
   branch: sf-travis-api
   specs:
     travis-core (0.0.1)
@@ -62,7 +62,7 @@ GIT
 
 GIT
   remote: git://github.com/travis-ci/travis-support.git
-  revision: 06844d2db558d88be775ca1cf9cfff8ec36120fb
+  revision: c51ef116f38e5192171112f347f9a2ba050fe636
   specs:
     travis-support (0.0.1)
 
@@ -137,7 +137,7 @@ GEM
     i18n (0.6.1)
     journey (1.0.4)
     json (1.7.5)
-    listen (0.5.2)
+    listen (0.5.3)
     mail (2.4.4)
       i18n (>= 0.4.0)
       mime-types (~> 1.16)
@@ -148,7 +148,7 @@ GEM
       avl_tree (~> 1.1.2)
       hitimes (~> 1.1)
     mime-types (1.19)
-    mocha (0.12.5)
+    mocha (0.12.6)
       metaclass (~> 0.0.1)
     multi_json (1.3.6)
     multipart-post (1.1.5)
@@ -157,7 +157,7 @@ GEM
     newrelic_rpm (3.3.5)
     pg (0.13.2)
     polyglot (0.3.3)
-    postmark (0.9.12)
+    postmark (0.9.13)
       json
       rake
     postmark-rails (0.4.1)
diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index 9a871ea9..03535933 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -83,7 +83,7 @@ class Travis::Api::App
     def self.setup_travis
       Travis::Amqp.config = Travis.config.amqp
       Travis::Database.connect
-      # Travis::Services.namespace = Travis::Services
+      Travis.services = Travis::Services
     end
 
     def self.load_endpoints
diff --git a/lib/travis/api/app/endpoint.rb b/lib/travis/api/app/endpoint.rb
index c8a51d3e..4f3aa391 100644
--- a/lib/travis/api/app/endpoint.rb
+++ b/lib/travis/api/app/endpoint.rb
@@ -9,7 +9,7 @@ class Travis::Api::App
     set(:prefix) { "/" << name[/[^:]+$/].underscore }
     set disable_root_endpoint: false
     register :scoping
-    helpers :current_user
+    helpers :current_user, :services
 
     # TODO hmmm?
     before { content_type :json }
diff --git a/lib/travis/api/app/endpoint/artifacts.rb b/lib/travis/api/app/endpoint/artifacts.rb
index b28082f2..eb86fca2 100644
--- a/lib/travis/api/app/endpoint/artifacts.rb
+++ b/lib/travis/api/app/endpoint/artifacts.rb
@@ -7,7 +7,7 @@ class Travis::Api::App
     class Artifacts < Endpoint
       # Fetches an artifact by it's *id*.
       get '/:id' do |id|
-        respond_with one(params).run
+        respond_with one(params).run || not_found
       end
     end
   end
diff --git a/lib/travis/api/app/endpoint/builds.rb b/lib/travis/api/app/endpoint/builds.rb
index c1085a4e..ba534edd 100644
--- a/lib/travis/api/app/endpoint/builds.rb
+++ b/lib/travis/api/app/endpoint/builds.rb
@@ -7,14 +7,27 @@ class Travis::Api::App
         respond_with all(params).run
       end
 
-      # get '/:owner_name/:name/builds' do       # v1
-      # get '/repos/:owner_name/:name/builds' do # v2
+      get '/:id' do
+        respond_with one(params).run || not_found
+      end
+
+      # get '/repositories/:repository_id/builds' do   # v1
+      # get '/repos/:repository_id/builds' do          # v2
       #   respond_with all(params).run
       # end
 
-      get '/:id' do
-        respond_with one(params).run
-      end
+      # get '/repositories/:repository_id/builds/1' do # v1
+      #   respond_with all(params).run
+      # end
+
+      # get '/:owner_name/:name/builds' do             # v1
+      # get '/repos/:owner_name/:name/builds' do       # v2
+      #   respond_with all(params).run
+      # end
+
+      # get '/:owner_name/:name/builds/:id' do         # v1
+      #   respond_with all(params).run
+      # end
     end
   end
 end
diff --git a/lib/travis/api/app/endpoint/jobs.rb b/lib/travis/api/app/endpoint/jobs.rb
index 4fde229d..edf22132 100644
--- a/lib/travis/api/app/endpoint/jobs.rb
+++ b/lib/travis/api/app/endpoint/jobs.rb
@@ -8,7 +8,7 @@ class Travis::Api::App
       end
 
       get '/:id' do
-        respond_with one(params).run
+        respond_with one(params).run || not_found
       end
     end
   end
diff --git a/lib/travis/api/app/endpoint/repositories.rb b/lib/travis/api/app/endpoint/repositories.rb
index 62391a5d..4eb214cf 100644
--- a/lib/travis/api/app/endpoint/repositories.rb
+++ b/lib/travis/api/app/endpoint/repositories.rb
@@ -8,12 +8,12 @@ class Travis::Api::App
       end
 
       get '/:id' do
-        respond_with one(params).run
+        respond_with one(params).run || not_found
       end
 
       # TODO the format constraint neither seems to work nor fail?
       get '/:id/cc.:format', format: 'xml' do # v1
-        respond_with one(params).run
+        respond_with one(params).run || not_found
       end
 
       # get '/:owner_name/:name.?:format?' do       # v1
diff --git a/lib/travis/api/app/endpoint/workers.rb b/lib/travis/api/app/endpoint/workers.rb
index 7a17a6e2..22a4af9d 100644
--- a/lib/travis/api/app/endpoint/workers.rb
+++ b/lib/travis/api/app/endpoint/workers.rb
@@ -6,6 +6,10 @@ class Travis::Api::App
       get '/' do
         respond_with all(params).run
       end
+
+      get '/:id' do
+        respond_with one(params).run || not_found
+      end
     end
   end
 end
diff --git a/lib/travis/api/app/helpers/services.rb b/lib/travis/api/app/helpers/services.rb
index b116323e..9b5bafab 100644
--- a/lib/travis/api/app/helpers/services.rb
+++ b/lib/travis/api/app/helpers/services.rb
@@ -3,10 +3,23 @@ require 'travis/api/app'
 class Travis::Api::App
   module Helpers
     module Services
-      def service(key, user = current_user)
-        const = Travis.services[key] || raise("no service registered for #{key}")
-        const.new(user)
+      def all(params)
+        service(services_namespace, :all, params)
       end
+
+      def one(params)
+        service(services_namespace, :one, params)
+      end
+
+      def update(params)
+        service(services_namespace, :update, params)
+      end
+
+      private
+
+        def services_namespace
+          self.class.name.split('::').last
+        end
     end
   end
 end
diff --git a/spec/integration/routes.backup.rb b/spec/integration/routes.backup.rb
index 8808baf2..6ca53cb2 100644
--- a/spec/integration/routes.backup.rb
+++ b/spec/integration/routes.backup.rb
@@ -1,6 +1,8 @@
   # api = lambda do
   #   constraints :format => 'json' do
-  #     resources :repositories, :only => [:index, :show]
+  #     resources :repositories, :only => [:index, :show] do
+  #       resources :builds,     :only => [:index, :show]
+  #     end
   #     resources :builds,       :only => [:index, :show]
   #     resources :branches,     :only => :index
   #     resources :jobs,         :only => [:index, :show]