cpi-event-connector 0.3.0 → 0.4.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.
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in cpi-event-connector.gemspec
4
4
  gemspec
data/Gemfile.lock CHANGED
@@ -1,25 +1,24 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cpi-event-connector (0.2.0)
5
- activesupport (~> 3)
4
+ cpi-event-connector (0.3.0)
5
+ activesupport (~> 3.0)
6
6
  bunny (~> 0.8.0)
7
7
  nokogiri (~> 1.5)
8
8
  uuidtools (~> 2.1.2)
9
9
 
10
10
  GEM
11
- remote: http://rubygems.org/
11
+ remote: https://rubygems.org/
12
12
  specs:
13
- activesupport (3.2.8)
14
- i18n (~> 0.6)
13
+ activesupport (3.2.13)
14
+ i18n (= 0.6.1)
15
15
  multi_json (~> 1.0)
16
- backports (2.5.1)
17
16
  bunny (0.8.0)
18
17
  diff-lcs (1.1.3)
19
- i18n (0.6.0)
18
+ i18n (0.6.1)
20
19
  justinf-unification_assertion (0.0.2)
21
- multi_json (1.3.6)
22
- nokogiri (1.5.5)
20
+ multi_json (1.7.6)
21
+ nokogiri (1.5.9)
23
22
  rspec (2.8.0)
24
23
  rspec-core (~> 2.8.0)
25
24
  rspec-expectations (~> 2.8.0)
@@ -28,13 +27,12 @@ GEM
28
27
  rspec-expectations (2.8.0)
29
28
  diff-lcs (~> 1.1.2)
30
29
  rspec-mocks (2.8.0)
31
- uuidtools (2.1.3)
30
+ uuidtools (2.1.4)
32
31
 
33
32
  PLATFORMS
34
33
  ruby
35
34
 
36
35
  DEPENDENCIES
37
- backports
38
36
  cpi-event-connector!
39
37
  justinf-unification_assertion
40
38
  rspec
data/README.md ADDED
@@ -0,0 +1,66 @@
1
+ Cpi Event Connector
2
+ ===================
3
+
4
+ A library that allows applications to easily send events to CPI.
5
+
6
+ Usage
7
+ -----
8
+
9
+ Configure the Event Connector like so:
10
+
11
+ ```ruby
12
+ require 'cpi_event_connector'
13
+ require 'yaml'
14
+
15
+ config_file = File.join(Rails.root, "config", "cpi_event_connector.yml")
16
+ params = {:enabled => false}
17
+ if File.exists?(config_file)
18
+ params.merge! YAML::load_file(config_file).symbolize_keys!
19
+ end
20
+ Cpi::EventConnector.configure(params)
21
+ ```
22
+
23
+ With a YAML file that looks like this:
24
+
25
+ ```ruby
26
+ # RabbitMQ connection settings
27
+ # When connecting to an unsecured localhost, you actually don't need any of these
28
+ host: localhost
29
+ port: 5672
30
+ user: guest
31
+ password: guest
32
+
33
+ # Cpi Event Connector settings
34
+ enabled: false
35
+ queue: 'net.nulogy.cpi.events.development'
36
+ ```
37
+
38
+ And then send events like so:
39
+
40
+
41
+ ```ruby
42
+ event = Cpi::Event.new(
43
+ event_uid: 'unique_id',
44
+ event_type: 'type',
45
+ source_tenant_uid: 'tenant_uid',
46
+ content: 'some content')
47
+ Cpi::EventConnector.send_event(event, :queue => 'system_queue_name')
48
+ ```
49
+ Note that the queue parameter is optional if it was specified in the YAML config.
50
+
51
+ Or with raw xml like so:
52
+
53
+ ```ruby
54
+ xml = <<-XML
55
+ <cpi_event>
56
+ <header>
57
+ <event_uid>unique_id</event_uid>
58
+ <event_type>type</event_type>
59
+ <source_tenant_uid>tenant_uid</source_tenant_uid>
60
+ </header>
61
+ <content>some content</content>
62
+ </cpi_event>
63
+ XML
64
+ Cpi::EventConnector.send_event_xml(xml, :queue => 'system_queue_name')
65
+ ```
66
+
@@ -18,11 +18,10 @@ Gem::Specification.new do |s|
18
18
 
19
19
  # specify any dependencies here; for example:
20
20
  s.add_development_dependency "rspec"
21
- s.add_development_dependency "backports"
22
21
  s.add_development_dependency "justinf-unification_assertion"
23
22
 
24
23
  s.add_runtime_dependency "bunny", "~> 0.8.0"
25
- s.add_runtime_dependency "activesupport", "~> 3"
24
+ s.add_runtime_dependency "activesupport", "~> 3.0"
26
25
  s.add_runtime_dependency "uuidtools", "~> 2.1.2"
27
26
  s.add_runtime_dependency "nokogiri", "~> 1.5"
28
27
  end
data/lib/cpi/event.rb CHANGED
@@ -2,21 +2,17 @@ require 'active_support/core_ext/string'
2
2
  require 'nokogiri'
3
3
 
4
4
  module Cpi
5
- class Event
6
- def initialize(xml)
7
- @xml_doc = parse_xml(xml)
8
- end
9
-
10
- def event_type
11
- @xml_doc.xpath('//header/event_type').text
12
- end
5
+ module EventParser
6
+ extend self
13
7
 
14
- def source_tenant_uid
15
- @xml_doc.xpath('//header/source_tenant_uid').text
16
- end
17
-
18
- def event_uid
19
- nil_if_blank(@xml_doc.xpath('//header/event_uid').text)
8
+ def parse(xml)
9
+ xml_doc = parse_xml(xml)
10
+ attrs = {
11
+ event_type: xml_doc.xpath('//header/event_type').text,
12
+ source_tenant_uid: xml_doc.xpath('//header/source_tenant_uid').text,
13
+ event_uid: nil_if_blank(xml_doc.xpath('//header/event_uid').text)
14
+ }
15
+ Event.new(attrs)
20
16
  end
21
17
 
22
18
  private
@@ -31,4 +27,29 @@ module Cpi
31
27
  end
32
28
  end
33
29
  end
30
+
31
+ class Event
32
+ attr_accessor :event_type, :source_tenant_uid, :event_uid, :content
33
+
34
+ def initialize(attrs=nil)
35
+ @event_type = attrs[:event_type]
36
+ @source_tenant_uid = attrs[:source_tenant_uid]
37
+ @event_uid = attrs[:event_uid]
38
+ @content = attrs[:content]
39
+ end
40
+
41
+ def xml
42
+ builder = Nokogiri::XML::Builder.new do |xml|
43
+ xml.cpi_event {
44
+ xml.header {
45
+ xml.event_uid event_uid
46
+ xml.event_type event_type
47
+ xml.source_tenant_uid source_tenant_uid
48
+ }
49
+ xml.content content
50
+ }
51
+ end
52
+ builder.doc.root.to_xml
53
+ end
54
+ end
34
55
  end
@@ -19,6 +19,12 @@ module Cpi
19
19
  self.connection_params = params
20
20
  end
21
21
 
22
+ # DEPRECATED: Please use send_event instead
23
+ #
24
+ # This method does not add the correct routing header that CPI requires in the content
25
+ # of the event.
26
+ #
27
+ # This method will be made private eventually
22
28
  def self.transmit(event_type, tenant_uid, content, options=nil)
23
29
  options ||= {}
24
30
  if !@enabled
@@ -33,6 +39,12 @@ module Cpi
33
39
  @logger.debug "Transmission complete"
34
40
  end
35
41
 
42
+ # Sends a Cpi::Event
43
+ def self.send_event(event, options=nil)
44
+ return send_event_xml(event, options) if event.is_a? String # for backwards compatibility with 0.3.0
45
+ transmit_event(event, event.xml, options)
46
+ end
47
+
36
48
  # This method expects a routing header to be present in the xml document
37
49
  #
38
50
  # <cpi_event>
@@ -43,11 +55,9 @@ module Cpi
43
55
  # </header>
44
56
  # <content>some content</content>
45
57
  # </cpi_event>
46
- def self.send_event(xml, options=nil)
47
- options ||= {}
48
- d = Event.new(xml)
49
-
50
- transmit(d.event_type, d.source_tenant_uid, xml, {:queue => options.delete(:queue), :uid => d.event_uid})
58
+ def self.send_event_xml(xml, options=nil)
59
+ event = EventParser.parse(xml)
60
+ transmit_event(event, xml, options)
51
61
  end
52
62
 
53
63
  def self.test_connectivity
@@ -60,6 +70,11 @@ module Cpi
60
70
 
61
71
  private
62
72
 
73
+ def self.transmit_event(event, xml, options)
74
+ options ||= {}
75
+ transmit(event.event_type, event.source_tenant_uid, xml, {:queue => options.delete(:queue), :uid => event.event_uid})
76
+ end
77
+
63
78
  def self.connector
64
79
  Thread.current[THREAD_LOCAL_VARIABLE] ||= Cpi::Connector.new(self.connection_params, @logger)
65
80
  end
data/lib/cpi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cpi
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -46,7 +46,7 @@ describe Cpi::EventConnector do
46
46
  h.should unify({"event_type" => "shipment_shipped", "tenant" => "stuff", "content" => content, "uid" => :_x})
47
47
  end
48
48
 
49
- it "send_event does not require a uid or a queue in the routing envelope" do
49
+ it "send_event_xml does not require a uid or a queue in the routing envelope" do
50
50
  xml = <<-XML
51
51
  <cpi_event>
52
52
  <header>
@@ -56,13 +56,49 @@ describe Cpi::EventConnector do
56
56
  <content>some content</content>
57
57
  </cpi_event>
58
58
  XML
59
- Cpi::EventConnector.send_event(xml)
59
+ Cpi::EventConnector.send_event_xml(xml)
60
60
 
61
61
  h = get_event_from_rabbimq("connector-test")
62
62
  h.should unify({"event_type" => "type", "tenant" => "tenant_uid", "content" => xml, "uid" => :_x})
63
63
  end
64
64
 
65
- it "send_event generates and sends an event" do
65
+ it "send_event_xml generates and sends an event" do
66
+ xml = <<-XML
67
+ <cpi_event>
68
+ <header>
69
+ <event_uid>unique_id</event_uid>
70
+ <event_type>type</event_type>
71
+ <source_tenant_uid>tenant_uid</source_tenant_uid>
72
+ </header>
73
+ <content>some content</content>
74
+ </cpi_event>
75
+ XML
76
+ Cpi::EventConnector.send_event_xml(xml, :queue => 'system_queue_name')
77
+
78
+ h = get_event_from_rabbimq("system_queue_name")
79
+ h.should unify({"event_type" => "type", "tenant" => "tenant_uid", "content" => xml, "uid" => 'unique_id'})
80
+ end
81
+
82
+ it "send_event_xml generates and sends an event" do
83
+ event = Cpi::Event.new(event_uid: 'unique_id', event_type: 'type', source_tenant_uid: 'tenant_uid', content: 'some content')
84
+ Cpi::EventConnector.send_event(event, :queue => 'system_queue_name')
85
+
86
+ h = get_event_from_rabbimq("system_queue_name")
87
+
88
+ xml = <<-XML
89
+ <cpi_event>
90
+ <header>
91
+ <event_uid>unique_id</event_uid>
92
+ <event_type>type</event_type>
93
+ <source_tenant_uid>tenant_uid</source_tenant_uid>
94
+ </header>
95
+ <content>some content</content>
96
+ </cpi_event>
97
+ XML
98
+ h.should unify({"event_type" => "type", "tenant" => "tenant_uid", "content" => xml.strip, "uid" => 'unique_id'})
99
+ end
100
+
101
+ it "send_event works when given xml" do
66
102
  xml = <<-XML
67
103
  <cpi_event>
68
104
  <header>
data/spec/event_spec.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require_relative '../lib/cpi/event'
2
2
 
3
- describe Cpi::Event do
3
+ describe Cpi::EventParser do
4
4
 
5
5
  let(:xml) do
6
6
  <<-XML
@@ -15,22 +15,42 @@ describe Cpi::Event do
15
15
  XML
16
16
  end
17
17
 
18
- let(:doc) { Cpi::Event.new(xml) }
18
+ let(:event) { Cpi::EventParser.parse(xml) }
19
19
 
20
20
  describe "source_tenant_uid" do
21
21
  it "get extracted" do
22
- doc.source_tenant_uid.should == 'tenant_uid'
22
+ event.source_tenant_uid.should == 'tenant_uid'
23
23
  end
24
24
  end
25
25
 
26
26
  describe "uid" do
27
27
  it "get extracted" do
28
- doc.event_uid.should == 'unique_id'
28
+ event.event_uid.should == 'unique_id'
29
29
  end
30
30
 
31
31
  it "is nil when not present" do
32
- doc = Cpi::Event.new('')
33
- doc.event_uid.should be_nil
32
+ event = Cpi::EventParser.parse('')
33
+ event.event_uid.should be_nil
34
+ end
35
+ end
36
+ end
37
+
38
+ describe Cpi::Event do
39
+ describe "xml" do
40
+ it "serializes to xml" do
41
+ event = Cpi::Event.new(event_type: 'type', source_tenant_uid: 'tenant_uid', event_uid: 'uid', content: 'some content')
42
+
43
+ xml = <<-XML
44
+ <cpi_event>
45
+ <header>
46
+ <event_uid>uid</event_uid>
47
+ <event_type>type</event_type>
48
+ <source_tenant_uid>tenant_uid</source_tenant_uid>
49
+ </header>
50
+ <content>some content</content>
51
+ </cpi_event>
52
+ XML
53
+ event.xml.should == xml.strip
34
54
  end
35
55
  end
36
56
  end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'backports'
3
2
  require_relative '../lib/cpi/generator'
4
3
  require 'active_support'
5
4
 
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.3.0
4
+ version: 0.4.0
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-09-12 00:00:00.000000000 Z
12
+ date: 2013-06-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -27,22 +27,6 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: backports
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
30
  - !ruby/object:Gem::Dependency
47
31
  name: justinf-unification_assertion
48
32
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +66,7 @@ dependencies:
82
66
  requirements:
83
67
  - - ~>
84
68
  - !ruby/object:Gem::Version
85
- version: '3'
69
+ version: '3.0'
86
70
  type: :runtime
87
71
  prerelease: false
88
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +74,7 @@ dependencies:
90
74
  requirements:
91
75
  - - ~>
92
76
  - !ruby/object:Gem::Version
93
- version: '3'
77
+ version: '3.0'
94
78
  - !ruby/object:Gem::Dependency
95
79
  name: uuidtools
96
80
  requirement: !ruby/object:Gem::Requirement
@@ -133,6 +117,7 @@ files:
133
117
  - .gitignore
134
118
  - Gemfile
135
119
  - Gemfile.lock
120
+ - README.md
136
121
  - Rakefile
137
122
  - cpi-event-connector.gemspec
138
123
  - lib/cpi/connector.rb