evt-consumer 1.1.0.0 → 2.2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2077ef49032cd7e88e66307072188bd14f3f5eb60c3889d3eaa2d8e32d398a91
4
- data.tar.gz: db192f1c6a7d6c7629200fdb71152d325ec05fcd27f1acf17d2f6f7a77088a77
3
+ metadata.gz: d005131cba1d68a95028facee2e86fb2936e29ae0fe296a746f4e0e25abfc910
4
+ data.tar.gz: caf16c231eb6195749b4b2190843ab87aed7735f4fd3b3da72555bab45f8ea76
5
5
  SHA512:
6
- metadata.gz: e80126fd3557847a29603838d917b11fbdc93b617cca9ac17ea2c68471d6c1cef76c9e15656a306bf4959ff6ea80f9615db120fb8c72d37ca8096b3c2ed5c187
7
- data.tar.gz: 4c64c89911619b136db60fc135619c17573410083ce86cf0fc4438254133b8bd1724f0123536393f58b783830a60c46248ba2cf62f58b96b8d4dd0852d52dcfd
6
+ metadata.gz: 332338327a4a4fc99a3010e1e62b0dd840d64914efba85d3f90a22a001df3215c43f49933b213ac6ae7bef78dfe2018b3cb6dcf051c40b42eb278e5d547dd0a8
7
+ data.tar.gz: 76e5105a629fbd97447d2423139b08ecf1d33a1cdb513bc662cacf3e4ec969888ee2b3da677fdc009583490f313d9067effac3e1c9087ee074ff9760d2bca24a
@@ -1,4 +1,6 @@
1
1
  module Consumer
2
+ Error = Class.new(RuntimeError)
3
+
2
4
  def self.included(cls)
3
5
  cls.class_exec do
4
6
  include Dependency
@@ -14,7 +16,7 @@ module Consumer
14
16
 
15
17
  prepend Configure
16
18
 
17
- initializer :stream_name
19
+ initializer :category
18
20
 
19
21
  attr_writer :identifier
20
22
  def identifier
@@ -35,7 +37,7 @@ module Consumer
35
37
 
36
38
  attr_accessor :poll_interval_milliseconds
37
39
 
38
- dependency :get
40
+ dependency :get, MessageStore::Get
39
41
  dependency :position_store, PositionStore
40
42
  dependency :subscription, Subscription
41
43
 
@@ -57,19 +59,22 @@ module Consumer
57
59
  update_position(message_data.global_position)
58
60
 
59
61
  logger.info { "Message dispatched (#{LogText.message_data(message_data)})" }
60
-
61
62
  rescue => error
62
63
  logger.error { "Error raised (Error Class: #{error.class}, Error Message: #{error.message}, #{LogText.message_data(message_data)})" }
63
64
  error_raised(error, message_data)
64
65
  end
65
66
 
66
67
  def start(&probe)
67
- logger.info(tag: :*) { "Starting consumer: #{self.class.name} (Stream: #{stream_name}, Identifier: #{identifier || '(none)'}, Position: #{subscription.position})" }
68
+ logger.info(tag: :*) { "Starting consumer: #{self.class.name} (Category: #{category}, Identifier: #{identifier || '(none)'}, Position: #{subscription.position})" }
69
+
70
+ if not MessageStore::StreamName.category?(category)
71
+ raise Error, "Consumer's stream name must be a category (Stream Name: #{category})"
72
+ end
68
73
 
69
74
  starting() if respond_to?(:starting)
70
75
 
71
76
  self.class.handler_registry.each do |handler|
72
- logger.info(tag: :*) { "Handler: #{handler.name} (Stream Name: #{stream_name}, Consumer: #{self.class.name})" }
77
+ logger.info(tag: :*) { "Handler: #{handler.name} (Category: #{category}, Consumer: #{self.class.name})" }
73
78
  end
74
79
 
75
80
  _, subscription_thread = ::Actor::Start.(subscription)
@@ -82,7 +87,7 @@ module Consumer
82
87
  probe.(self, [actor_thread, subscription_thread], [actor_address, subscription_address])
83
88
  end
84
89
 
85
- logger.info(tag: :*) { "Started consumer: #{self.class.name} (Stream: #{stream_name}, Identifier: #{identifier || '(none)'}, Position: #{subscription.position})" }
90
+ logger.info(tag: :*) { "Started consumer: #{self.class.name} (Category: #{category}, Identifier: #{identifier || '(none)'}, Position: #{subscription.position})" }
86
91
 
87
92
  AsyncInvocation::Incorrect
88
93
  end
@@ -105,13 +110,13 @@ module Consumer
105
110
 
106
111
  module LogText
107
112
  def self.message_data(message_data)
108
- "Type: #{message_data.type}, Stream: #{message_data.stream_name}, Position: #{message_data.position}, GlobalPosition: #{message_data.global_position}"
113
+ "Type: #{message_data.type}, Stream Name: #{message_data.stream_name}, Position: #{message_data.position}, GlobalPosition: #{message_data.global_position}"
109
114
  end
110
115
  end
111
116
 
112
117
  module Configure
113
118
  def configure(**kwargs)
114
- logger.trace { "Configuring (Stream Name: #{stream_name})" }
119
+ logger.trace { "Configuring (Category: #{category})" }
115
120
 
116
121
  super(**kwargs)
117
122
 
@@ -124,13 +129,13 @@ module Consumer
124
129
  poll_interval_milliseconds: poll_interval_milliseconds
125
130
  )
126
131
 
127
- logger.debug { "Done configuring (Stream Name: #{stream_name}, Starting Position: #{starting_position})" }
132
+ logger.debug { "Done configuring (Category: #{category}, Starting Position: #{starting_position})" }
128
133
  end
129
134
  end
130
135
 
131
136
  module Build
132
- def build(stream_name, position_update_interval: nil, poll_interval_milliseconds: nil, identifier: nil, **arguments)
133
- instance = new(stream_name)
137
+ def build(category, position_update_interval: nil, poll_interval_milliseconds: nil, identifier: nil, **arguments)
138
+ instance = new(category)
134
139
 
135
140
  unless identifier.nil?
136
141
  instance.identifier = identifier
@@ -146,8 +151,8 @@ module Consumer
146
151
  end
147
152
 
148
153
  module Start
149
- def start(stream_name, **arguments, &probe)
150
- instance = build stream_name, **arguments
154
+ def start(category, **arguments, &probe)
155
+ instance = build category, **arguments
151
156
  instance.start(&probe)
152
157
  end
153
158
  end
@@ -1,12 +1,12 @@
1
1
  module Consumer
2
2
  module Controls
3
3
  module Consumer
4
- def self.example(stream_name=nil, identifier: nil, handlers: nil)
5
- stream_name ||= StreamName.example
4
+ def self.example(category=nil, identifier: nil, handlers: nil)
5
+ category ||= Category.example
6
6
 
7
7
  cls = example_class(identifier: identifier, handlers: handlers)
8
8
 
9
- cls.new(stream_name)
9
+ cls.new(category)
10
10
  end
11
11
 
12
12
  def self.example_class(identifier: nil, handlers: nil)
@@ -2,10 +2,10 @@ module Consumer
2
2
  module Controls
3
3
  module Consumer
4
4
  module ErrorHandler
5
- def self.example(stream_name=nil)
6
- stream_name ||= StreamName.example
5
+ def self.example(category=nil)
6
+ category ||= Category.example
7
7
 
8
- Example.new(stream_name)
8
+ Example.new(category)
9
9
  end
10
10
 
11
11
  class Example
@@ -32,7 +32,7 @@ module Consumer
32
32
  sleep_duration = ENV['SLEEP_DURATION'] || 100
33
33
  sleep_duration = sleep_duration.to_i
34
34
 
35
- Get::Incrementing.configure(self, stream_name, sleep_duration)
35
+ Get::Incrementing.configure(self, sleep_duration)
36
36
 
37
37
  PositionStore::File.configure(self, identifier: identifier)
38
38
  end
@@ -7,16 +7,19 @@ module Consumer
7
7
 
8
8
  configure :get
9
9
 
10
- initializer :stream_name, :frequency_milliseconds
10
+ def frequency_milliseconds
11
+ @frequency_milliseconds ||= Defaults.frequency_milliseconds
12
+ end
13
+ attr_writer :frequency_milliseconds
11
14
 
12
15
  def frequency_seconds
13
16
  frequency_milliseconds.to_f / 1000
14
17
  end
15
18
 
16
- def self.build(stream_name, frequency_milliseconds=nil)
17
- frequency_milliseconds ||= Defaults.frequency_milliseconds
18
-
19
- new(stream_name, frequency_milliseconds)
19
+ def self.build(frequency_milliseconds=nil)
20
+ instance = new
21
+ instance.frequency_milliseconds = frequency_milliseconds
22
+ instance
20
23
  end
21
24
 
22
25
  def batch_size
@@ -30,7 +33,6 @@ module Consumer
30
33
 
31
34
  batch_size.times.map do |offset|
32
35
  MessageData.example(
33
- stream_name,
34
36
  position + offset,
35
37
  offset
36
38
  )
@@ -48,14 +50,13 @@ module Consumer
48
50
  end
49
51
 
50
52
  class MessageData
51
- def self.example(stream_name, global_position, position)
53
+ def self.example(global_position, position)
52
54
  data = {
53
55
  :position => position,
54
56
  :global_position => global_position
55
57
  }
56
58
 
57
59
  Controls::MessageData.example(
58
- stream_name: stream_name,
59
60
  data: data,
60
61
  global_position: global_position,
61
62
  position: position
@@ -1,13 +1,11 @@
1
1
  module Consumer
2
2
  module Controls
3
3
  module MessageData
4
- def self.example(stream_name: nil, data: nil, position: nil, global_position: nil)
4
+ def self.example(data: nil, position: nil, global_position: nil)
5
5
  global_position ||= position
6
6
 
7
7
  message_data = MessageStore::Controls::MessageData::Read.example(data: data)
8
8
 
9
- message_data.stream_name = stream_name unless stream_name.nil?
10
-
11
9
  message_data.position = position unless position.nil?
12
10
  message_data.global_position = global_position unless global_position.nil?
13
11
 
@@ -1,3 +1,4 @@
1
+ ## Consider whether this is still needed after category rename
1
2
  module Consumer
2
3
  module Controls
3
4
  StreamName = Messaging::Controls::StreamName
@@ -1,8 +1,8 @@
1
1
  module Consumer
2
2
  module Controls
3
3
  module Subscription
4
- def self.example(stream_name: nil, next_batch: nil, position: nil, batch_size: nil, count: nil)
5
- get = Get.example(stream_name: stream_name, batch_size: batch_size, count: count)
4
+ def self.example(category: nil, next_batch: nil, position: nil, batch_size: nil, count: nil)
5
+ get = Get.example(stream_name: category, batch_size: batch_size, count: count)
6
6
 
7
7
  subscription = ::Consumer::Subscription.new(get)
8
8
 
@@ -46,20 +46,20 @@ module Consumer
46
46
  end
47
47
 
48
48
  handle :resupply do
49
- logger.trace { "Resupplying (Stream Name: #{get.stream_name}, Position: #{position})" }
49
+ logger.trace { "Resupplying (Category: #{get.category}, Position: #{position})" }
50
50
 
51
51
  batch = poll.() do
52
52
  get.(position)
53
53
  end
54
54
 
55
55
  if batch.nil? || batch.empty?
56
- logger.debug { "Did not resupply; no events available (Stream Name: #{get.stream_name}, Position: #{position})" }
56
+ logger.debug { "Did not resupply; no events available (Category: #{get.category}, Position: #{position})" }
57
57
 
58
58
  :resupply
59
59
  else
60
60
  self.next_batch = batch
61
61
 
62
- logger.debug { "Resupplied (Stream Name: #{get.stream_name}, Position: #{position}, Batch Size: #{batch.count})" }
62
+ logger.debug { "Resupplied (Category: #{get.category}, Position: #{position}, Batch Size: #{batch.count})" }
63
63
  end
64
64
  end
65
65
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evt-consumer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.0
4
+ version: 2.2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Eventide Project
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-02 00:00:00.000000000 Z
11
+ date: 2019-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ntl-actor
@@ -158,5 +158,5 @@ requirements: []
158
158
  rubygems_version: 3.0.1
159
159
  signing_key:
160
160
  specification_version: 4
161
- summary: Continuous subscription to a stream and message dispatching to handlers
161
+ summary: Continuous subscription to a category and message dispatching to handlers
162
162
  test_files: []