Commit b45ee2c3 authored by Mike Wyatt's avatar Mike Wyatt

better support for referencing and closing issues in asana_service.rb

parent 28a8d0b5
......@@ -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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment