debian-mirror-gitlab/app/models/concerns/taskable.rb

38 lines
1 KiB
Ruby
Raw Normal View History

2015-09-11 14:41:01 +05:30
require 'task_list'
require 'task_list/filter'
2015-04-26 12:48:37 +05:30
# Contains functionality for objects that can have task lists in their
# descriptions. Task list items can be added with Markdown like "* [x] Fix
# bugs".
#
# Used by MergeRequest and Issue
module Taskable
2015-09-11 14:41:01 +05:30
# Called by `TaskList::Summary`
def task_list_items
return [] if description.blank?
2015-04-26 12:48:37 +05:30
2015-09-11 14:41:01 +05:30
@task_list_items ||= description.scan(TaskList::Filter::ItemPattern).collect do |item|
# ItemPattern strips out the hyphen, but Item requires it. Rabble rabble.
TaskList::Item.new("- #{item}")
2015-04-26 12:48:37 +05:30
end
2015-09-11 14:41:01 +05:30
end
2015-04-26 12:48:37 +05:30
2015-09-11 14:41:01 +05:30
def tasks
@tasks ||= TaskList.new(self)
2015-04-26 12:48:37 +05:30
end
# Return true if this object's description has any task list items.
def tasks?
2015-09-11 14:41:01 +05:30
tasks.summary.items?
2015-04-26 12:48:37 +05:30
end
# Return a string that describes the current state of this Taskable's task
2015-09-11 14:41:01 +05:30
# list items, e.g. "20 tasks (12 completed, 8 remaining)"
2015-04-26 12:48:37 +05:30
def task_status
2015-09-11 14:41:01 +05:30
return '' if description.blank?
2015-04-26 12:48:37 +05:30
2015-09-11 14:41:01 +05:30
sum = tasks.summary
"#{sum.item_count} tasks (#{sum.complete_count} completed, #{sum.incomplete_count} remaining)"
2015-04-26 12:48:37 +05:30
end
end