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.' ...@@ -98,17 +98,29 @@ automatically inspected. Leave blank to include all branches.'
task_list = [] task_list = []
close_list = [] close_list = []
message.split("\n").each do |line| # matches either:
# look for a task ID or a full Asana url # - #1234
task_list.concat(line.scan(/#(\d+)/)) # - https://app.asana.com/0/0/1234
task_list.concat(line.scan(/https:\/\/app\.asana\.com\/\d+\/\d+\/(\d+)/)) # optionally preceded with:
# look for a word starting with 'fix' followed by a task ID # - fix/ed/es/ing
close_list.concat(line.scan(/(fix\w*)\W*#(\d+)/i)) # - 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 end
# post commit to every taskid found # post commit to every taskid found
task_list.each do |taskid| task_list.each do |taskid|
task = Asana::Task.find(taskid[0]) task = Asana::Task.find(taskid)
if task if task
task.create_story(text: push_msg + ' ' + message) task.create_story(text: push_msg + ' ' + message)
...@@ -117,7 +129,7 @@ automatically inspected. Leave blank to include all branches.' ...@@ -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 all tasks that had 'fix(ed/es/ing) #:id' in them
close_list.each do |taskid| close_list.each do |taskid|
task = Asana::Task.find(taskid.last) task = Asana::Task.find(taskid)
if task if task
task.modify(completed: true) task.modify(completed: true)
......
...@@ -62,5 +62,26 @@ describe AsanaService, models: true do ...@@ -62,5 +62,26 @@ describe AsanaService, models: true do
@asana.check_commit('fix #456789', 'pushed') @asana.check_commit('fix #456789', 'pushed')
end 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
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