fairway 0.0.3 → 0.0.4

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fairway (0.0.2)
4
+ fairway (0.0.3)
5
5
  activesupport
6
6
  hiredis
7
7
  redis
@@ -5,6 +5,10 @@ module Fairway
5
5
  @queue_names = [queue_names].flatten!
6
6
  end
7
7
 
8
+ def length
9
+ @connection.redis.mget(@queue_names.map{|q| "#{q}:length" }).sum.to_i
10
+ end
11
+
8
12
  def pull
9
13
  @connection.scripts.fairway_pull(@queue_names)
10
14
  end
@@ -16,7 +16,12 @@ module Fairway
16
16
 
17
17
  if work
18
18
  decoded_work = JSON.parse(work)
19
- work = @message_to_job.call(fairway_queue, decoded_work).to_json if @message_to_job
19
+
20
+ if @message_to_job
21
+ decoded_work = @message_to_job.call(fairway_queue, decoded_work)
22
+ work = decoded_work.to_json
23
+ end
24
+
20
25
  unit_of_work = UnitOfWork.new(decoded_work["queue"], work)
21
26
  end
22
27
 
@@ -1,3 +1,3 @@
1
1
  module Fairway
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -15,6 +15,7 @@ for i = 1, #registered_queues, 2 do
15
15
  local facet_queue = namespace .. queue_name .. ':facet_queue';
16
16
 
17
17
  redis.call('lpush', namespace .. queue_name .. ':' .. facet, message)
18
+ redis.call('incr', namespace .. queue_name .. ':length');
18
19
 
19
20
  if redis.call('sadd', active_facets, facet) == 1 then
20
21
  redis.call('lpush', facet_queue, facet);
@@ -10,6 +10,10 @@ for index, queue_name in ipairs(ARGV) do
10
10
  local message_queue = namespace .. queue_name .. ':' .. facet;
11
11
  local message = redis.call('rpop', message_queue);
12
12
 
13
+ if message then
14
+ redis.call('decr', namespace .. queue_name .. ':length');
15
+ end
16
+
13
17
  if redis.call('llen', message_queue) == 0 then
14
18
  redis.call('srem', active_facets, facet);
15
19
  else
@@ -2,24 +2,18 @@ require "spec_helper"
2
2
 
3
3
  module Fairway
4
4
  describe Connection do
5
- let(:config) do
6
- Config.new do |c|
7
- c.facet { |message| message[:facet] }
8
- end
9
- end
10
-
11
- let(:connection) { Connection.new(config) }
12
- let(:redis) { config.redis }
5
+ let(:connection) { Connection.new(Fairway.config) }
6
+ let(:redis) { Fairway.config.redis }
13
7
  let(:message) { { facet: 1, topic: "event:helloworld" } }
14
8
 
15
9
  describe "#initialize" do
16
10
  it "registers queues from the config" do
17
- config = Config.new
18
- config.register_queue("myqueue", ".*")
19
- config.redis.hgetall("registered_queues").should == {}
20
- Connection.new(config)
11
+ Fairway.config.register_queue("myqueue", ".*")
12
+ Fairway.config.redis.hgetall("registered_queues").should == {}
13
+
14
+ Connection.new(Fairway.config)
21
15
 
22
- config.redis.hgetall("registered_queues").should == {
16
+ Fairway.config.redis.hgetall("registered_queues").should == {
23
17
  "myqueue" => ".*"
24
18
  }
25
19
  end
@@ -40,7 +34,7 @@ module Fairway
40
34
 
41
35
  on.pmessage do |pattern, channel, received_message|
42
36
  received_message.should == message.to_json
43
- channel.should == "default"
37
+ channel.should == "test:fairway:default"
44
38
  redis.punsubscribe(pattern)
45
39
  end
46
40
  end
@@ -48,7 +42,7 @@ module Fairway
48
42
 
49
43
  context "registered queue exists for message type" do
50
44
  before do
51
- config.register_queue("myqueue")
45
+ Fairway.config.register_queue("myqueue")
52
46
  end
53
47
 
54
48
  it "adds message to the environment facet for the queue" do
@@ -2,13 +2,8 @@ require "spec_helper"
2
2
 
3
3
  module Fairway
4
4
  describe QueueReader do
5
- let(:config) do
6
- Config.new do |c|
7
- c.facet { |message| message[:facet] }
8
- end
9
- end
10
5
  let(:connection) do
11
- c = Connection.new(config)
6
+ c = Connection.new(Fairway.config)
12
7
  ChanneledConnection.new(c) do |message|
13
8
  message[:topic]
14
9
  end
@@ -21,9 +16,33 @@ module Fairway
21
16
  end
22
17
  end
23
18
 
19
+ describe "#length" do
20
+ let(:reader) { QueueReader.new(connection, "myqueue") }
21
+
22
+ before do
23
+ Fairway.config.register_queue("myqueue", "event:helloworld")
24
+ end
25
+
26
+ it "returns the number of queued messages across facets" do
27
+ reader.length.should == 0
28
+
29
+ connection.deliver(message.merge(facet: 1, message: 1))
30
+ connection.deliver(message.merge(facet: 1, message: 2))
31
+ connection.deliver(message.merge(facet: 2, message: 3))
32
+
33
+ reader.length.should == 3
34
+
35
+ reader.pull
36
+ reader.pull
37
+ reader.pull
38
+
39
+ reader.length.should == 0
40
+ end
41
+ end
42
+
24
43
  describe "#pull" do
25
44
  before do
26
- config.register_queue("myqueue", "event:helloworld")
45
+ Fairway.config.register_queue("myqueue", "event:helloworld")
27
46
  end
28
47
 
29
48
  it "pulls a message off the queue using FIFO strategy" do
@@ -49,10 +68,10 @@ module Fairway
49
68
  it "removes facet from active list if it becomes empty" do
50
69
  connection.deliver(message)
51
70
 
52
- config.redis.smembers("myqueue:active_facets").should == ["1"]
71
+ Fairway.config.redis.smembers("myqueue:active_facets").should == ["1"]
53
72
  reader = QueueReader.new(connection, "myqueue")
54
73
  reader.pull
55
- config.redis.smembers("myqueue:active_facets").should be_empty
74
+ Fairway.config.redis.smembers("myqueue:active_facets").should be_empty
56
75
  end
57
76
 
58
77
  it "returns nil if there are no messages to retrieve" do
@@ -65,8 +84,8 @@ module Fairway
65
84
 
66
85
  context "pulling from multiple queues" do
67
86
  before do
68
- config.register_queue("myqueue1", "event:1")
69
- config.register_queue("myqueue2", "event:2")
87
+ Fairway.config.register_queue("myqueue1", "event:1")
88
+ Fairway.config.register_queue("myqueue2", "event:2")
70
89
  end
71
90
 
72
91
  it "pulls messages off first queue with a message" do
@@ -18,17 +18,17 @@ module Fairway
18
18
 
19
19
  it "allows transforming of the message into a job" do
20
20
  fetch = QueueFetch.new(reader) do |fairway_queue, message|
21
- message.tap do |message|
22
- message["queue"] = "my_#{message["queue"]}"
23
- message["class"] = "GolfEventJob"
24
- end
21
+ {
22
+ "queue" => "my_#{message["queue"]}",
23
+ "class" => "GolfEventJob"
24
+ }
25
25
  end
26
26
 
27
27
  reader.stub(pull: ["fairway", work])
28
28
 
29
29
  unit_of_work = fetch.retrieve_work
30
30
  unit_of_work.queue_name.should == "my_golf_events"
31
- unit_of_work.message.should == JSON.parse(work).merge("queue" => "my_golf_events", "class" => "GolfEventJob").to_json
31
+ unit_of_work.message.should == { "queue" => "my_golf_events", "class" => "GolfEventJob" }.to_json
32
32
  end
33
33
  end
34
34
  end
data/spec/spec_helper.rb CHANGED
@@ -23,7 +23,8 @@ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f}
23
23
  RSpec.configure do |config|
24
24
  config.before(:each) do
25
25
  Fairway.configure do |config|
26
- config.namespace = "test:backbone"
26
+ config.namespace = "test:fairway"
27
+ config.facet { |message| message[:facet] }
27
28
  end
28
29
 
29
30
  Fairway::Config.new.redis.flushdb
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fairway
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-12 00:00:00.000000000 Z
12
+ date: 2013-02-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport