class Kanban::Backlog
Attributes
item[R]
namespace[R]
queue[R]
Public Class Methods
new(backend:, **options)
click to toggle source
# File lib/kanban/backlog.rb, line 13 def initialize(backend:, **options) @namespace = options.fetch :namespace, 'default' @queue = "#{@namespace}:#{options.fetch :queue, 'tasks'}" @item = "#{@namespace}:#{options.fetch :item, 'task'}" @backend = backend end
Public Instance Methods
add(task)
click to toggle source
# File lib/kanban/backlog.rb, line 36 def add(task) id = next_id @backend.hmset "#{@item}:#{id}", *task.to_a @backend.lpush "#{@queue}:todo", id id end
add!(task)
click to toggle source
# File lib/kanban/backlog.rb, line 44 def add!(task) safe = task.with_string_keys add(safe) end
claim(duration: 3)
click to toggle source
# File lib/kanban/backlog.rb, line 50 def claim(duration: 3) id = @backend.brpoplpush("#{@queue}:todo", "#{@queue}:doing") @backend.set "#{@item}:#{id}:claimed", true, ex: duration id.to_i end
claimed?(id)
click to toggle source
# File lib/kanban/backlog.rb, line 57 def claimed?(id) @backend.exists "#{@item}:#{id}:claimed" end
complete(id)
click to toggle source
# File lib/kanban/backlog.rb, line 67 def complete(id) @backend.setbit("#{@queue}:completed", id, 1).zero? end
completed?(id)
click to toggle source
# File lib/kanban/backlog.rb, line 72 def completed?(id) @backend.getbit("#{@queue}:completed", id) == 1 end
doing()
click to toggle source
# File lib/kanban/backlog.rb, line 62 def doing @backend.lrange("#{@queue}:doing", 0, -1).map(&:to_i) end
done?(id)
click to toggle source
# File lib/kanban/backlog.rb, line 87 def done?(id) completed?(id) || unworkable?(id) end
expire_claim(id)
click to toggle source
# File lib/kanban/backlog.rb, line 98 def expire_claim(id) @backend.expire "#{@item}:#{id}:claimed", 0 end
get(id)
click to toggle source
# File lib/kanban/backlog.rb, line 21 def get(id) @backend.hgetall "#{@item}:#{id}" end
groom()
click to toggle source
# File lib/kanban/backlog.rb, line 109 def groom doing.map do |id| next if claimed? id if done? id id if release id else id if requeue id end end.compact end
next_id()
click to toggle source
# File lib/kanban/backlog.rb, line 26 def next_id @backend.incr "#{@queue}:id" end
release(id)
click to toggle source
# File lib/kanban/backlog.rb, line 92 def release(id) expire_claim id @backend.lrem("#{@queue}:doing", 0, id) > 0 end
requeue(id)
click to toggle source
# File lib/kanban/backlog.rb, line 103 def requeue(id) release id @backend.lpush("#{@queue}:todo", id) > 0 end
todo()
click to toggle source
# File lib/kanban/backlog.rb, line 31 def todo @backend.lrange("#{@queue}:todo", 0, -1).map(&:to_i) end
unworkable(id)
click to toggle source
# File lib/kanban/backlog.rb, line 77 def unworkable(id) @backend.setbit("#{@queue}:unworkable", id, 1).zero? end
unworkable?(id)
click to toggle source
# File lib/kanban/backlog.rb, line 82 def unworkable?(id) @backend.getbit("#{@queue}:unworkable", id) == 1 end