evt-consumer-postgres 1.0.0.0 → 1.0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 96c193045bd92689a6834e0cd0a4904d1aebd84e1a441bf78970189b1a649c69
4
- data.tar.gz: '043529ea03be099b8519dde655958fa344f14a74b4f8b2ec314ef8e4efde6c8b'
3
+ metadata.gz: 8b9e728d8d64095daf2e0e8b4c257a33442d3fee6aa04796cf3261371b4b9c23
4
+ data.tar.gz: eef0e89380daecf69c95c13b4d47d5c594201fd22c7ab0be021427652ed4ba53
5
5
  SHA512:
6
- metadata.gz: d1007ba69906a25a95f54fadbff7e5b1f7f0487c357a01d377fbfaead7091c642306a0ff627d09fda2ba49066ce5f49085ee39b9f8365bd414ae5582d7f66e43
7
- data.tar.gz: e588b1a0e55452640401764acfe02c4fc0e3e22b442717f87bf7a4564057bc16ece4a98c7da227dc0edb6e35264e416b5c1481b5b3620ca22e82f73357e3c344
6
+ metadata.gz: 196daa0e73fce6a1d842db093d6bba4f8811977b313befb7cc8ae67ed68ea7a686335665892db021045a411c9c1cdbaaa55bfa86c3237af84f5039ed482f4db1
7
+ data.tar.gz: f479fd56d52159824c1e8c7d1bf0528f950ca5ffa37633cdb8a504f73369cbce88705177f4f1a976c2afce25528c7e1e9150a7c121c5f377e53f6c483de60b2b
@@ -0,0 +1,19 @@
1
+ module Consumer
2
+ module Postgres
3
+ module Controls
4
+ module Condition
5
+ module Correlation
6
+ def self.example(category:)
7
+ "metadata->>'correlationStreamName' like '#{category}-%'"
8
+ end
9
+ end
10
+
11
+ module Ordinary
12
+ def self.example
13
+ 'some condition'
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -4,20 +4,7 @@ module Consumer
4
4
  module Consumer
5
5
  class Example
6
6
  include ::Consumer::Postgres
7
- end
8
-
9
- class Incrementing
10
- include ::Consumer::Postgres
11
-
12
- class Handler
13
- include Messaging::Handle
14
- include Log::Dependency
15
7
 
16
- def handle(message_data)
17
- logger.info { "Handled message (StreamName: #{message_data.stream_name}, GlobalPosition: #{message_data.global_position})" }
18
- logger.debug { message_data.data.pretty_inspect }
19
- end
20
- end
21
8
  handler Handler
22
9
  end
23
10
 
@@ -0,0 +1,15 @@
1
+ module Consumer
2
+ module Postgres
3
+ module Controls
4
+ class Handler
5
+ include Messaging::Handle
6
+ include Log::Dependency
7
+
8
+ def handle(message_data)
9
+ logger.info "Handled message (StreamName: #{message_data.stream_name}, Correlation Stream Name: #{message_data.metadata[:correlation_stream_name]}, GlobalPosition: #{message_data.global_position})"
10
+ logger.debug message_data.data.pretty_inspect
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module Consumer
2
+ module Postgres
3
+ module Controls
4
+ module Message
5
+ def self.example(attribute: nil, correlation: nil)
6
+ message = Messaging::Controls::Message.example(some_attribute: attribute)
7
+ message.metadata.correlation_stream_name = correlation unless correlation.nil?
8
+
9
+ message
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -6,9 +6,12 @@ require 'consumer/postgres/controls/category'
6
6
  require 'consumer/postgres/controls/id'
7
7
  require 'consumer/postgres/controls/identifier'
8
8
  require 'consumer/postgres/controls/message_data'
9
+ require 'consumer/postgres/controls/message'
9
10
  require 'consumer/postgres/controls/position'
10
11
  require 'consumer/postgres/controls/position/store/recorded'
11
12
  require 'consumer/postgres/controls/position/stream/write'
12
13
  require 'consumer/postgres/controls/stream_name'
13
14
 
15
+ require 'consumer/postgres/controls/condition'
16
+ require 'consumer/postgres/controls/handler'
14
17
  require 'consumer/postgres/controls/consumer'
@@ -3,13 +3,44 @@ module Consumer
3
3
  def self.included(cls)
4
4
  cls.class_exec do
5
5
  include ::Consumer
6
+
7
+ attr_accessor :batch_size
8
+ attr_accessor :condition
9
+ attr_accessor :correlation
10
+ attr_accessor :composed_condition
11
+ end
12
+ end
13
+
14
+ def starting
15
+ unless batch_size.nil?
16
+ logger.info(tag: :*) { "Batch Size: #{batch_size}" }
17
+ end
18
+
19
+ unless correlation.nil?
20
+ logger.info(tag: :*) { "Correlation: #{correlation}" }
21
+ end
22
+
23
+ unless condition.nil?
24
+ logger.info(tag: :*) { "Condition: #{composed_condition}" }
25
+ end
26
+
27
+ unless composed_condition.nil?
28
+ logger.debug(tag: :*) { "Composed Condition: #{composed_condition}" }
6
29
  end
7
30
  end
8
31
 
9
- def configure(batch_size: nil, settings: nil, condition: nil)
32
+ def configure(batch_size: nil, settings: nil, correlation: nil, condition: nil)
33
+ composed_condition = Condition.compose(correlation: correlation, condition: condition)
34
+
35
+ self.batch_size = batch_size
36
+ self.correlation = correlation
37
+ self.condition = condition
38
+ self.composed_condition = composed_condition
39
+
10
40
  MessageStore::Postgres::Session.configure(self, settings: settings)
11
41
 
12
42
  session = self.session
43
+
13
44
  PositionStore.configure(
14
45
  self,
15
46
  stream_name,
@@ -21,9 +52,43 @@ module Consumer
21
52
  MessageStore::Postgres::Get.configure(
22
53
  self,
23
54
  batch_size: batch_size,
24
- condition: condition,
55
+ condition: composed_condition,
25
56
  session: get_session
26
57
  )
27
58
  end
59
+
60
+ module Condition
61
+ extend self
62
+
63
+ def compose(condition: nil, correlation: nil)
64
+ composed_condition = []
65
+
66
+ unless condition.nil?
67
+ composed_condition << condition
68
+ end
69
+
70
+ unless correlation.nil?
71
+ Correlation.assure(correlation)
72
+
73
+ composed_condition << "metadata->>'correlationStreamName' like '#{correlation}-%'"
74
+ end
75
+
76
+ return nil if composed_condition.empty?
77
+
78
+ sql_condition = composed_condition.join(' AND ')
79
+
80
+ sql_condition
81
+ end
82
+ end
83
+
84
+ module Correlation
85
+ Error = Class.new(RuntimeError)
86
+
87
+ def self.assure(correlation)
88
+ unless MessageStore::StreamName.category?(correlation)
89
+ raise Correlation::Error, "Correlation must be a category (Correlation: #{correlation})"
90
+ end
91
+ end
92
+ end
28
93
  end
29
94
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evt-consumer-postgres
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.0
4
+ version: 1.0.1.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: 2018-11-04 00:00:00.000000000 Z
11
+ date: 2018-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evt-consumer
@@ -61,9 +61,12 @@ files:
61
61
  - lib/consumer/postgres.rb
62
62
  - lib/consumer/postgres/controls.rb
63
63
  - lib/consumer/postgres/controls/category.rb
64
+ - lib/consumer/postgres/controls/condition.rb
64
65
  - lib/consumer/postgres/controls/consumer.rb
66
+ - lib/consumer/postgres/controls/handler.rb
65
67
  - lib/consumer/postgres/controls/id.rb
66
68
  - lib/consumer/postgres/controls/identifier.rb
69
+ - lib/consumer/postgres/controls/message.rb
67
70
  - lib/consumer/postgres/controls/message_data.rb
68
71
  - lib/consumer/postgres/controls/position.rb
69
72
  - lib/consumer/postgres/controls/position/store/recorded.rb
@@ -93,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
96
  version: '0'
94
97
  requirements: []
95
98
  rubyforge_project:
96
- rubygems_version: 2.7.6
99
+ rubygems_version: 2.7.3
97
100
  signing_key:
98
101
  specification_version: 4
99
102
  summary: Postgres implementation of continuous subscription to a stream and message