/
fogbugz_listener.rb
56 lines (47 loc) · 1.23 KB
/
fogbugz_listener.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class FogbugzListener
attr_reader :options
def initialize(options={})
@options = options
@state = :invalid
@actions = Hash.new {|h, k| h[k] = Array.new}
end
def fix
@state = :fix
end
def implement
@state = :implement
end
def reopen
@state = :reopen
end
def close
@state = :close
end
def reference
@state = :reference
end
def case(bugid)
@actions[@state] << bugid
end
def update_fogbugz(service)
message = options[:message].dup
references = @actions.delete(:reference)
message << "\n"
if @actions.empty? then
message << "\nCommit: #{options[:sha1]}"
message << "\n#{options[:commit_url]}" if options[:commit_url]
references.each do |bugid|
service.append_message(:case => bugid, :message => message)
end
else
message << "\nReferences " << references.map {|bugid| "case #{bugid}"}.join(", ") if references && !references.empty?
message << "\nCommit: #{options[:sha1]}"
message << "\n#{options[:commit_url]}" if options[:commit_url]
@actions.each_pair do |action, bugids|
bugids.each do |bugid|
service.send(action, :case => bugid, :message => message)
end
end
end
end
end