2013-05-23 18:10:32 +00:00
# == 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
2014-04-09 12:05:03 +00:00
# created_at :datetime
# updated_at :datetime
2013-05-23 18:10:32 +00:00
# active :boolean default(FALSE), not null
# project_url :string(255)
2013-06-19 12:40:33 +00:00
# subdomain :string(255)
# room :string(255)
2014-04-09 12:05:03 +00:00
# recipients :text
2014-02-18 23:09:16 +00:00
# api_key :string(255)
2013-05-23 18:10:32 +00:00
#
class HipchatService < Service
validates :token , presence : true , if : :activated?
def title
'Hipchat'
end
def description
2013-11-20 12:05:42 +00:00
'Private group chat and IM'
2013-05-23 18:10:32 +00:00
end
def to_param
'hipchat'
end
def fields
[
{ type : 'text' , name : 'token' , placeholder : '' } ,
{ type : 'text' , name : 'room' , placeholder : '' }
]
end
def execute ( push_data )
2014-02-12 07:27:00 +00:00
gate [ room ] . send ( 'GitLab' , create_message ( push_data ) )
2013-05-23 18:10:32 +00:00
end
private
def gate
@gate || = HipChat :: Client . new ( token )
end
def create_message ( push )
ref = push [ :ref ] . gsub ( " refs/heads/ " , " " )
before = push [ :before ]
after = push [ :after ]
message = " "
message << " #{ push [ :user_name ] } "
if before =~ / 000000 /
message << " pushed new branch <a href= \" #{ project . web_url } /commits/ #{ ref } \" > #{ ref } </a> to <a href= \" #{ project . web_url } \" > #{ project . name_with_namespace . gsub! ( / \ s / , '' ) } </a> \n "
elsif after =~ / 000000 /
message << " removed branch #{ ref } from <a href= \" #{ project . web_url } \" > #{ project . name_with_namespace . gsub! ( / \ s / , '' ) } </a> \n "
else
2014-01-14 09:57:10 +00:00
message << " pushed to branch <a href= \" #{ project . web_url } /commits/ #{ ref } \" > #{ ref } </a> "
2013-05-23 18:10:32 +00:00
message << " of <a href= \" #{ project . web_url } \" > #{ project . name_with_namespace . gsub! ( / \ s / , '' ) } </a> "
message << " (<a href= \" #{ project . web_url } /compare/ #{ before } ... #{ after } \" >Compare changes</a>) "
for commit in push [ :commits ] do
message << " <br /> - #{ commit [ :message ] } (<a href= \" #{ commit [ :url ] } \" > #{ commit [ :id ] [ 0 .. 5 ] } </a>) "
end
end
message
end
2013-06-19 12:40:33 +00:00
end