From 2dae0e18e09132c0db32c8646d8d11b30cfcb83f Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Wed, 4 Jan 2012 00:42:14 +0200
Subject: [PATCH] web hooks scaffold started

---
 app/controllers/hooks_controller.rb        | 43 ++++++++++++++++++++++
 app/controllers/projects_controller.rb     |  2 +-
 app/controllers/repositories_controller.rb |  2 +-
 app/models/user.rb                         |  1 +
 app/models/web_hook.rb                     | 11 ++++++
 app/views/hooks/index.html.haml            | 10 +++++
 app/workers/post_receive.rb                |  2 +
 config/routes.rb                           |  6 ++-
 spec/models/user_spec.rb                   |  1 +
 spec/models/web_hook_spec.rb               | 11 ++++++
 10 files changed, 85 insertions(+), 4 deletions(-)
 create mode 100644 app/controllers/hooks_controller.rb
 create mode 100644 app/views/hooks/index.html.haml

diff --git a/app/controllers/hooks_controller.rb b/app/controllers/hooks_controller.rb
new file mode 100644
index 00000000000..70516dacf72
--- /dev/null
+++ b/app/controllers/hooks_controller.rb
@@ -0,0 +1,43 @@
+class HooksController < ApplicationController
+  before_filter :authenticate_user!
+  before_filter :project
+  layout "project"
+
+  # Authorize
+  before_filter :add_project_abilities
+  before_filter :authorize_read_project!
+  before_filter :authorize_admin_project!, :only => [:new, :create, :destroy]
+
+  respond_to :html
+
+  def index
+    @hooks = @project.web_hooks
+  end
+
+  def new
+    @hook = @project.web_hooks.new
+  end
+
+  def create
+    @hook = @project.web_hooks.new(params[:hook])
+    @hook.author = current_user
+    @hook.save
+
+    if @hook.valid?
+      redirect_to [@project, @hook]
+    else
+      respond_with(@hook)
+    end
+  end
+
+  def show
+    @hook = @project.web_hooks.find(params[:id])
+  end
+
+  def destroy
+    @hook = @project.web_hooks.find(params[:id])
+    @hook.destroy
+
+    redirect_to project_hooks_path(@project)
+  end
+end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 1e859ceac31..29fcb52eb97 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -68,7 +68,7 @@ class ProjectsController < ApplicationController
 
   def show
     return render "projects/empty" unless @project.repo_exists? && @project.has_commits?
-    limit = (params[:limit] || 20).to_i
+    limit = (params[:limit] || 10).to_i
     @activities = @project.cached_updates(limit)
   end
 
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb
index 9a112f4674f..c0652cbeab9 100644
--- a/app/controllers/repositories_controller.rb
+++ b/app/controllers/repositories_controller.rb
@@ -9,7 +9,7 @@ class RepositoriesController < ApplicationController
   layout "project"
 
   def show
-    @activities = @project.fresh_commits(20)
+    @activities = @project.fresh_commits(10)
   end
 
   def branches
diff --git a/app/models/user.rb b/app/models/user.rb
index 8b136de90cf..ee9f0de11ec 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -82,5 +82,6 @@ end
 #  linkedin               :string(255)     default(""), not null
 #  twitter                :string(255)     default(""), not null
 #  authentication_token   :string(255)
+#  dark_scheme            :boolean         default(FALSE), not null
 #
 
diff --git a/app/models/web_hook.rb b/app/models/web_hook.rb
index 0058bd57b91..40b930c3a98 100644
--- a/app/models/web_hook.rb
+++ b/app/models/web_hook.rb
@@ -18,3 +18,14 @@ class WebHook < ActiveRecord::Base
     # There was a problem calling this web hook, let's forget about it.
   end
 end
+# == Schema Information
+#
+# Table name: web_hooks
+#
+#  id         :integer         not null, primary key
+#  url        :string(255)
+#  project_id :integer
+#  created_at :datetime
+#  updated_at :datetime
+#
+
diff --git a/app/views/hooks/index.html.haml b/app/views/hooks/index.html.haml
new file mode 100644
index 00000000000..956367393cb
--- /dev/null
+++ b/app/views/hooks/index.html.haml
@@ -0,0 +1,10 @@
+= render "repositories/head"
+- unless @hooks.empty?
+  %div.update-data.ui-box.ui-box-small
+    .data
+      - @hooks.each do |hook|
+        %a.update-item{:href => project_hooks_path(@project, hook)}
+          %span.update-title{:style => "margin-bottom:0px;"}
+            = hook.url
+- else 
+  %h3 No hooks
diff --git a/app/workers/post_receive.rb b/app/workers/post_receive.rb
index d79f4599d80..922a66ebf86 100644
--- a/app/workers/post_receive.rb
+++ b/app/workers/post_receive.rb
@@ -1,4 +1,6 @@
 class PostReceive
+  @queue = :post_receive
+
   def self.perform(reponame, oldrev, newrev, ref)
     project = Project.find_by_path(reponame)
     return false if project.nil?
diff --git a/config/routes.rb b/config/routes.rb
index 90b391cd5a2..416ea6a9498 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,8 +1,8 @@
 Gitlab::Application.routes.draw do
 
   # Optionally, enable Resque here
-  # require 'resque/server'
-  # mount Resque::Server.new, at: '/info/resque'
+  require 'resque/server'
+  mount Resque::Server.new, at: '/info/resque'
 
   get 'tags'=> 'tags#index'
   get 'tags/:tag' => 'projects#index'
@@ -83,6 +83,8 @@ Gitlab::Application.routes.draw do
         get :commits
       end
     end
+    
+    resources :hooks, :only => [:index, :new, :create, :destroy, :show]
     resources :snippets
     resources :commits
     resources :team_members
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 3a3ac7c9c80..a62e56cdd30 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -65,5 +65,6 @@ end
 #  linkedin               :string(255)     default(""), not null
 #  twitter                :string(255)     default(""), not null
 #  authentication_token   :string(255)
+#  dark_scheme            :boolean         default(FALSE), not null
 #
 
diff --git a/spec/models/web_hook_spec.rb b/spec/models/web_hook_spec.rb
index e73e554adbb..309bfc0fd53 100644
--- a/spec/models/web_hook_spec.rb
+++ b/spec/models/web_hook_spec.rb
@@ -52,3 +52,14 @@ describe WebHook do
     end
   end
 end
+# == Schema Information
+#
+# Table name: web_hooks
+#
+#  id         :integer         not null, primary key
+#  url        :string(255)
+#  project_id :integer
+#  created_at :datetime
+#  updated_at :datetime
+#
+
-- 
GitLab