evt-consumer-postgres 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: 861ae33dd8cdc77daa5ff1a5772a92197668213c7a40b3b043541184925af076
4
- data.tar.gz: b5c2826abe9d2b894206d089d566983386535229206c2ff1d0f629f36ec7a078
3
+ metadata.gz: d70c7356d131dd6d6cbe9242ddfa54ac600e40cea725de3232042cb3b0cac802
4
+ data.tar.gz: 2aecd3ff64cd6258b48b1ebcb95f432606d998b386592f4cdc94775d86ea2faa
5
5
  SHA512:
6
- metadata.gz: 52a29b32a7dc60e891d3faf0b023f24baaf4ce1ddbe45419767b32b407a53d9e9bebcf74f492f3e0b7fe8e934cc2eedf18cd33c87e9cacf82313a3e9d2788d02
7
- data.tar.gz: 714324b6df2649764467298e9826e6ae5e0c23eb490dcdadcb566124dbf93e8edb94f6e6e54e0116d14b98480349a7c236e5245dac7a1957db49ca1512fb6a4d
6
+ metadata.gz: 02e7fa5d900dd3e9afa138aedb2f257fd7b2d16dae4fbf8373981ddab290c63d2854e555921c0b06894c679f5cf2bf15b68df2c3a69daba037624ee9868a9b00
7
+ data.tar.gz: bc1c3e7c2cfc5db09cdb805463602c450785a0b9d283044ad77a3921ba40004c2c7a7c7b4f851e739a47f09faa3a4359c30143cf41dd02d5634d334c0db509d1
@@ -2,6 +2,18 @@ module Consumer
2
2
  module Postgres
3
3
  module Controls
4
4
  Category = MessageStore::Postgres::Controls::Category
5
+
6
+ module Category
7
+ module Position
8
+ def self.example
9
+ category = Controls::Category.example
10
+
11
+ type = 'position'
12
+
13
+ MessageStore::StreamName.stream_name(category, type: type)
14
+ end
15
+ end
16
+ end
5
17
  end
6
18
  end
7
19
  end
@@ -5,9 +5,9 @@ module Consumer
5
5
  module Stream
6
6
  module Write
7
7
  def self.call(stream_name=nil, position: nil)
8
- stream_name ||= StreamName::Position.example
8
+ stream_name ||= Category::Position.example
9
9
 
10
- message = Store::Recorded.example position: position
10
+ message = Store::Recorded.example(position: position)
11
11
 
12
12
  Messaging::Postgres::Write.(message, stream_name)
13
13
 
@@ -5,27 +5,18 @@ module Consumer
5
5
 
6
6
  module StreamName
7
7
  module Position
8
- def self.example(id: nil, randomize_category: nil, types: nil)
8
+ def self.example(id: nil, category: nil, types: nil)
9
+ category ||= Controls::Category.example(category: category)
9
10
  types ||= []
10
11
 
11
12
  types << 'position'
12
13
 
13
14
  StreamName.example(
14
15
  id: id,
15
- randomize_category: randomize_category,
16
+ category: category,
16
17
  types: types
17
18
  )
18
19
  end
19
-
20
- module Category
21
- def self.example(category: nil)
22
- category = Controls::Category.example category: category
23
-
24
- position_type = 'position'
25
-
26
- MessageStore::StreamName.stream_name(category, type: position_type)
27
- end
28
- end
29
20
  end
30
21
  end
31
22
  end
@@ -5,13 +5,11 @@ require 'message_store/postgres/controls'
5
5
  require 'consumer/postgres/controls/category'
6
6
  require 'consumer/postgres/controls/id'
7
7
  require 'consumer/postgres/controls/identifier'
8
- require 'consumer/postgres/controls/message_data'
9
8
  require 'consumer/postgres/controls/message'
10
9
  require 'consumer/postgres/controls/position'
11
10
  require 'consumer/postgres/controls/position/store/recorded'
12
11
  require 'consumer/postgres/controls/position/stream/write'
13
12
  require 'consumer/postgres/controls/stream_name'
14
13
 
15
- require 'consumer/postgres/controls/condition'
16
14
  require 'consumer/postgres/controls/handler'
17
15
  require 'consumer/postgres/controls/consumer'
@@ -2,16 +2,24 @@ module Consumer
2
2
  module Postgres
3
3
  class PositionStore
4
4
  module StreamName
5
+ Error = Class.new(RuntimeError)
6
+
5
7
  def self.position_stream_name(stream_name, consumer_identifier: nil)
8
+ if not MessageStore::StreamName.category?(stream_name)
9
+ raise Error, "Position store's stream name must be a category (Stream Name: #{stream_name})"
10
+ end
11
+
6
12
  stream_id = MessageStore::StreamName.get_id(stream_name)
7
- entity = MessageStore::StreamName.get_entity_name(stream_name)
13
+ entity_name = MessageStore::StreamName.get_entity_name(stream_name)
8
14
  type_list = MessageStore::StreamName.get_types(stream_name)
9
15
 
10
16
  position_type = Type.get
11
17
 
12
- type_list << position_type unless type_list.include?(position_type)
18
+ if not type_list.include?(position_type)
19
+ type_list << position_type
20
+ end
13
21
 
14
- unless consumer_identifier.nil?
22
+ if not consumer_identifier.nil?
15
23
  if stream_id.nil?
16
24
  stream_id = consumer_identifier
17
25
  else
@@ -20,7 +28,7 @@ module Consumer
20
28
  end
21
29
 
22
30
  MessageStore::StreamName.stream_name(
23
- entity,
31
+ entity_name,
24
32
  stream_id,
25
33
  types: type_list
26
34
  )
@@ -6,10 +6,9 @@ module Consumer
6
6
 
7
7
  attr_accessor :batch_size
8
8
  attr_accessor :correlation
9
- attr_accessor :group_size
10
9
  attr_accessor :group_member
10
+ attr_accessor :group_size
11
11
  attr_accessor :condition
12
- attr_accessor :composed_condition
13
12
  end
14
13
  end
15
14
 
@@ -22,114 +21,44 @@ module Consumer
22
21
  logger.info(tag: :*) { "Correlation: #{correlation}" }
23
22
  end
24
23
 
25
- unless group_size.nil? && group_member.nil?
26
- logger.info(tag: :*) { "Group Size: #{group_size.inspect}, Group Member: #{group_member.inspect}" }
24
+ unless group_member.nil? && group_size.nil?
25
+ logger.info(tag: :*) { "Group Member: #{group_member.inspect}, Group Size: #{group_size.inspect}" }
27
26
  end
28
27
 
29
28
  unless condition.nil?
30
29
  logger.info(tag: :*) { "Condition: #{condition}" }
31
30
  end
32
-
33
- unless composed_condition.nil?
34
- logger.debug(tag: :*) { "Composed Condition: #{composed_condition}" }
35
- end
36
31
  end
37
32
 
38
- def configure(batch_size: nil, settings: nil, correlation: nil, group_size: nil, group_member: nil, condition: nil)
39
- composed_condition = Condition.compose(correlation: correlation, group_size: group_size, group_member: group_member, condition: condition)
40
-
33
+ def configure(batch_size: nil, settings: nil, correlation: nil, group_member: nil, group_size: nil, condition: nil)
41
34
  self.batch_size = batch_size
42
35
  self.correlation = correlation
43
- self.group_size = group_size
44
36
  self.group_member = group_member
37
+ self.group_size = group_size
45
38
  self.condition = condition
46
- self.composed_condition = composed_condition
47
39
 
48
40
  MessageStore::Postgres::Session.configure(self, settings: settings)
49
-
50
41
  session = self.session
51
42
 
52
- PositionStore.configure(
53
- self,
54
- stream_name,
55
- consumer_identifier: identifier,
56
- session: session
57
- )
58
-
59
43
  get_session = MessageStore::Postgres::Session.build(settings: settings)
60
- MessageStore::Postgres::Get.configure(
44
+
45
+ MessageStore::Postgres::Get::Category.configure(
61
46
  self,
62
- stream_name,
47
+ category,
63
48
  batch_size: batch_size,
64
- condition: composed_condition,
49
+ correlation: correlation,
50
+ consumer_group_member: group_member,
51
+ consumer_group_size: group_size,
52
+ condition: condition,
65
53
  session: get_session
66
54
  )
67
- end
68
-
69
- module Condition
70
- extend self
71
-
72
- def compose(condition: nil, correlation: nil, group_size: nil, group_member: nil)
73
- composed_condition = []
74
-
75
- unless condition.nil?
76
- composed_condition << condition
77
- end
78
-
79
- unless correlation.nil?
80
- Correlation.assure(correlation)
81
- composed_condition << "metadata->>'correlationStreamName' like '#{correlation}-%'"
82
- end
83
-
84
- unless group_size.nil? && group_member.nil?
85
- Group.assure(group_size, group_member)
86
- composed_condition << "@hash_64(stream_name) % #{group_size} = #{group_member}"
87
- end
88
-
89
- return nil if composed_condition.empty?
90
55
 
91
- sql_condition = composed_condition.join(' AND ')
92
-
93
- sql_condition
94
- end
95
- end
96
-
97
- module Correlation
98
- Error = Class.new(RuntimeError)
99
-
100
- def self.assure(correlation)
101
- unless MessageStore::StreamName.category?(correlation)
102
- raise Correlation::Error, "Correlation must be a category (Correlation: #{correlation})"
103
- end
104
- end
105
- end
106
-
107
- module Group
108
- Error = Class.new(RuntimeError)
109
-
110
- def self.assure(group_size, group_member)
111
- error_message = 'Consumer group definition is incorrect.'
112
-
113
- arguments_count = [group_size, group_member].compact.length
114
-
115
- if arguments_count == 1
116
- raise Error, "#{error_message} Group size and group member are both required. (Group Size: #{group_size.inspect}, Group Member: #{group_member.inspect})"
117
- end
118
-
119
- return if arguments_count == 0
120
-
121
- if group_size < 1
122
- raise Error, "#{error_message} Group size must not be less than 1. (Group Size: #{group_size.inspect}, Group Member: #{group_member.inspect})"
123
- end
124
-
125
- if group_member < 0
126
- raise Error, "#{error_message} Group member must not be less than 0. (Group Size: #{group_size.inspect}, Group Member: #{group_member.inspect})"
127
- end
128
-
129
- if group_member >= group_size
130
- raise Error, "#{error_message} Group member must be at least one less than group size. (Group Size: #{group_size.inspect}, Group Member: #{group_member.inspect})"
131
- end
132
- end
56
+ PositionStore.configure(
57
+ self,
58
+ category,
59
+ consumer_identifier: identifier,
60
+ session: session
61
+ )
133
62
  end
134
63
  end
135
64
  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.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: evt-consumer
@@ -61,13 +61,11 @@ 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
65
64
  - lib/consumer/postgres/controls/consumer.rb
66
65
  - lib/consumer/postgres/controls/handler.rb
67
66
  - lib/consumer/postgres/controls/id.rb
68
67
  - lib/consumer/postgres/controls/identifier.rb
69
68
  - lib/consumer/postgres/controls/message.rb
70
- - lib/consumer/postgres/controls/message_data.rb
71
69
  - lib/consumer/postgres/controls/position.rb
72
70
  - lib/consumer/postgres/controls/position/store/recorded.rb
73
71
  - lib/consumer/postgres/controls/position/stream/write.rb
@@ -98,6 +96,6 @@ requirements: []
98
96
  rubygems_version: 3.0.1
99
97
  signing_key:
100
98
  specification_version: 4
101
- summary: Postgres implementation of continuous subscription to a stream and message
99
+ summary: Postgres implementation of continuous subscription to a category and message
102
100
  dispatching to handlers
103
101
  test_files: []
@@ -1,25 +0,0 @@
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 ConsumerGroup
12
- def self.example(group_size:, group_member:)
13
- "@hash_64(stream_name) % #{group_size} = #{group_member}"
14
- end
15
- end
16
-
17
- module Ordinary
18
- def self.example
19
- 'some condition'
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,7 +0,0 @@
1
- module Consumer
2
- module Postgres
3
- module Controls
4
- MessageData = ::Consumer::Controls::MessageData
5
- end
6
- end
7
- end