philotic 0.0.1 → 0.1.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 +4 -4
- data/.travis.yml +6 -1
- data/Gemfile +0 -7
- data/README.md +2 -0
- data/Rakefile +1 -1
- data/examples/README.md +1 -1
- data/examples/creating_named_queues/manually.rb +8 -21
- data/examples/creating_named_queues/with_rake.rb +2 -2
- data/examples/publishing/publish.rb +26 -33
- data/examples/subscribing/acks.rb +25 -0
- data/examples/subscribing/anonymous_queue.rb +6 -10
- data/examples/subscribing/multiple_named_queues.rb +9 -24
- data/examples/subscribing/named_queue.rb +7 -17
- data/lib/philotic.rb +37 -81
- data/lib/philotic/config.rb +63 -24
- data/lib/philotic/connection.rb +35 -51
- data/lib/philotic/constants.rb +49 -0
- data/lib/philotic/event.rb +27 -14
- data/lib/philotic/logging.rb +8 -0
- data/lib/philotic/logging/event.rb +18 -0
- data/lib/philotic/logging/logger.rb +39 -0
- data/lib/philotic/publisher.rb +28 -31
- data/lib/philotic/routable.rb +40 -40
- data/lib/philotic/subscriber.rb +61 -42
- data/lib/philotic/tasks/init_queues.rb +4 -14
- data/lib/philotic/version.rb +1 -1
- data/philotic.gemspec +21 -10
- data/spec/philotic/config_spec.rb +40 -0
- data/spec/philotic/connection_spec.rb +58 -0
- data/spec/philotic/event_spec.rb +69 -0
- data/spec/philotic/logging/logger_spec.rb +26 -0
- data/spec/philotic/publisher_spec.rb +99 -0
- data/spec/{routable_spec.rb → philotic/routable_spec.rb} +15 -14
- data/spec/philotic/subscriber_spec.rb +111 -0
- data/spec/philotic_spec.rb +66 -0
- data/spec/spec_helper.rb +12 -4
- data/tasks/bump.rake +10 -10
- metadata +173 -36
- data/spec/connection_spec.rb +0 -19
- data/spec/event_spec.rb +0 -44
- data/spec/publisher_spec.rb +0 -102
- data/spec/subscriber_spec.rb +0 -72
data/spec/connection_spec.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Philotic::Connection do
|
4
|
-
let(:connection){ Philotic::Connection }
|
5
|
-
subject { connection }
|
6
|
-
|
7
|
-
describe "config" do
|
8
|
-
it "should return the Philotic::Config singleton" do
|
9
|
-
subject.config.should == Philotic::Config
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "exchange" do
|
14
|
-
#TODO make sure rabbit is running for CI to run this
|
15
|
-
xit "should return an instance of AMQP::Exchange" do
|
16
|
-
subject.exchange.should be_a AMQP::Exchange
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/spec/event_spec.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
# create 'deep' inheritance to test self.inherited
|
4
|
-
class TestEventParent < Philotic::Event
|
5
|
-
end
|
6
|
-
class TestEvent < TestEventParent
|
7
|
-
end
|
8
|
-
|
9
|
-
describe Philotic::Event do
|
10
|
-
let(:event){ TestEvent.new }
|
11
|
-
subject { event }
|
12
|
-
|
13
|
-
Philotic::Routable::ClassMethods.instance_methods.sort.each do |method_name|
|
14
|
-
specify { subject.class.methods.should include method_name.to_sym }
|
15
|
-
end
|
16
|
-
|
17
|
-
Philotic::MESSAGE_OPTIONS.each do |method_name|
|
18
|
-
specify { subject.methods.should include method_name.to_sym }
|
19
|
-
specify { subject.methods.should include "#{method_name}=".to_sym }
|
20
|
-
end
|
21
|
-
|
22
|
-
Philotic::PHILOTIC_HEADERS.each do |method_name|
|
23
|
-
specify { subject.methods.should include method_name.to_sym }
|
24
|
-
specify { subject.methods.should include "#{method_name}=".to_sym }
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "message_metadata" do
|
28
|
-
it "should have a timestamp" do
|
29
|
-
Timecop.freeze
|
30
|
-
subject.message_metadata.should == {timestamp: Time.now.to_i}
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should reflect changes in the event properties" do
|
34
|
-
subject.message_metadata[:app_id]. should == nil
|
35
|
-
subject.app_id = 'ANSIBLE'
|
36
|
-
subject.message_metadata[:app_id]. should == 'ANSIBLE'
|
37
|
-
end
|
38
|
-
end
|
39
|
-
describe "headers" do
|
40
|
-
it "should include :philotic_product" do
|
41
|
-
subject.headers.keys.should include :philotic_product
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
data/spec/publisher_spec.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'philotic/dummy_event'
|
3
|
-
|
4
|
-
describe Philotic::Publisher do
|
5
|
-
before(:each) do
|
6
|
-
@event = Philotic::DummyEvent.new
|
7
|
-
@event.subject = "Hello"
|
8
|
-
@event.message = "How are you?"
|
9
|
-
@event.gender = :M
|
10
|
-
@event.available = true
|
11
|
-
end
|
12
|
-
let(:publisher) { Philotic::Publisher }
|
13
|
-
subject { publisher }
|
14
|
-
|
15
|
-
describe "config" do
|
16
|
-
it "should return the Philotic::Config singleton" do
|
17
|
-
subject.config.should == Philotic::Config
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "exchange" do
|
22
|
-
#TODO make sure rabbit is running for CI to run this
|
23
|
-
xit "should return an instance of AMQP::Exchange" do
|
24
|
-
subject.exchange.should be_a AMQP::Exchange
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "publish" do
|
29
|
-
it "should call raw_publish with the right values" do
|
30
|
-
Timecop.freeze
|
31
|
-
subject.should_receive(:raw_publish).with(
|
32
|
-
{
|
33
|
-
subject: 'Hello',
|
34
|
-
message: "How are you?"
|
35
|
-
},
|
36
|
-
{
|
37
|
-
headers: {
|
38
|
-
philotic_firehose: true,
|
39
|
-
philotic_product: nil,
|
40
|
-
philotic_component: nil,
|
41
|
-
philotic_event_type: nil,
|
42
|
-
gender: :M,
|
43
|
-
available: true
|
44
|
-
},
|
45
|
-
timestamp: Time.now.to_i
|
46
|
-
}
|
47
|
-
)
|
48
|
-
subject.publish(@event)
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "raw_publish" do
|
54
|
-
|
55
|
-
xit "should call exchange.publish with the right values" do
|
56
|
-
Timecop.freeze
|
57
|
-
Philotic::Connection.instance.should_receive(:connected?).and_return { true }
|
58
|
-
|
59
|
-
AMQP::Exchange.any_instance.should_receive(:publish).with(
|
60
|
-
{
|
61
|
-
subject: 'Hello',
|
62
|
-
message: "How are you?"
|
63
|
-
}.to_json,
|
64
|
-
{
|
65
|
-
routing_key: nil,
|
66
|
-
persistent: true,
|
67
|
-
mandatory: true,
|
68
|
-
content_type: nil,
|
69
|
-
content_encoding: nil,
|
70
|
-
priority: nil,
|
71
|
-
message_id: nil,
|
72
|
-
correlation_id: nil,
|
73
|
-
reply_to: nil,
|
74
|
-
type: nil,
|
75
|
-
user_id: nil,
|
76
|
-
app_id: nil,
|
77
|
-
expiration: nil,
|
78
|
-
headers: {
|
79
|
-
philotic_firehose: true,
|
80
|
-
philotic_product: nil,
|
81
|
-
philotic_component: nil,
|
82
|
-
philotic_event_type: nil,
|
83
|
-
gender: :M,
|
84
|
-
available: true
|
85
|
-
},
|
86
|
-
timestamp: Time.now.to_i
|
87
|
-
}
|
88
|
-
)
|
89
|
-
subject.publish(@event)
|
90
|
-
end
|
91
|
-
|
92
|
-
xit "should log an error when there is no connection" do
|
93
|
-
|
94
|
-
4.times do
|
95
|
-
Philotic::Connection.instance.should_receive(:connected?).and_return { false }
|
96
|
-
end
|
97
|
-
Philotic.logger.should_receive(:error)
|
98
|
-
subject.publish(@event)
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
102
|
-
end
|
data/spec/subscriber_spec.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'philotic/dummy_event'
|
3
|
-
|
4
|
-
describe Philotic::Subscriber do
|
5
|
-
let(:subscriber) do
|
6
|
-
subscriber = Philotic::Subscriber.new(arguments: {'x-match' => 'any', philotic_firehose: true}) do |metadata, payload|
|
7
|
-
true
|
8
|
-
end
|
9
|
-
subscriber
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "subscribe" do
|
13
|
-
xit "should call AMQP.channel.queue with the right values" do
|
14
|
-
queue = double(AMQP::Queue)
|
15
|
-
queue.stub(:bind) { queue }
|
16
|
-
queue.stub(:subscribe) { queue }
|
17
|
-
channel = double(AMQP::Channel)
|
18
|
-
exchange = double(AMQP::Exchange)
|
19
|
-
channel.stub(:queue) { queue }
|
20
|
-
channel.stub(:headers) { exchange }
|
21
|
-
AMQP.stub(:channel) { channel }
|
22
|
-
|
23
|
-
channel.should_receive(:queue).with("", {auto_delete: true, durable: false})
|
24
|
-
queue.should_receive(:bind).with(exchange, {arguments: {"x-match" => "any", philotic_firehose: true}})
|
25
|
-
queue.should_receive(:subscribe).with({})
|
26
|
-
Philotic::Subscriber.subscribe(arguments: {'x-match' => 'any', philotic_firehose: true}) do |metadata, payload|
|
27
|
-
true
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "subscribe_to_any_of" do
|
33
|
-
xit "should call AMQP.channel.queue with the right values" do
|
34
|
-
queue = double(AMQP::Queue)
|
35
|
-
queue.stub(:bind) { queue }
|
36
|
-
queue.stub(:subscribe) { queue }
|
37
|
-
channel = double(AMQP::Channel)
|
38
|
-
exchange = double(AMQP::Exchange)
|
39
|
-
channel.stub(:queue) { queue }
|
40
|
-
channel.stub(:headers) { exchange }
|
41
|
-
AMQP.stub(:channel) { channel }
|
42
|
-
|
43
|
-
channel.should_receive(:queue).with("", {auto_delete: true, durable: false})
|
44
|
-
queue.should_receive(:bind).with(exchange, {arguments: {"x-match" => "any", philotic_firehose: true}})
|
45
|
-
queue.should_receive(:subscribe).with({})
|
46
|
-
Philotic::Subscriber.subscribe_to_any_of(arguments: {philotic_firehose: true}) do |metadata, payload|
|
47
|
-
true
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "subscribe_to_all_of" do
|
53
|
-
xit "should call AMQP.channel.queue with the right values" do
|
54
|
-
queue = double(AMQP::Queue)
|
55
|
-
queue.stub(:bind) { queue }
|
56
|
-
queue.stub(:subscribe) { queue }
|
57
|
-
channel = double(AMQP::Channel)
|
58
|
-
exchange = double(AMQP::Exchange)
|
59
|
-
channel.stub(:queue) { queue }
|
60
|
-
channel.stub(:headers) { exchange }
|
61
|
-
AMQP.stub(:channel) { channel }
|
62
|
-
|
63
|
-
channel.should_receive(:queue).with("", {auto_delete: true, durable: false})
|
64
|
-
queue.should_receive(:bind).with(exchange, {arguments: {"x-match" => "all", philotic_firehose: true}})
|
65
|
-
queue.should_receive(:subscribe).with({})
|
66
|
-
Philotic::Subscriber.subscribe_to_all_of(arguments: {philotic_firehose: true}) do |metadata, payload|
|
67
|
-
true
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|