tiny_bus 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tiny_bus.rb +32 -12
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b04a4860504e84547cc02b406c9146d47af4e16563b7509fe2cf3152fe5b6747
4
- data.tar.gz: 687328b251069cf527b3de27210ce626884e9e751ccc07ef7accba31a86cd2c6
3
+ metadata.gz: e0b4ee66f65bb60557ba29b72f0ade0e840f0db352ac2f1bca0cab5385b97b19
4
+ data.tar.gz: '089bfc105f34f3538844e5756e3623f8db4f835c58501140cc6d6a02521c17dc'
5
5
  SHA512:
6
- metadata.gz: 42eda75efbcdbcdd006c1dcdfeb098b48b17e6aecf5f7b27b9a630d8f383ad9a01064e77f77a486e01916ca98d71e036c726e2e5568a227dd4b36d2dc8f0f52c
7
- data.tar.gz: 7c9cef3cf505db81c954aa8666007d30a89a2b0384e5e385759e8034ee39eb63a9f7f4d3da3981f37b63c657abece8c70d0b5b48152e1b82df7e5269f2da6909
6
+ metadata.gz: 58a576c5b7bc7445b263e93b23ba1ba65e6536dfdd38dfe150251401dfc9490776ca6b751ef27c9ed71ce2bea0901d5292b009bed217c7c0a50c3c852f88e748
7
+ data.tar.gz: 45a52d67eecda3efa9d8e72267413fd0d5adaab5b5f3168278e7938e0edd88f9f29b6e18fb5a98d7058c0a456c3898b83a92549cf7df7a012313bc27b1f8b736
data/lib/tiny_bus.rb CHANGED
@@ -6,7 +6,7 @@ require 'tiny_pipe'
6
6
 
7
7
  # NOTE: This library depends on the TinyLog library.
8
8
  #
9
- # This class implements a very simpler PubSub system where:
9
+ # This class implements a very simple PubSub system where:
10
10
  # - subscribers can subscribe via the #sub method
11
11
  # - subscribers can unsubscribe via the #unsub method
12
12
  # - msgs can enter the TinyBus via the #msg method
@@ -28,6 +28,10 @@ require 'tiny_pipe'
28
28
  # TinyBus.new(raise_on_dead: true) # strict mode for undeliverable messages, defaults to false
29
29
  class TinyBus
30
30
  ANNOTATION_PREFIX_DEFAULT = '.'
31
+ LOGGING_LEVELS = {
32
+ 'sent' => 'SENT',
33
+ 'dead' => 'DEAD'
34
+ }.freeze
31
35
 
32
36
  # log:
33
37
  # if specified, it should be a TinyLog instance
@@ -52,20 +56,36 @@ class TinyBus
52
56
  # default: '.'
53
57
  # if specified, the annotated message attributes ('.time', '.msg_uuid', and
54
58
  # '.trace') will have the dot ('.') replaced with the specified prefix text
59
+ # logging_overrides:
60
+ # default: LOGGING_LEVELS
61
+ # allows you to specify a Hash of overrides of the logging levels for
62
+ # 'SENT' and 'DEAD' message delivery; useful if the consuming application
63
+ # wants to use its own logging levels, or you just want the labels changed
64
+ # for some reason
55
65
  def initialize(log: nil, dead: nil, translator: nil, raise_on_dead: false,
56
- annotation_prefix: ANNOTATION_PREFIX_DEFAULT)
66
+ annotation_prefix: ANNOTATION_PREFIX_DEFAULT,
67
+ logging_overrides: LOGGING_LEVELS)
57
68
  @subs = {}
58
69
  @translator = translator
70
+
71
+ @dead_key = "#{annotation_prefix}dead"
72
+ @topic_key = "#{annotation_prefix}topic"
73
+ @time_key = "#{annotation_prefix}time"
74
+ @msg_uuid_key = "#{annotation_prefix}msg_uuid"
75
+ @trace_key = "#{annotation_prefix}trace"
76
+
59
77
  @annotator = TinyPipe.new([
60
- ->(m){ m[annotation_prefix + 'time'] = (Time.now.to_f * 1000).to_i; m },
61
- ->(m){ m[annotation_prefix + 'msg_uuid'] = SecureRandom.uuid; m },
62
- ->(m){ m[annotation_prefix + 'trace'] ||= SecureRandom.uuid; m }
78
+ ->(m){ m[@time_key] = (Time.now.to_f * 1000).to_i; m },
79
+ ->(m){ m[@msg_uuid_key] = SecureRandom.uuid; m },
80
+ ->(m){ m[@trace_key] ||= SecureRandom.uuid; m }
63
81
  ])
64
82
 
65
83
  @stats = { '.dead' => 0 }
66
84
  @log = log || TinyLog.new($stdout)
67
85
  @dead = dead || TinyLog.new($stderr)
68
86
  @raise_on_dead = raise_on_dead
87
+ @sent_level = logging_overrides['sent'] || LOGGING_LEVELS['sent']
88
+ @dead_level = logging_overrides['dead'] || LOGGING_LEVELS['dead']
69
89
  end
70
90
 
71
91
  # adds a subscriber to a topic
@@ -76,14 +96,14 @@ class TinyBus
76
96
  @subs[topic] << subber
77
97
  @stats[topic] ||= 0
78
98
 
79
- msg({ '.topic' => 'sub', 'to_topic' => topic, 'subber' => subber.to.s })
99
+ msg({ @topic_key => 'sub', 'to_topic' => topic, 'subber' => subber.to_s })
80
100
  end
81
101
 
82
102
  # removes a subscriber from a topic
83
103
  def unsub(topic, subber)
84
104
  @subs[topic]&.delete(subber)
85
105
 
86
- msg({ '.topic' => 'unsub', 'from_topic' => topic, 'subber' => subber.to.s })
106
+ msg({ @topic_key => 'unsub', 'from_topic' => topic, 'subber' => subber.to_s })
87
107
  end
88
108
 
89
109
  # takes an incoming message and distributes it to subscribers
@@ -101,20 +121,20 @@ class TinyBus
101
121
  msg = @annotator.pipe(msg)
102
122
  msg = @translator&.pipe(msg) || msg
103
123
 
104
- topic = msg['topic']
124
+ topic = msg[@topic_key]
105
125
 
106
126
  subbers = @subs[topic]
107
127
 
108
- if subbers
128
+ if (subbers&.length || 0) > 0
109
129
  @stats[topic] += 1
110
130
  subbers.each{|s| s.msg(msg) }
111
- @log.sent msg
131
+ @log.send(@sent_level, msg)
112
132
  else
113
133
  if @raise_on_dead
114
134
  raise TinyBus::DeadMsgError.new("Could not deliver message to topic `#{topic}'")
115
135
  else
116
- @stats['.dead'] += 1
117
- @dead.dead msg
136
+ @stats[@dead_key] += 1
137
+ @dead.send(@dead_level, msg)
118
138
  end
119
139
  end
120
140
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_bus
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Lunt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-03 00:00:00.000000000 Z
11
+ date: 2022-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tiny_log