better support for referencing and closing issues in asana_service.rb
This commit is contained in:
parent
28a8d0b5db
commit
b45ee2c314
2 changed files with 41 additions and 8 deletions
|
@ -98,17 +98,29 @@ automatically inspected. Leave blank to include all branches.'
|
|||
task_list = []
|
||||
close_list = []
|
||||
|
||||
message.split("\n").each do |line|
|
||||
# look for a task ID or a full Asana url
|
||||
task_list.concat(line.scan(/#(\d+)/))
|
||||
task_list.concat(line.scan(/https:\/\/app\.asana\.com\/\d+\/\d+\/(\d+)/))
|
||||
# look for a word starting with 'fix' followed by a task ID
|
||||
close_list.concat(line.scan(/(fix\w*)\W*#(\d+)/i))
|
||||
# matches either:
|
||||
# - #1234
|
||||
# - https://app.asana.com/0/0/1234
|
||||
# optionally preceded with:
|
||||
# - fix/ed/es/ing
|
||||
# - close/s/d
|
||||
# - closing
|
||||
issue_finder = /(fix\w*|clos[ei]\w*+)?\W*(?:https:\/\/app\.asana\.com\/\d+\/\d+\/(\d+)|#(\d+))/i
|
||||
|
||||
message.scan(issue_finder).each do |tuple|
|
||||
# tuple will be
|
||||
# [ 'fix', 'id_from_url', 'id_from_pound' ]
|
||||
taskid = tuple[2] || tuple[1]
|
||||
task_list.push(taskid)
|
||||
|
||||
if tuple[0]
|
||||
close_list.push(taskid)
|
||||
end
|
||||
end
|
||||
|
||||
# post commit to every taskid found
|
||||
task_list.each do |taskid|
|
||||
task = Asana::Task.find(taskid[0])
|
||||
task = Asana::Task.find(taskid)
|
||||
|
||||
if task
|
||||
task.create_story(text: push_msg + ' ' + message)
|
||||
|
@ -117,7 +129,7 @@ automatically inspected. Leave blank to include all branches.'
|
|||
|
||||
# close all tasks that had 'fix(ed/es/ing) #:id' in them
|
||||
close_list.each do |taskid|
|
||||
task = Asana::Task.find(taskid.last)
|
||||
task = Asana::Task.find(taskid)
|
||||
|
||||
if task
|
||||
task.modify(completed: true)
|
||||
|
|
|
@ -62,5 +62,26 @@ describe AsanaService, models: true do
|
|||
|
||||
@asana.check_commit('fix #456789', 'pushed')
|
||||
end
|
||||
|
||||
it 'should be able to close via url' do
|
||||
expect(Asana::Task).to receive(:find).with('42').twice
|
||||
|
||||
@asana.check_commit('closes https://app.asana.com/19292/956299/42', 'pushed')
|
||||
end
|
||||
|
||||
it 'should allow multiple matches per line' do
|
||||
expect(Asana::Task).to receive(:find).with('123').twice
|
||||
expect(Asana::Task).to receive(:find).with('456').twice
|
||||
expect(Asana::Task).to receive(:find).with('789').once
|
||||
|
||||
expect(Asana::Task).to receive(:find).with('42').once
|
||||
expect(Asana::Task).to receive(:find).with('12').twice
|
||||
|
||||
message = <<-EOF
|
||||
minor bigfix, refactoring, fixed #123 and Closes #456 work on #789
|
||||
ref https://app.asana.com/19292/956299/42 and closing https://app.asana.com/19292/956299/12
|
||||
EOF
|
||||
@asana.check_commit(message, 'pushed')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue