marples 1.0.2 → 1.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/README.md +28 -2
- data/lib/marples/client.rb +17 -2
- data/lib/marples/model_action_broadcast.rb +1 -1
- data/lib/marples/version.rb +1 -1
- metadata +14 -20
data/README.md
CHANGED
@@ -12,7 +12,8 @@ As Postmaster, Ernest Marples introduced postcodes to the UK, making message
|
|
12
12
|
routing easier.
|
13
13
|
|
14
14
|
Marples, this gem, removes any uncertainty about which destination our messages
|
15
|
-
go to by enforcing a naming scheme
|
15
|
+
go to by enforcing a naming scheme, and means we don't care about which
|
16
|
+
transport representation is used, because these details are hidden from us.
|
16
17
|
|
17
18
|
|
18
19
|
## Usage
|
@@ -27,13 +28,38 @@ go to by enforcing a naming scheme.
|
|
27
28
|
### Listening for messages
|
28
29
|
|
29
30
|
stomp = Stomp::Client.new ...
|
30
|
-
m = Marples::Client.new stomp
|
31
|
+
m = Marples::Client.new transport: stomp
|
31
32
|
m.when 'publisher', 'publication', 'updated' do |publication|
|
32
33
|
puts publication['slug']
|
33
34
|
# => "how-postcodes-work"
|
34
35
|
end
|
35
36
|
m.join # Join the listening thread
|
36
37
|
|
38
|
+
### Adding more content to a message
|
39
|
+
|
40
|
+
Some objects are only useful with more information eg an Account object is maybe
|
41
|
+
only useful when it has a list of all customers as well.
|
42
|
+
|
43
|
+
It's possible that you could override `#to_xml` for each object, but that feels
|
44
|
+
a little messy.
|
45
|
+
|
46
|
+
Normally of course you'd use an implementation of
|
47
|
+
[Data Enricher](http://eaipatterns.com/DataEnricher.html) but if, for some
|
48
|
+
reason, you don't have anywhere to implement these integration patterns, you can
|
49
|
+
choose to implement your own message payload generator:
|
50
|
+
|
51
|
+
stomp = Stomp::Client.new ...
|
52
|
+
m = Marples::Client.new transport: stomp, client_name: "publisher"
|
53
|
+
m.payload_for Account do |account|
|
54
|
+
account.to_xml :include => :customers
|
55
|
+
end
|
56
|
+
|
57
|
+
account = Account.find ...
|
58
|
+
m.updated account
|
59
|
+
|
60
|
+
Marples expects XML data to be put on the bus, if you choose to return something
|
61
|
+
that's not XML then you're on your own.
|
62
|
+
|
37
63
|
|
38
64
|
## Logging
|
39
65
|
|
data/lib/marples/client.rb
CHANGED
@@ -58,12 +58,27 @@ module Marples
|
|
58
58
|
destination = destination_for client_name, object_type, action
|
59
59
|
logger.debug "Using transport #{transport}"
|
60
60
|
logger.debug "Sending XML to #{destination}"
|
61
|
-
|
62
|
-
|
61
|
+
payload = generate_payload_for object
|
62
|
+
logger.debug "XML: #{payload}"
|
63
|
+
transport.publish destination, payload
|
63
64
|
logger.debug "Message sent"
|
64
65
|
end
|
65
66
|
private :publish
|
66
67
|
|
68
|
+
def payload_for klass, &block
|
69
|
+
payload_generator[klass] = block
|
70
|
+
end
|
71
|
+
|
72
|
+
def generate_payload_for object
|
73
|
+
payload_generator[object.class].call object
|
74
|
+
end
|
75
|
+
private :generate_payload_for
|
76
|
+
|
77
|
+
def payload_generator
|
78
|
+
@payload_generator ||= Hash.new(lambda { |o| o.to_xml })
|
79
|
+
end
|
80
|
+
private :payload_generator
|
81
|
+
|
67
82
|
def destination_for application_name, object_type, action
|
68
83
|
"/topic/marples.#{application_name}.#{object_type}.#{action}"
|
69
84
|
end
|
@@ -13,7 +13,7 @@ module Marples
|
|
13
13
|
# If you'd like the actions performed by Marples to be logged, set a
|
14
14
|
# logger. By default this uses the NullLogger.
|
15
15
|
class_attribute :marples_logger
|
16
|
-
self.marples_logger =
|
16
|
+
self.marples_logger = NullLogger.instance
|
17
17
|
|
18
18
|
CALLBACKS.each do |callback|
|
19
19
|
callback_action = callback.to_s =~ /e$/ ? "#{callback}d" : "#{callback}ed"
|
data/lib/marples/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marples
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-12-02 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: null_logger
|
17
|
-
requirement: &
|
17
|
+
requirement: &70125815622680 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70125815622680
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: activesupport
|
28
|
-
requirement: &
|
28
|
+
requirement: &70125815621380 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70125815621380
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: i18n
|
39
|
-
requirement: &
|
39
|
+
requirement: &70125815620380 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70125815620380
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rake
|
50
|
-
requirement: &
|
50
|
+
requirement: &70125815619300 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70125815619300
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: activerecord
|
61
|
-
requirement: &
|
61
|
+
requirement: &70125815618520 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70125815618520
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: activerecord-nulldb-adapter
|
72
|
-
requirement: &
|
72
|
+
requirement: &70125815617880 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70125815617880
|
81
81
|
description: Message destination arbiter
|
82
82
|
email:
|
83
83
|
- craig@barkingiguana.com
|
@@ -113,18 +113,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
113
|
- - ! '>='
|
114
114
|
- !ruby/object:Gem::Version
|
115
115
|
version: '0'
|
116
|
-
segments:
|
117
|
-
- 0
|
118
|
-
hash: 2905283016913556502
|
119
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
117
|
none: false
|
121
118
|
requirements:
|
122
119
|
- - ! '>='
|
123
120
|
- !ruby/object:Gem::Version
|
124
121
|
version: '0'
|
125
|
-
segments:
|
126
|
-
- 0
|
127
|
-
hash: 2905283016913556502
|
128
122
|
requirements: []
|
129
123
|
rubyforge_project: marples
|
130
124
|
rubygems_version: 1.8.10
|