From 35597f61aabc613e8b64c8f8e66999f8f3b3a8a6 Mon Sep 17 00:00:00 2001 From: Johannes Becker Date: Wed, 25 Sep 2013 00:56:25 +0200 Subject: Simple PivotalTracker Source Commits Service --- app/models/pivotaltracker_service.rb | 57 ++++++++++++++++++++++++++++++++++++ app/models/project.rb | 3 +- 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 app/models/pivotaltracker_service.rb diff --git a/app/models/pivotaltracker_service.rb b/app/models/pivotaltracker_service.rb new file mode 100644 index 00000000000..eb7ea5f2113 --- /dev/null +++ b/app/models/pivotaltracker_service.rb @@ -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 diff --git a/app/models/project.rb b/app/models/project.rb index f4d915179e8..63cd3505ec4 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -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? -- cgit v1.2.1 From 435a5ff8a1774c6feb2a683371ada0804318af11 Mon Sep 17 00:00:00 2001 From: Johannes Becker Date: Wed, 25 Sep 2013 01:09:33 +0200 Subject: Remove not needed attr_accessible --- app/models/pivotaltracker_service.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/models/pivotaltracker_service.rb b/app/models/pivotaltracker_service.rb index eb7ea5f2113..4efdafa9791 100644 --- a/app/models/pivotaltracker_service.rb +++ b/app/models/pivotaltracker_service.rb @@ -15,8 +15,6 @@ class PivotaltrackerService < Service include HTTParty - attr_accessible :subdomain, :room - validates :token, presence: true, if: :activated? def title -- cgit v1.2.1 From 64e012a378b657efd44fb7570e0924dfed64e008 Mon Sep 17 00:00:00 2001 From: Johannes Becker Date: Wed, 25 Sep 2013 16:49:39 +0200 Subject: Added spinach Tests for pivotaltracker service --- features/project/service.feature | 6 ++++++ features/steps/project/project_services.rb | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/features/project/service.feature b/features/project/service.feature index 6bb0c3e2c57..e685c385d1d 100644 --- a/features/project/service.feature +++ b/features/project/service.feature @@ -18,3 +18,9 @@ Feature: Project Services And I click hipchat service link And I fill hipchat settings Then I should see hipchat service settings saved + + Scenario: Activate pivotaltracker service + When I visit project "Shop" services page + And I click pivotaltracker service link + And I fill pivotaltracker settings + Then I should see pivotaltracker service settings saved diff --git a/features/steps/project/project_services.rb b/features/steps/project/project_services.rb index 10feb8ea8be..a24100ff8c0 100644 --- a/features/steps/project/project_services.rb +++ b/features/steps/project/project_services.rb @@ -44,4 +44,18 @@ class ProjectServices < Spinach::FeatureSteps find_field('Room').value.should == 'gitlab' end + + And 'I click pivotaltracker service link' do + click_link 'PivotalTracker' + end + + And 'I fill pivotaltracker settings' do + check 'Active' + fill_in 'Token', with: 'verySecret' + click_button 'Save' + end + + Then 'I should see pivotaltracker service settings saved' do + find_field('Token').value.should == 'verySecret' + end end -- cgit v1.2.1 From fa8588827e45946464298fb7e36f4dcd24f0c4fb Mon Sep 17 00:00:00 2001 From: Johannes Becker Date: Wed, 25 Sep 2013 16:54:34 +0200 Subject: Syntax cleanup --- app/models/pivotaltracker_service.rb | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/app/models/pivotaltracker_service.rb b/app/models/pivotaltracker_service.rb index 4efdafa9791..f28e142da77 100644 --- a/app/models/pivotaltracker_service.rb +++ b/app/models/pivotaltracker_service.rb @@ -38,18 +38,22 @@ class PivotaltrackerService < Service 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} - ) + message = { + 'source_commit' => { + 'commit_id' => commit[:id], + 'author' => commit[:author][:name], + 'url' => commit[:url], + 'message' => commit[:message] + } + } + PivotaltrackerService.post( + url, + body: message.to_json, + headers: { + 'Content-Type' => 'application/json', + 'X-TrackerToken' => token + } + ) end end - end -- cgit v1.2.1