OSDN Git Service

Simple PivotalTracker Source Commits Service
authorJohannes Becker <jb@jbecker.it>
Tue, 24 Sep 2013 22:56:25 +0000 (00:56 +0200)
committerJohannes Becker <jb@jbecker.it>
Tue, 24 Sep 2013 22:56:25 +0000 (00:56 +0200)
app/models/pivotaltracker_service.rb [new file with mode: 0644]
app/models/project.rb

diff --git a/app/models/pivotaltracker_service.rb b/app/models/pivotaltracker_service.rb
new file mode 100644 (file)
index 0000000..eb7ea5f
--- /dev/null
@@ -0,0 +1,57 @@
+# == 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
+#
+
+class PivotaltrackerService < Service
+  include HTTParty
+
+  attr_accessible :subdomain, :room
+
+  validates :token, presence: true, if: :activated?
+
+  def title
+    'PivotalTracker'
+  end
+
+  def description
+    'Project Management Software (Source Commits Endpoint)'
+  end
+
+  def to_param
+    'pivotaltracker'
+  end
+
+  def fields
+    [
+      { type: 'text', name: 'token', placeholder: '' }
+    ]
+  end
+
+  def execute(push)
+    url = 'https://www.pivotaltracker.com/services/v5/source_commits'
+    push[:commits].each do |commit|
+      message = {'source_commit' =>
+                  {'commit_id' => commit[:id],
+                   'author' => commit[:author][:name],
+                   'url' => commit[:url],
+                   'message' => commit[:message]}
+                }
+      status = PivotaltrackerService.post(url,
+                     body: message.to_json,
+                     headers: {'Content-Type' => 'application/json',
+                               'X-TrackerToken' => token}
+                    )
+    end
+  end
+
+end
index f4d9151..63cd350 100644 (file)
@@ -46,6 +46,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 :pivotaltracker_service, dependent: :destroy
   has_one :hipchat_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
@@ -220,7 +221,7 @@ class Project < ActiveRecord::Base
   end
 
   def available_services_names
-    %w(gitlab_ci campfire hipchat)
+    %w(gitlab_ci campfire hipchat pivotaltracker)
   end
 
   def gitlab_ci?