coordinator 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba122b99d0854436ad66722efd17fb50dc1a4d27
4
- data.tar.gz: a65bc1f944b110a655a4895ade5f7ec283d2c6f7
3
+ metadata.gz: 951f9d028d3168801aa1c5290154533a3d8052f1
4
+ data.tar.gz: 830fa381045f0024b419320258992b1896a0b8d6
5
5
  SHA512:
6
- metadata.gz: c229709dd74c66705eec7350e0e6fe712e43e037e0e42179bd605dc1cd660b4427beda31aa493f21ffb2346d98c51a1e46697d12eda8988e5dc4314272368983
7
- data.tar.gz: 20da3611c6041f5622f69e29fe22917f4ae461afd866ffd71d89357a8de4b65a0ac7547e9fbe839a8290747e19119d5e105a5ed62977d8a79501c3aea62dc842
6
+ metadata.gz: 4c522e99cdf40060bf51807190858eb825d3cc8ca3388940460511c9cf7a17f5fbc6d0e8a21e548eadcf09ea9d8bd1271ba5b9f41f480d930275053c361727c8
7
+ data.tar.gz: f814051065ef4f6d32149f5529538ec06345ca5157c21e1ff27db8d197111614f9cc94c6bae332847346600d558af3a9e48b9bd05e1ebba148c956947510b250
@@ -5,15 +5,15 @@ module Coordinator
5
5
  end
6
6
 
7
7
  def add_task(skill, task)
8
- queue_for_skill(skill).add_task(task)
8
+ queue_for_skill(skill).push(task)
9
9
  end
10
10
 
11
11
  def add_priority_task(skill, task)
12
- queue_for_skill(skill).add_priority_task(task)
12
+ queue_for_skill(skill).left_push(task)
13
13
  end
14
14
 
15
15
  def remove_task(skill, task)
16
- queue_for_skill(skill).remove_task(task)
16
+ queue_for_skill(skill).remove(task)
17
17
  end
18
18
 
19
19
  def next_task(skills)
@@ -25,17 +25,15 @@ module Coordinator
25
25
  end
26
26
 
27
27
  def set_capacity(skill, capacity)
28
- queue_for_skill(skill).set_capacity(capacity)
28
+ queue_for_skill(skill).capacity = capacity
29
+ end
30
+
31
+ def full?(skill)
32
+ queue_for_skill(skill).full?
29
33
  end
30
34
 
31
35
  def info(skill)
32
- queue = queue_for_skill(skill)
33
- {
34
- "name" => queue.name,
35
- "capacity" => queue.capacity,
36
- "count" => queue.length,
37
- "items" => queue.items
38
- }
36
+ queue_for_skill(skill).details
39
37
  end
40
38
 
41
39
  def length_all
@@ -49,7 +47,7 @@ module Coordinator
49
47
  private
50
48
 
51
49
  def queue_for_skill(skill)
52
- queue = @queues.find {|q| q.name == skill}
50
+ queue = @queues.find {|q| q.skill == skill}
53
51
  raise Coordinator::Error, "No matching queue for #{skill}" unless queue
54
52
  queue
55
53
  end
@@ -1,28 +1,19 @@
1
1
  module Coordinator
2
- class Queue
2
+ class Queue < RedisQueue
3
+ attr_reader :skill
4
+
3
5
  def initialize(skill, capacity=nil, &block)
4
6
  @skill = skill
5
- @store = Coordinator::RedisQueue.new(@skill)
6
- @store.capacity = capacity if capacity
7
+ self.capacity = capacity if capacity
7
8
  @custom_block = block if block_given?
8
- end
9
9
 
10
- def add_task(task)
11
- @store.push(task)
12
- end
13
-
14
- def add_priority_task(task)
15
- @store.left_push(task)
16
- end
17
-
18
- def remove_task(task)
19
- @store.remove(task)
10
+ super(skill)
20
11
  end
21
12
 
22
13
  def next_task(skills)
23
- task = @store.peek
14
+ task = peek
24
15
  return nil unless task && eligible?(task, skills)
25
- return task if @store.remove(task)
16
+ return task if remove(task)
26
17
  next_task(skills)
27
18
  end
28
19
 
@@ -34,30 +25,14 @@ module Coordinator
34
25
  end
35
26
  end
36
27
 
37
- def set_capacity(capacity)
38
- @store.capacity = capacity
39
- end
40
-
41
- def name
42
- @skill
43
- end
44
-
45
- # store delegation methods
46
-
47
- def items
48
- @store.items
49
- end
50
-
51
- def capacity
52
- @store.capacity
53
- end
54
-
55
- def length
56
- @store.length
57
- end
58
-
59
- def peek
60
- @store.peek
28
+ def details
29
+ {
30
+ "name" => @skill,
31
+ "full" => full?,
32
+ "capacity" => capacity,
33
+ "count" => length,
34
+ "items" => items
35
+ }
61
36
  end
62
37
  end
63
38
  end
@@ -52,12 +52,12 @@ module Coordinator
52
52
  @redis.lrange(@queue_name, 0, length).map { |i| deserialize(i) }
53
53
  end
54
54
 
55
- private
56
-
57
55
  def full?
58
56
  capacity && capacity <= length
59
57
  end
60
58
 
59
+ private
60
+
61
61
  def serialize(item)
62
62
  item.is_a?(String) ? item : item.to_json
63
63
  end
@@ -1,3 +1,3 @@
1
1
  module Coordinator
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -38,6 +38,34 @@ describe 'Coordinator::Base' do
38
38
  end
39
39
  end
40
40
 
41
+ describe 'capacity' do
42
+ before do
43
+ @coordinator.set_capacity("high", 1)
44
+ @coordinator.add_task("high", 1)
45
+ end
46
+
47
+ it 'recognizes full state' do
48
+ assert @coordinator.full?("high")
49
+ end
50
+
51
+ it 'recognizes full state' do
52
+ @coordinator.set_capacity("high", 2)
53
+ refute @coordinator.full?("high")
54
+ end
55
+ end
56
+
57
+ describe 'info' do
58
+ it 'returns queue specific details' do
59
+ @coordinator.add_task("high", "new task")
60
+ info = @coordinator.info("high")
61
+ assert_equal "high", info["name"]
62
+ assert_equal nil, info["full"]
63
+ assert_equal nil, info["capacity"]
64
+ assert_equal 1, info["count"]
65
+ assert_equal ["new task"], info["items"]
66
+ end
67
+ end
68
+
41
69
  describe 'length_all' do
42
70
  it 'returns the total amount of tasks across all queues' do
43
71
  @coordinator.add_task("medium", 1)
@@ -6,37 +6,14 @@ describe "Coordinator::Queue" do
6
6
  Redis.current.flushall
7
7
  end
8
8
 
9
- describe "next_task" do
10
- it "gets task for skills" do
11
- @queue.add_task(5)
12
- assert_equal 5, @queue.next_task(["high"])
9
+ describe 'next_task' do
10
+ it 'returns task when eligible' do
11
+ @queue.push(1)
12
+ assert 1, @queue.next_task(["high"])
13
13
  end
14
14
 
15
- it "returns nil when no eligable work" do
16
- @queue.add_task(5)
17
- assert_equal nil, @queue.next_task(["medium"])
18
- end
19
-
20
- it "returns nil when no work" do
21
- assert_equal nil, @queue.next_task(["medium"])
22
- end
23
- end
24
-
25
- describe "add_task" do
26
- it "returns true when skill present" do
27
- @queue.add_task(5)
28
- @queue.add_task(4)
29
-
30
- assert_equal 5, @queue.next_task(["high"])
31
- end
32
- end
33
-
34
- describe "add_priority_task" do
35
- it "returns true when skill present" do
36
- @queue.add_task(5)
37
- @queue.add_priority_task(4)
38
-
39
- assert_equal 4, @queue.next_task(["high"])
15
+ it 'returns nil when not eligible' do
16
+ assert_equal nil, @queue.next_task(["high"])
40
17
  end
41
18
  end
42
19
 
@@ -51,7 +28,7 @@ describe "Coordinator::Queue" do
51
28
 
52
29
  it "can override default behaviour" do
53
30
  queue = Coordinator::Queue.new("normal") do |task, skills|
54
- return true if skills.include?(name) && skills.include?("online")
31
+ return true if skills.include?(skill) && skills.include?("online")
55
32
  return true if skills.include?("low")
56
33
  return true if task == 4
57
34
  task == 3 && skills.include?("special")
@@ -63,14 +40,4 @@ describe "Coordinator::Queue" do
63
40
  assert queue.eligible?(3, ["special"]), "override through both"
64
41
  end
65
42
  end
66
-
67
- describe "peek" do
68
- it "deserialize the top task but leaves it in the queue" do
69
- task = {"id" => 123}
70
- @queue.add_task(task)
71
-
72
- assert_equal task, @queue.peek
73
- assert_equal task, @queue.peek # ensure task is still enqueued
74
- end
75
- end
76
43
  end
@@ -88,6 +88,16 @@ describe 'Coordinator::RedisQueue' do
88
88
  end
89
89
  end
90
90
 
91
+ describe '.full?' do
92
+ it 'false when under capacity' do
93
+ refute @queue.full?
94
+ end
95
+ it 'true when at capacity' do
96
+ @queue.capacity = 0
97
+ assert @queue.full?
98
+ end
99
+ end
100
+
91
101
  it 'allows for objects' do
92
102
  [1000, "taco", {"a" => 1}, [1,2,3]].each do |o|
93
103
  @queue.push(o)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coordinator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Mercier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-14 00:00:00.000000000 Z
11
+ date: 2014-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -136,4 +136,3 @@ test_files:
136
136
  - test/unit/parallelism_test.rb
137
137
  - test/unit/queue_test.rb
138
138
  - test/unit/redis_queue_test.rb
139
- has_rdoc: