cpi-event-connector 0.0.11 → 0.0.12
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 +4 -4
- data/cpi-event-connector.gemspec +1 -1
- data/lib/cpi_event_connector/connector.rb +5 -3
- data/lib/cpi_event_connector/event.rb +16 -7
- data/lib/cpi_event_connector/version.rb +1 -1
- data/spec/connector_spec.rb +15 -9
- data/spec/event_spec.rb +34 -30
- data/spec/integration_spec.rb +11 -0
- metadata +6 -6
data/Gemfile.lock
CHANGED
@@ -7,22 +7,22 @@ GIT
|
|
7
7
|
PATH
|
8
8
|
remote: .
|
9
9
|
specs:
|
10
|
-
cpi-event-connector (0.0.
|
11
|
-
activesupport (
|
10
|
+
cpi-event-connector (0.0.12)
|
11
|
+
activesupport (~> 3)
|
12
12
|
bunny
|
13
13
|
uuidtools (~> 2.1.2)
|
14
14
|
|
15
15
|
GEM
|
16
16
|
remote: http://rubygems.org/
|
17
17
|
specs:
|
18
|
-
activesupport (3.2.
|
18
|
+
activesupport (3.2.8)
|
19
19
|
i18n (~> 0.6)
|
20
20
|
multi_json (~> 1.0)
|
21
21
|
backports (2.5.1)
|
22
22
|
diff-lcs (1.1.3)
|
23
23
|
i18n (0.6.0)
|
24
24
|
justinf-unification_assertion (0.0.2)
|
25
|
-
multi_json (1.3.
|
25
|
+
multi_json (1.3.6)
|
26
26
|
rspec (2.8.0)
|
27
27
|
rspec-core (~> 2.8.0)
|
28
28
|
rspec-expectations (~> 2.8.0)
|
data/cpi-event-connector.gemspec
CHANGED
@@ -22,6 +22,6 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_development_dependency "justinf-unification_assertion"
|
23
23
|
|
24
24
|
s.add_runtime_dependency "bunny"
|
25
|
-
s.add_runtime_dependency "activesupport", "
|
25
|
+
s.add_runtime_dependency "activesupport", "~> 3"
|
26
26
|
s.add_runtime_dependency "uuidtools", "~> 2.1.2"
|
27
27
|
end
|
@@ -1,9 +1,10 @@
|
|
1
|
+
require 'active_support/core_ext/array/extract_options'
|
1
2
|
require 'bunny'
|
2
3
|
|
3
4
|
module Cpi
|
4
5
|
class Connector
|
5
6
|
def initialize params={}
|
6
|
-
@
|
7
|
+
@queue = params.delete(:queue)
|
7
8
|
@params = params
|
8
9
|
end
|
9
10
|
|
@@ -13,7 +14,9 @@ module Cpi
|
|
13
14
|
|
14
15
|
with_retries options do
|
15
16
|
start
|
16
|
-
|
17
|
+
queue = options[:queue] || @queue
|
18
|
+
@bunny.queue(queue, :durable => true)
|
19
|
+
@exchange.publish(message, :key => queue, :persistent => true)
|
17
20
|
@bunny.tx_commit
|
18
21
|
end
|
19
22
|
end
|
@@ -28,7 +31,6 @@ module Cpi
|
|
28
31
|
@bunny.tx_select
|
29
32
|
@exchange = @bunny.exchange('')
|
30
33
|
|
31
|
-
@queue = @bunny.queue(@queue_name, :durable => true)
|
32
34
|
@started = true
|
33
35
|
end
|
34
36
|
|
@@ -2,20 +2,29 @@ require 'active_support/core_ext/string'
|
|
2
2
|
|
3
3
|
module Cpi
|
4
4
|
class Event
|
5
|
+
class << self
|
6
|
+
attr_accessor :connection_params
|
7
|
+
end
|
5
8
|
|
6
|
-
|
9
|
+
@enabled = false
|
7
10
|
|
8
11
|
def self.configure(params)
|
9
|
-
|
10
|
-
|
11
|
-
@@connector = Cpi::Connector.new(params)
|
12
|
+
@enabled = !!params.delete(:enabled)
|
13
|
+
self.connection_params = params
|
12
14
|
end
|
13
15
|
|
14
|
-
def self.transmit(event_type, tenant_uid, root_path)
|
15
|
-
return unless
|
16
|
+
def self.transmit(event_type, tenant_uid, root_path, options=nil)
|
17
|
+
return unless @enabled
|
16
18
|
raise ArgumentError, "Tenant UID must be specified" if tenant_uid.blank?
|
19
|
+
|
17
20
|
event_json = Cpi::Generator.create_event(event_type, tenant_uid, root_path)
|
18
|
-
|
21
|
+
self.connector.transmit(event_json, options)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def self.connector
|
27
|
+
Thread.current[:cpi_connector] ||= Cpi::Connector.new(self.connection_params)
|
19
28
|
end
|
20
29
|
end
|
21
30
|
end
|
data/spec/connector_spec.rb
CHANGED
@@ -27,7 +27,7 @@ describe Cpi::Connector do
|
|
27
27
|
bunny.stub(:tx_commit)
|
28
28
|
end
|
29
29
|
|
30
|
-
context "before connection established" do
|
30
|
+
context "before a connection is established" do
|
31
31
|
it "connects to an amqp server" do
|
32
32
|
Bunny.should_receive(:new).with(params).and_return(bunny)
|
33
33
|
bunny.should_receive(:start)
|
@@ -35,12 +35,6 @@ describe Cpi::Connector do
|
|
35
35
|
connector.transmit(event)
|
36
36
|
end
|
37
37
|
|
38
|
-
it "connects to the specified queue" do
|
39
|
-
bunny.should_receive(:queue).with("cpi", :durable => true).and_return(queue)
|
40
|
-
|
41
|
-
connector.transmit(event)
|
42
|
-
end
|
43
|
-
|
44
38
|
it "creates a transaction before sending an event" do
|
45
39
|
bunny.should_receive(:tx_select)
|
46
40
|
|
@@ -54,18 +48,30 @@ describe Cpi::Connector do
|
|
54
48
|
end
|
55
49
|
end
|
56
50
|
|
57
|
-
context "connection already established" do
|
51
|
+
context "when a connection is already established" do
|
58
52
|
before do
|
59
53
|
connector.transmit(event)
|
60
54
|
end
|
61
55
|
|
62
|
-
it "does not
|
56
|
+
it "does not reconnect to an amqp server" do
|
63
57
|
Bunny.should_not_receive(:new)
|
64
58
|
|
65
59
|
connector.transmit(event)
|
66
60
|
end
|
67
61
|
end
|
68
62
|
|
63
|
+
it "connects to the default queue" do
|
64
|
+
bunny.should_receive(:queue).with("cpi", :durable => true).and_return(queue)
|
65
|
+
|
66
|
+
connector.transmit(event)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "connects to the specified queue" do
|
70
|
+
bunny.should_receive(:queue).with("my queue", :durable => true).and_return(queue)
|
71
|
+
|
72
|
+
connector.transmit(event, :queue => "my queue")
|
73
|
+
end
|
74
|
+
|
69
75
|
it "sends a message to an amqp server" do
|
70
76
|
exchange.should_receive(:publish).with(event, :key => "cpi", :persistent => true)
|
71
77
|
|
data/spec/event_spec.rb
CHANGED
@@ -1,48 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require_relative '../lib/cpi_event_connector'
|
3
|
-
require 'yaml'
|
4
3
|
require 'active_support'
|
5
4
|
require 'unification_assertion'
|
6
|
-
require 'active_support/core_ext/hash/keys' # for symbolize keys
|
7
5
|
|
8
6
|
describe Cpi::Event do
|
9
|
-
let(:
|
10
|
-
---
|
11
|
-
host: localhost
|
12
|
-
port: 5672
|
13
|
-
username: guest
|
14
|
-
password: guest
|
15
|
-
queue: connector-test
|
16
|
-
enabled: true
|
17
|
-
"}
|
7
|
+
let(:config) { { :enabled => true, :key => "value" } }
|
18
8
|
|
19
9
|
describe ".configure" do
|
20
|
-
|
21
10
|
let(:connector) { double(Cpi::Connector) }
|
22
11
|
|
23
12
|
it "accepts a hash of connection information" do
|
24
|
-
|
25
|
-
expected_config.delete(:enabled)
|
26
|
-
Cpi::Connector.should_receive(:new).with(expected_config).and_return(connector)
|
27
|
-
|
28
|
-
Cpi::Event.configure(YAML::load(yaml_config).symbolize_keys!)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "does nothing if enabled is false" do
|
32
|
-
yaml_config = "---
|
33
|
-
enabled: false"
|
34
|
-
Cpi::Connector.should_not_receive(:new)
|
13
|
+
Cpi::Event.configure(config)
|
35
14
|
|
36
|
-
Cpi::Event.
|
15
|
+
Cpi::Event.connection_params.should == { :key => "value" }
|
37
16
|
end
|
38
17
|
end
|
39
18
|
|
40
19
|
describe ".transmit" do
|
41
|
-
|
20
|
+
let(:real_config) { {
|
21
|
+
host: "localhost",
|
22
|
+
port: "5672",
|
23
|
+
username: "guest",
|
24
|
+
password: "guest",
|
25
|
+
queue: "connector-test",
|
26
|
+
enabled: "true"
|
27
|
+
} }
|
42
28
|
let(:content) { "<test />" }
|
43
29
|
|
44
30
|
it "generates and sends an event" do
|
45
|
-
Cpi::Event.configure(
|
31
|
+
Cpi::Event.configure(real_config)
|
46
32
|
|
47
33
|
Cpi::Event.transmit("shipment_shipped", "stuff", content)
|
48
34
|
|
@@ -56,11 +42,29 @@ enabled: false"
|
|
56
42
|
h.should unify({"event_type" => "shipment_shipped", "tenant" => "stuff", "content" => content, "uid" => :_x})
|
57
43
|
end
|
58
44
|
|
45
|
+
it "creates a connection for each thread" do
|
46
|
+
Cpi::Event.configure(config)
|
47
|
+
|
48
|
+
connector1 = double("connector 1")
|
49
|
+
connector2 = double("connector 2")
|
50
|
+
Cpi::Connector.stub(:new).and_return(connector1, connector2)
|
51
|
+
|
52
|
+
connector1.should_receive(:transmit)
|
53
|
+
connector2.should_receive(:transmit)
|
54
|
+
|
55
|
+
Thread.new do
|
56
|
+
Cpi::Event.transmit("message", "tenant_uid", "content")
|
57
|
+
end.join
|
58
|
+
|
59
|
+
Thread.new do
|
60
|
+
Cpi::Event.transmit("message", "tenant_uid", "content")
|
61
|
+
end.join
|
62
|
+
end
|
63
|
+
|
59
64
|
it "does not transmit when it is not enabled" do
|
60
|
-
|
61
|
-
config[:enabled] = false
|
65
|
+
real_config[:enabled] = false
|
62
66
|
|
63
|
-
Cpi::Event.configure(
|
67
|
+
Cpi::Event.configure(real_config)
|
64
68
|
Cpi::Generator.should_not_receive(:create_event)
|
65
69
|
# And there shouldn't be an exception
|
66
70
|
|
@@ -73,7 +77,7 @@ enabled: false"
|
|
73
77
|
end
|
74
78
|
|
75
79
|
it "raises exception when no tenant_uid is passed in" do
|
76
|
-
Cpi::Event.configure(
|
80
|
+
Cpi::Event.configure(real_config)
|
77
81
|
Cpi::Generator.should_not_receive(:create_event)
|
78
82
|
expect {Cpi::Event.transmit("message", nil, "content")}.to raise_error(ArgumentError)
|
79
83
|
end
|
data/spec/integration_spec.rb
CHANGED
@@ -24,4 +24,15 @@ queue: connector-test"}
|
|
24
24
|
message = q.pop
|
25
25
|
message[:payload].should == "message"
|
26
26
|
end
|
27
|
+
|
28
|
+
it "sends a message when a queue is specified" do
|
29
|
+
connector = Cpi::Connector.new(YAML::load(yaml_config).symbolize_keys!)
|
30
|
+
connector.transmit("message", :queue => "my queue")
|
31
|
+
|
32
|
+
b = Bunny.new
|
33
|
+
b.start
|
34
|
+
q = b.queue("my queue", :durable => true)
|
35
|
+
message = q.pop
|
36
|
+
message[:payload].should == "message"
|
37
|
+
end
|
27
38
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cpi-event-connector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
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: 2012-
|
12
|
+
date: 2012-08-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -80,17 +80,17 @@ dependencies:
|
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - ~>
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version: '3
|
85
|
+
version: '3'
|
86
86
|
type: :runtime
|
87
87
|
prerelease: false
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
|
-
- -
|
91
|
+
- - ~>
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version: '3
|
93
|
+
version: '3'
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
name: uuidtools
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|