tiny_bus 1.0.1 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tiny_bus.rb +17 -13
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 167d35639547e4dd4a52b2882a02926cc7cc1b1e73c0ef2affaca995190f70a3
|
4
|
+
data.tar.gz: 38326f77eba40699377e2b42f99e15484286c97028cdea5f35018d930f1fa18d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a588b106a52b799ab9c70f271ce2b4dc51fdac19f5b0518c53a95d5f5932b2eeda9ad53a5d61644e1d5aeba6ec0a0802540519ebbd21bc3e0c89f44ba8cd2ebd
|
7
|
+
data.tar.gz: 61f2606e77ea63a9638fadc926d9c8020db234946271ed829b4b6d4e3d09115c6c260f81fca86830df1681363e1d002731fc63cba058d0311d6ab497c019fd24
|
data/lib/tiny_bus.rb
CHANGED
@@ -20,9 +20,9 @@ require 'tiny_log'
|
|
20
20
|
# t.msg({'topic' => 'whatever', 'details' => 'Historic happenings!}) # goes to dead letter output, or raises exception, depending on the configuration
|
21
21
|
#
|
22
22
|
# Initialization options:
|
23
|
-
# TinyBus.new(log: <
|
24
|
-
# TinyBus.new(dead: <
|
25
|
-
# TinyBus.new(raise_on_dead: true)
|
23
|
+
# TinyBus.new(log: <a filename for log output>) # will log all normal msgs in this file
|
24
|
+
# TinyBus.new(dead: <a filename for dead message log output>) # will log all undeliverable msgs in this file
|
25
|
+
# TinyBus.new(raise_on_dead: true) # strict mode for undeliverable messages, defaults to false
|
26
26
|
class TinyBus
|
27
27
|
# log:
|
28
28
|
# if specified it should be a valid filename
|
@@ -37,8 +37,8 @@ class TinyBus
|
|
37
37
|
def initialize(log: nil, dead: nil, raise_on_dead: false)
|
38
38
|
@subs = {}
|
39
39
|
@stats = { '.dead' => 0 }
|
40
|
-
@log = log ? TinyLog.new(log) : $stdout
|
41
|
-
@dead = dead ? File.open(dead, 'a') : $stderr
|
40
|
+
@log = log ? TinyLog.new(log) : TinyLog.new($stdout)
|
41
|
+
@dead = dead ? File.open(dead, 'a') : TinyLog.new($stderr)
|
42
42
|
@raise_on_dead = raise_on_dead
|
43
43
|
end
|
44
44
|
|
@@ -48,7 +48,7 @@ class TinyBus
|
|
48
48
|
# reserved for internal TinyBus usage, such as:
|
49
49
|
# - .log
|
50
50
|
def sub(topic, subber)
|
51
|
-
raise TinyBus::SubscriptionToDotTopicError.new("Cannot subscribe to dot topic `#{topic}', because
|
51
|
+
raise TinyBus::SubscriptionToDotTopicError.new("Cannot subscribe to dot topic `#{topic}', because those are reserved for internal use") if topic.start_with?('.')
|
52
52
|
raise TinyBus::SubscriberDoesNotMsg.new("The specified subscriber type `#{subber.class.inspect}' does not respond to #msg") unless subber.respond_to?(:msg)
|
53
53
|
|
54
54
|
@subs[topic] ||= Set.new
|
@@ -69,9 +69,12 @@ class TinyBus
|
|
69
69
|
#
|
70
70
|
# NOTE: it modifies the incoming msg object in place in order to avoid
|
71
71
|
# unnecessary object allocations
|
72
|
-
def msg(msg)
|
73
|
-
|
74
|
-
|
72
|
+
def msg(msg, lvl='info')
|
73
|
+
topic = msg['topic']
|
74
|
+
|
75
|
+
raise TinyBus::SendToDotTopicError.new("Cannot send to dot topic `#{topic}', because those are reserved for internal use") if topic.start_with?('.')
|
76
|
+
|
77
|
+
subbers = @subs[topic]
|
75
78
|
|
76
79
|
annotated = msg.merge!({
|
77
80
|
'.time' => Time.now.utc.iso8601(6),
|
@@ -79,15 +82,15 @@ class TinyBus
|
|
79
82
|
})
|
80
83
|
|
81
84
|
if subbers
|
82
|
-
@stats[
|
85
|
+
@stats[topic] += 1
|
83
86
|
subbers.each{|s| s.msg(annotated) }
|
84
|
-
@log.
|
87
|
+
@log.send(lvl, annotated)
|
85
88
|
else
|
86
89
|
if @raise_on_dead
|
87
|
-
raise TinyBus::DeadMsgError.new("Could not deliver message to topic `#{
|
90
|
+
raise TinyBus::DeadMsgError.new("Could not deliver message to topic `#{topic}'")
|
88
91
|
else
|
89
92
|
@stats['.dead'] += 1
|
90
|
-
@dead.
|
93
|
+
@dead.send(lvl, annotated)
|
91
94
|
end
|
92
95
|
end
|
93
96
|
end
|
@@ -105,3 +108,4 @@ end
|
|
105
108
|
class TinyBus::DeadMsgError < RuntimeError; end
|
106
109
|
class TinyBus::SubscriptionToDotTopicError < RuntimeError; end
|
107
110
|
class TinyBus::SubscriberDoesNotMsg < RuntimeError; end
|
111
|
+
class TinyBus::SendToDotTopicError< RuntimeError; end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tiny_bus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Lunt
|
@@ -24,9 +24,7 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
description:
|
28
|
-
distributes them out to subscribers based on a 'topic' key, with logging to $stdout
|
29
|
-
or a file, and absolutely nothing else? then this library is for you
|
27
|
+
description: a tiny pubsub message bus with almost no features
|
30
28
|
email: jefflunt@gmail.com
|
31
29
|
executables: []
|
32
30
|
extensions: []
|
@@ -55,5 +53,7 @@ requirements: []
|
|
55
53
|
rubygems_version: 3.0.3.1
|
56
54
|
signing_key:
|
57
55
|
specification_version: 4
|
58
|
-
summary:
|
56
|
+
summary: want to have an in-memory message bus that takes hash-like objects and distributes
|
57
|
+
them out to subscribers based on a 'topic' key, with logging to $stdout or a file,
|
58
|
+
and absolutely nothing else? then this library is for you
|
59
59
|
test_files: []
|