kanban 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5571f4ff8d96226cd84855428ad20f875669991f
4
- data.tar.gz: 3ef547ba9f47b0dd43ef43e851052848374e8197
3
+ metadata.gz: f6f0f321b90145bc913fab9ee5b932908d16d2e8
4
+ data.tar.gz: 8f015ee628cc53a95d702f646a15ec6d7a47188c
5
5
  SHA512:
6
- metadata.gz: fbf31b07bfbbcc2a3fd32d4096c0a082c52d880eca58fd7cd041d3deee1f2ebab7448ba1a94eac68c8fb0ac9967ac5d2b42e45fc0102b1b25d1e00364937e2ee
7
- data.tar.gz: 08a57add1ad3040481c6ce516ed90ecbbccf2df861038f311f82fec3e3e0557c9e49497c2f69d4d85730e095c3349ee50cbb1e8dfbfd1bbc61488be127a00855
6
+ metadata.gz: 9f51ccf582a838859c987187938554200e9a5ac471221a9928994cf46e370b8b1174ba4d168831ed6f1b3a55e77aabbf31727419bc1c2b4122830f9af62eb064
7
+ data.tar.gz: 796f6ca6814a854ac62163a3142daff394bde399b12280594f9cb7d3583f45d443c76f56ba0d17cf8d970142217b29f980da3969097fcbed2a68daef2bdfe9af
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.1
1
+ 0.7.0
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: kanban 0.5.1 ruby lib
5
+ # stub: kanban 0.7.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "kanban"
9
- s.version = "0.5.1"
9
+ s.version = "0.7.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Chris Olstrom"]
14
- s.date = "2015-05-28"
14
+ s.date = "2015-05-30"
15
15
  s.description = "Because your code totally needed an Agile Workflow"
16
16
  s.email = "chris@olstrom.com"
17
17
  s.extra_rdoc_files = [
@@ -60,5 +60,31 @@ module Kanban
60
60
  def completed?(id)
61
61
  @backend.getbit("#{@queue}:completed", id) == 1
62
62
  end
63
+
64
+ def unworkable(id)
65
+ @backend.setbit("#{@queue}:unworkable", id, 1).zero?
66
+ end
67
+
68
+ def unworkable?(id)
69
+ @backend.getbit("#{@queue}:unworkable", id) == 1
70
+ end
71
+
72
+ def done?(id)
73
+ completed?(id) || unworkable?(id)
74
+ end
75
+
76
+ def release(id)
77
+ expire_claim id
78
+ @backend.lrem("#{@queue}:doing", 0, id) > 0
79
+ end
80
+
81
+ def expire_claim(id)
82
+ @backend.expire "#{@item}:#{id}:claimed", 0
83
+ end
84
+
85
+ def requeue(id)
86
+ release id
87
+ @backend.lpush("#{@queue}:todo", id) > 0
88
+ end
63
89
  end
64
90
  end
@@ -4,6 +4,8 @@ require 'timeout'
4
4
  describe 'Backlog' do
5
5
  before do
6
6
  @backlog = Kanban::Backlog.new backend: Redis.new, namespace: 'kanban:test'
7
+ task = { 'test' => 'data' }
8
+ 5.times { @backlog.add(task) }
7
9
  end
8
10
 
9
11
  after(:all) do
@@ -81,15 +83,13 @@ describe 'Backlog' do
81
83
 
82
84
  it 'should track the claim separately from the queue it is in' do
83
85
  id = @backlog.claim
84
- redis = Redis.new
85
- expect(redis.exists("#{@backlog.item}:#{id}:claimed")).to be true
86
+ expect(@backlog.claimed?(id)).to be true
86
87
  end
87
88
 
88
89
  it 'should allow claims to expire' do
89
90
  id = @backlog.claim(duration: 1)
90
91
  sleep 1.1
91
- redis = Redis.new
92
- expect(redis.exists("#{@backlog.item}:#{id}:claimed")).to be false
92
+ expect(@backlog.claimed?(id)).to be false
93
93
  end
94
94
 
95
95
  it 'should block if there are no pending tasks' do
@@ -103,8 +103,6 @@ describe 'Backlog' do
103
103
  end
104
104
 
105
105
  it 'should report if a task is claimed' do
106
- task = { 'test' => 'data' }
107
- 5.times { @backlog.add(task) }
108
106
  id = @backlog.claim
109
107
  expect(@backlog.claimed?(id)).to be true
110
108
  expect(@backlog.claimed?(0)).to be false
@@ -125,4 +123,51 @@ describe 'Backlog' do
125
123
  @backlog.complete 2
126
124
  expect(@backlog.completed?(2)).to be true
127
125
  end
126
+
127
+ it 'should allow indicating a task should not be retried' do
128
+ expect(@backlog.unworkable(3)).to be true
129
+ expect(@backlog.unworkable(3)).to be false
130
+ end
131
+
132
+ it 'should check if a task is unworkable' do
133
+ expect(@backlog.unworkable?(4)).to be false
134
+ @backlog.unworkable 4
135
+ expect(@backlog.unworkable?(4)).to be true
136
+ end
137
+
138
+ it 'should consider a task that is completed or unworkable to be done' do
139
+ expect(@backlog.done?(0)).to be false
140
+ @backlog.complete(5)
141
+ expect(@backlog.done?(5)).to be true
142
+ @backlog.unworkable(6)
143
+ expect(@backlog.done?(6)).to be true
144
+ end
145
+
146
+ it 'should be able to release a task from being in progress' do
147
+ id = @backlog.claim
148
+ expect(@backlog.release(id)).to be true
149
+ expect(@backlog.release(id)).to be false
150
+ expect(@backlog.doing).to_not include(id)
151
+ end
152
+
153
+ it 'should be able to forcibly expire a claim' do
154
+ expect(@backlog.expire_claim(0)).to be false
155
+ id = @backlog.claim
156
+ expect(@backlog.expire_claim(id)).to be true
157
+ expect(@backlog.claimed?(id)).to be false
158
+ end
159
+
160
+ it 'should expire any active claims when a task is released' do
161
+ id = @backlog.claim
162
+ expect(@backlog.claimed?(id)).to be true
163
+ @backlog.release(id)
164
+ expect(@backlog.claimed?(id)).to be false
165
+ end
166
+
167
+ it 'should be able to requeue a task' do
168
+ id = @backlog.claim
169
+ expect(@backlog.requeue(id)).to be true
170
+ expect(@backlog.todo).to include(id)
171
+ expect(@backlog.doing).to_not include(id)
172
+ end
128
173
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kanban
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Olstrom
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-28 00:00:00.000000000 Z
11
+ date: 2015-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis