OSDN Git Service

Campfire service added
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Wed, 22 May 2013 14:59:59 +0000 (17:59 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Wed, 22 May 2013 14:59:59 +0000 (17:59 +0300)
CHANGELOG
app/controllers/services_controller.rb
app/models/campfire_service.rb [new file with mode: 0644]
app/models/project.rb

index f21a9e8..99529d6 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+v 5.3.0
+  - Refactored services 
+  - Campfire service added
+
 v 5.2.0
   - Turbolinks
   - Git over http with ldap credentials
index 69bc607..fcfc4c8 100644 (file)
@@ -7,7 +7,7 @@ class ServicesController < ProjectResourceController
 
   def index
     @project.build_missing_services
-    @services = @project.services
+    @services = @project.services.reload
   end
 
   def edit
diff --git a/app/models/campfire_service.rb b/app/models/campfire_service.rb
new file mode 100644 (file)
index 0000000..6450ffe
--- /dev/null
@@ -0,0 +1,76 @@
+# == Schema Information
+#
+# Table name: services
+#
+#  id          :integer          not null, primary key
+#  type        :string(255)
+#  title       :string(255)
+#  token       :string(255)
+#  project_id  :integer          not null
+#  created_at  :datetime         not null
+#  updated_at  :datetime         not null
+#  active      :boolean          default(FALSE), not null
+#  project_url :string(255)
+#
+
+class CampfireService < Service
+  attr_accessible :subdomain, :room
+
+  validates :token, presence: true, if: :activated?
+
+  def title
+    'Campfire'
+  end
+
+  def description
+    'Simple web-based real-time group chat'
+  end
+
+  def to_param
+    'campfire'
+  end
+
+  def fields
+    [
+      { type: 'text', name: 'token',     placeholder: '' },
+      { type: 'text', name: 'subdomain', placeholder: '' },
+      { type: 'text', name: 'room',      placeholder: '' }
+    ]
+  end
+
+  def execute(push_data)
+    room = gate.find_room_by_name(self.room)
+    return true unless room
+
+    message = build_message(push_data)
+
+    room.speak(message)
+  end
+
+  private
+
+  def gate
+    @gate ||= Tinder::Campfire.new(subdomain, token: token)
+  end
+
+  def build_message(push)
+    ref = push[:ref].gsub("refs/heads/", "")
+    before = push[:before]
+    after = push[:after]
+
+    message = ""
+    message << "[#{project.name_with_namespace}] "
+    message << "#{push[:user_name]} "
+
+    if before =~ /000000/
+      message << "pushed new branch #{ref} \n"
+    elsif after =~ /000000/
+      message << "removed branch #{ref} \n"
+    else
+      message << "pushed #{push[:total_commits_count]} commits to #{ref}. "
+      message << "#{project.web_url}/compare/#{before}...#{after}"
+    end
+
+    message
+  end
+end
index cee6dcc..f214eeb 100644 (file)
@@ -45,6 +45,7 @@ class Project < ActiveRecord::Base
 
   has_one :last_event, class_name: 'Event', order: 'events.created_at DESC', foreign_key: 'project_id'
   has_one :gitlab_ci_service, dependent: :destroy
+  has_one :campfire_service, dependent: :destroy
   has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id"
   has_one :forked_from_project, through: :forked_project_link
 
@@ -235,7 +236,7 @@ class Project < ActiveRecord::Base
   end
 
   def available_services_names
-    %w(gitlab_ci)
+    %w(gitlab_ci campfire)
   end
 
   def gitlab_ci?