evt-message_store 1.0.1.2 → 1.1.0.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 +4 -4
- data/lib/message_store.rb +3 -2
- data/lib/message_store/controls.rb +0 -1
- data/lib/message_store/controls/get.rb +5 -2
- data/lib/message_store/controls/get_last.rb +1 -1
- data/lib/message_store/controls/read.rb +7 -1
- data/lib/message_store/get.rb +3 -57
- data/lib/message_store/get/stream/last.rb +64 -0
- data/lib/message_store/get/stream/last/substitute.rb +29 -0
- data/lib/message_store/get/substitute.rb +72 -0
- data/lib/message_store/postgres +1 -0
- data/lib/message_store/postgres.rb +1 -0
- data/lib/message_store/read.rb +1 -0
- data/lib/message_store/read/iterator.rb +23 -35
- metadata +7 -5
- data/lib/message_store/controls/iterator.rb +0 -26
- data/lib/message_store/get/last.rb +0 -62
- data/lib/message_store/get/last/substitute.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40121815466711f7a023e49b5c02c8439456ef0eff75171a2ba0f56513358774
|
4
|
+
data.tar.gz: 4d3ce500d096eb4b877722b8dd6052cc6bcb8f7f7b90bba124453272e07a1d9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: edeac71d9c4a5d8abcea0d48e6598007b05d88760a58fc62bd456a146f84f33383e15ce179415705d404639c1db9d14812409fc86fa6ebd51318cef65915ae58
|
7
|
+
data.tar.gz: 1c3d8ae0f92318f2742e9649595110d0fa777058b9f46ba1ffcf77b0304d9bf95224ed054d8938535b9f37519d2589bd7eb6bc79d46a9bc6be0aed7a6fe5f521
|
data/lib/message_store.rb
CHANGED
@@ -20,8 +20,9 @@ require 'message_store/stream_name'
|
|
20
20
|
require 'message_store/log'
|
21
21
|
|
22
22
|
require 'message_store/get'
|
23
|
-
require 'message_store/get/
|
24
|
-
require 'message_store/get/last
|
23
|
+
require 'message_store/get/substitute'
|
24
|
+
require 'message_store/get/stream/last'
|
25
|
+
require 'message_store/get/stream/last/substitute'
|
25
26
|
require 'message_store/read/iterator'
|
26
27
|
require 'message_store/read'
|
27
28
|
require 'message_store/write'
|
@@ -1,12 +1,15 @@
|
|
1
1
|
module MessageStore
|
2
2
|
module Controls
|
3
3
|
module Get
|
4
|
-
def self.example(batch_size: nil, count: nil, global_position_offset: nil)
|
4
|
+
def self.example(stream_name: nil, batch_size: nil, count: nil, global_position_offset: nil)
|
5
|
+
stream_name ||= StreamName.example
|
5
6
|
batch_size ||= 1
|
6
7
|
count ||= 1
|
7
8
|
global_position_offset ||= -> (x) { x ** 2 }
|
8
9
|
|
9
|
-
get = MessageStore::Get::Substitute.build
|
10
|
+
get = MessageStore::Get::Substitute.build
|
11
|
+
get.stream_name = stream_name
|
12
|
+
get.batch_size = batch_size
|
10
13
|
|
11
14
|
elements = (0..(count - 1)).to_a
|
12
15
|
|
@@ -3,7 +3,13 @@ module MessageStore
|
|
3
3
|
module Read
|
4
4
|
def self.example(stream_name: nil)
|
5
5
|
stream_name ||= StreamName.example
|
6
|
-
|
6
|
+
|
7
|
+
read = Example.build(stream_name)
|
8
|
+
|
9
|
+
get = Get.example(stream_name: stream_name)
|
10
|
+
read.iterator.get = get
|
11
|
+
|
12
|
+
read
|
7
13
|
end
|
8
14
|
|
9
15
|
class Example
|
data/lib/message_store/get.rb
CHANGED
@@ -8,63 +8,9 @@ module MessageStore
|
|
8
8
|
include Log::Dependency
|
9
9
|
|
10
10
|
abstract :call
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
class Substitute
|
15
|
-
include Initializer
|
16
|
-
include Virtual
|
17
|
-
|
18
|
-
include Get
|
19
|
-
|
20
|
-
initializer na(:batch_size)
|
21
|
-
|
22
|
-
def batch_size
|
23
|
-
@batch_size ||= 1
|
24
|
-
end
|
25
|
-
|
26
|
-
def items
|
27
|
-
@items ||= []
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.build(batch_size: nil, session: nil)
|
31
|
-
new(batch_size)
|
32
|
-
end
|
33
|
-
|
34
|
-
def call(stream_name=nil, position: nil)
|
35
|
-
position ||= 0
|
36
|
-
|
37
|
-
logger.trace(tag: :get) { "Getting (Position: #{position}, Batch Size: #{batch_size}, Stream Name: #{stream_name.inspect})" }
|
38
|
-
|
39
|
-
logger.debug(tag: :data) { "Items: \n#{items.pretty_inspect}" }
|
40
|
-
logger.debug(tag: :data) { "Position: #{position.inspect}" }
|
41
|
-
logger.debug(tag: :data) { "Batch Size: #{batch_size.inspect}" }
|
42
|
-
|
43
|
-
unless self.class.category?(stream_name)
|
44
|
-
index = (items.index { |i| i.position >= position })
|
45
|
-
else
|
46
|
-
index = (items.index { |i| i.global_position >= position })
|
47
|
-
end
|
48
|
-
|
49
|
-
logger.debug(tag: :data) { "Index: #{index.inspect}" }
|
50
|
-
|
51
|
-
if index.nil?
|
52
|
-
items = []
|
53
|
-
else
|
54
|
-
range = index..(index + batch_size - 1)
|
55
|
-
logger.debug(tag: :data) { "Range: #{range.pretty_inspect}" }
|
56
|
-
|
57
|
-
items = self.items[range]
|
58
|
-
end
|
59
|
-
|
60
|
-
logger.info(tag: :data) { "Got: \n#{items.pretty_inspect}" }
|
61
|
-
logger.info(tag: :get) { "Finished getting (Position: #{position}, Stream Name: #{stream_name.inspect})" }
|
62
|
-
|
63
|
-
items
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.category?(stream_name)
|
67
|
-
!stream_name.include?('-')
|
11
|
+
abstract :stream_name
|
12
|
+
abstract :batch_size
|
13
|
+
abstract :last_position
|
68
14
|
end
|
69
15
|
end
|
70
16
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module MessageStore
|
2
|
+
module Get
|
3
|
+
module Stream
|
4
|
+
module Last
|
5
|
+
def self.included(cls)
|
6
|
+
cls.class_exec do
|
7
|
+
include Dependency
|
8
|
+
include Virtual
|
9
|
+
include Log::Dependency
|
10
|
+
|
11
|
+
extend Build
|
12
|
+
extend Call
|
13
|
+
extend Configure
|
14
|
+
|
15
|
+
prepend InstanceActuator
|
16
|
+
|
17
|
+
virtual :configure
|
18
|
+
abstract :call
|
19
|
+
|
20
|
+
const_set :Substitute, Substitute
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module InstanceActuator
|
25
|
+
def call(stream_name)
|
26
|
+
logger.trace(tag: :get) { "Getting last message data (Stream Name: #{stream_name})" }
|
27
|
+
|
28
|
+
message_data = super
|
29
|
+
|
30
|
+
logger.info(tag: :get) { "Finished getting message data (Stream Name: #{stream_name})" }
|
31
|
+
logger.info(tags: [:data, :message_data]) { message_data.pretty_inspect }
|
32
|
+
|
33
|
+
message_data
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
module Build
|
38
|
+
def build(session: nil)
|
39
|
+
instance = new
|
40
|
+
instance.configure(session: session)
|
41
|
+
instance
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
module Configure
|
46
|
+
def configure(receiver, session: nil, attr_name: nil)
|
47
|
+
attr_name ||= :get_last
|
48
|
+
|
49
|
+
instance = build(session: session)
|
50
|
+
receiver.public_send("#{attr_name}=", instance)
|
51
|
+
instance
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
module Call
|
56
|
+
def call(stream_name, session: nil)
|
57
|
+
instance = build(session: session)
|
58
|
+
instance.(stream_name)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module MessageStore
|
2
|
+
module Get
|
3
|
+
module Stream
|
4
|
+
module Last
|
5
|
+
module Substitute
|
6
|
+
def self.build
|
7
|
+
GetLast.new
|
8
|
+
end
|
9
|
+
|
10
|
+
class GetLast
|
11
|
+
include Get::Stream::Last
|
12
|
+
|
13
|
+
def call(stream_name)
|
14
|
+
streams[stream_name]
|
15
|
+
end
|
16
|
+
|
17
|
+
def set(stream_name, message_data)
|
18
|
+
streams[stream_name] = message_data
|
19
|
+
end
|
20
|
+
|
21
|
+
def streams
|
22
|
+
@streams ||= {}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module MessageStore
|
2
|
+
module Get
|
3
|
+
class Substitute
|
4
|
+
include Initializer
|
5
|
+
include Virtual
|
6
|
+
|
7
|
+
include Get
|
8
|
+
|
9
|
+
attr_accessor :stream_name
|
10
|
+
|
11
|
+
def batch_size
|
12
|
+
@batch_size ||= 1
|
13
|
+
end
|
14
|
+
attr_writer :batch_size
|
15
|
+
|
16
|
+
def items
|
17
|
+
@items ||= []
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.build
|
21
|
+
new
|
22
|
+
end
|
23
|
+
|
24
|
+
def call(position)
|
25
|
+
position ||= 0
|
26
|
+
|
27
|
+
logger.trace(tag: :get) { "Getting (Position: #{position}, Stream Name: #{stream_name.inspect}, Batch Size: #{batch_size})" }
|
28
|
+
|
29
|
+
logger.debug(tag: :data) { "Items: \n#{items.pretty_inspect}" }
|
30
|
+
logger.debug(tag: :data) { "Position: #{position.inspect}" }
|
31
|
+
logger.debug(tag: :data) { "Batch Size: #{batch_size.inspect}" }
|
32
|
+
|
33
|
+
# No specialized Gets for substitute
|
34
|
+
# Complexity has to be inline for the control
|
35
|
+
# Scott, Tue Oct 1 2019
|
36
|
+
unless self.class.category_stream?(stream_name)
|
37
|
+
index = (items.index { |i| i.position >= position })
|
38
|
+
else
|
39
|
+
index = (items.index { |i| i.global_position >= position })
|
40
|
+
end
|
41
|
+
|
42
|
+
logger.debug(tag: :data) { "Index: #{index.inspect}" }
|
43
|
+
|
44
|
+
if index.nil?
|
45
|
+
items = []
|
46
|
+
else
|
47
|
+
range = index..(index + batch_size - 1)
|
48
|
+
logger.debug(tag: :data) { "Range: #{range.pretty_inspect}" }
|
49
|
+
|
50
|
+
items = self.items[range]
|
51
|
+
end
|
52
|
+
|
53
|
+
logger.info(tag: :data) { "Got: \n#{items.pretty_inspect}" }
|
54
|
+
logger.info(tag: :get) { "Finished getting (Position: #{position}, Stream Name: #{stream_name.inspect})" }
|
55
|
+
|
56
|
+
items
|
57
|
+
end
|
58
|
+
|
59
|
+
def last_position(batch)
|
60
|
+
if self.class.category_stream?(stream_name)
|
61
|
+
batch.last.global_position
|
62
|
+
else
|
63
|
+
batch.last.position
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.category_stream?(stream_name)
|
68
|
+
StreamName.category?(stream_name)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
lib/message_store/Users/sbellware/projects/eventide/message-store-postgres/lib/message_store/postgre
|
@@ -0,0 +1 @@
|
|
1
|
+
lib/message_store/Users/sbellware/projects/eventide/message-store-postgres/lib/message_store/postgre
|
data/lib/message_store/read.rb
CHANGED
@@ -24,6 +24,7 @@ module MessageStore
|
|
24
24
|
module Build
|
25
25
|
def build(stream_name, position: nil, batch_size: nil, session: nil, **arguments)
|
26
26
|
new(stream_name, position, batch_size).tap do |instance|
|
27
|
+
Iterator.configure(instance, position)
|
27
28
|
instance.configure(session: session, **arguments)
|
28
29
|
end
|
29
30
|
end
|
@@ -1,23 +1,12 @@
|
|
1
1
|
module MessageStore
|
2
2
|
module Read
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
include Virtual
|
9
|
-
include Log::Dependency
|
3
|
+
class Iterator
|
4
|
+
include Dependency
|
5
|
+
include Initializer
|
6
|
+
include Virtual
|
7
|
+
include Log::Dependency
|
10
8
|
|
11
|
-
|
12
|
-
extend Configure
|
13
|
-
|
14
|
-
dependency :get, Get
|
15
|
-
|
16
|
-
initializer :stream_name
|
17
|
-
|
18
|
-
abstract :last_position
|
19
|
-
end
|
20
|
-
end
|
9
|
+
dependency :get, Get
|
21
10
|
|
22
11
|
attr_accessor :batch
|
23
12
|
|
@@ -35,21 +24,17 @@ module MessageStore
|
|
35
24
|
get.batch_size
|
36
25
|
end
|
37
26
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
Log.get(self).debug { "Built Iterator (Stream Name: #{stream_name}, Starting Position: #{position.inspect})" }
|
43
|
-
end
|
27
|
+
def self.build(position=nil)
|
28
|
+
new.tap do |instance|
|
29
|
+
instance.starting_position = position
|
30
|
+
Log.get(self).debug { "Built Iterator (Starting Position: #{position.inspect})" }
|
44
31
|
end
|
45
32
|
end
|
46
33
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
receiver.public_send "#{attr_name}=", instance
|
52
|
-
end
|
34
|
+
def self.configure(receiver, position=nil, attr_name: nil)
|
35
|
+
attr_name ||= :iterator
|
36
|
+
instance = build(position)
|
37
|
+
receiver.public_send "#{attr_name}=", instance
|
53
38
|
end
|
54
39
|
|
55
40
|
def next
|
@@ -87,7 +72,7 @@ module MessageStore
|
|
87
72
|
|
88
73
|
logger.trace "Getting batch (Position: #{position.inspect})"
|
89
74
|
|
90
|
-
batch = get.(
|
75
|
+
batch = get.(position)
|
91
76
|
|
92
77
|
logger.debug { "Finished getting batch (Count: #{batch.length}, Position: #{position.inspect})" }
|
93
78
|
|
@@ -107,6 +92,10 @@ module MessageStore
|
|
107
92
|
next_position
|
108
93
|
end
|
109
94
|
|
95
|
+
def last_position
|
96
|
+
get.last_position(batch)
|
97
|
+
end
|
98
|
+
|
110
99
|
def reset(batch)
|
111
100
|
logger.trace { "Resetting batch" }
|
112
101
|
|
@@ -163,13 +152,12 @@ module MessageStore
|
|
163
152
|
false
|
164
153
|
end
|
165
154
|
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
initializer :stream_name
|
155
|
+
## Need not exist?
|
156
|
+
class Substitute < Iterator
|
157
|
+
## include Read::Iterator
|
170
158
|
|
171
159
|
def self.build()
|
172
|
-
new
|
160
|
+
new
|
173
161
|
end
|
174
162
|
end
|
175
163
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evt-message_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.1.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-
|
11
|
+
date: 2019-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: evt-casing
|
@@ -134,7 +134,6 @@ files:
|
|
134
134
|
- lib/message_store/controls/get.rb
|
135
135
|
- lib/message_store/controls/get_last.rb
|
136
136
|
- lib/message_store/controls/id.rb
|
137
|
-
- lib/message_store/controls/iterator.rb
|
138
137
|
- lib/message_store/controls/message_data.rb
|
139
138
|
- lib/message_store/controls/message_data/hash.rb
|
140
139
|
- lib/message_store/controls/message_data/metadata.rb
|
@@ -147,14 +146,17 @@ files:
|
|
147
146
|
- lib/message_store/controls/write.rb
|
148
147
|
- lib/message_store/expected_version.rb
|
149
148
|
- lib/message_store/get.rb
|
150
|
-
- lib/message_store/get/last.rb
|
151
|
-
- lib/message_store/get/last/substitute.rb
|
149
|
+
- lib/message_store/get/stream/last.rb
|
150
|
+
- lib/message_store/get/stream/last/substitute.rb
|
151
|
+
- lib/message_store/get/substitute.rb
|
152
152
|
- lib/message_store/log.rb
|
153
153
|
- lib/message_store/message_data.rb
|
154
154
|
- lib/message_store/message_data/hash/transform.rb
|
155
155
|
- lib/message_store/message_data/read.rb
|
156
156
|
- lib/message_store/message_data/write.rb
|
157
157
|
- lib/message_store/no_stream.rb
|
158
|
+
- lib/message_store/postgres
|
159
|
+
- lib/message_store/postgres.rb
|
158
160
|
- lib/message_store/read.rb
|
159
161
|
- lib/message_store/read/iterator.rb
|
160
162
|
- lib/message_store/stream_name.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module MessageStore
|
2
|
-
module Controls
|
3
|
-
module Iterator
|
4
|
-
def self.example(stream_name: nil, position: nil)
|
5
|
-
stream_name ||= StreamName.example
|
6
|
-
Example.build(stream_name, position: position)
|
7
|
-
end
|
8
|
-
|
9
|
-
class Example
|
10
|
-
include MessageStore::Read::Iterator
|
11
|
-
|
12
|
-
def last_position
|
13
|
-
unless self.class.category?(stream_name)
|
14
|
-
batch.last.position
|
15
|
-
else
|
16
|
-
batch.last.global_position
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.category?(stream_name)
|
21
|
-
!stream_name.include?('-')
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
module MessageStore
|
2
|
-
module Get
|
3
|
-
module Last
|
4
|
-
def self.included(cls)
|
5
|
-
cls.class_exec do
|
6
|
-
include Dependency
|
7
|
-
include Virtual
|
8
|
-
include Log::Dependency
|
9
|
-
|
10
|
-
extend Build
|
11
|
-
extend Call
|
12
|
-
extend Configure
|
13
|
-
|
14
|
-
prepend InstanceActuator
|
15
|
-
|
16
|
-
virtual :configure
|
17
|
-
abstract :call
|
18
|
-
|
19
|
-
const_set :Substitute, Substitute
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
module InstanceActuator
|
24
|
-
def call(stream_name)
|
25
|
-
logger.trace(tag: :get) { "Getting last message data (Stream Name: #{stream_name})" }
|
26
|
-
|
27
|
-
message_data = super
|
28
|
-
|
29
|
-
logger.info(tag: :get) { "Finished getting message data (Stream Name: #{stream_name})" }
|
30
|
-
logger.info(tags: [:data, :message_data]) { message_data.pretty_inspect }
|
31
|
-
|
32
|
-
message_data
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
module Build
|
37
|
-
def build(session: nil)
|
38
|
-
instance = new
|
39
|
-
instance.configure(session: session)
|
40
|
-
instance
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
module Configure
|
45
|
-
def configure(receiver, session: nil, attr_name: nil)
|
46
|
-
attr_name ||= :get_last
|
47
|
-
|
48
|
-
instance = build(session: session)
|
49
|
-
receiver.public_send("#{attr_name}=", instance)
|
50
|
-
instance
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
module Call
|
55
|
-
def call(stream_name, session: nil)
|
56
|
-
instance = build(session: session)
|
57
|
-
instance.(stream_name)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module MessageStore
|
2
|
-
module Get
|
3
|
-
module Last
|
4
|
-
module Substitute
|
5
|
-
def self.build
|
6
|
-
GetLast.new
|
7
|
-
end
|
8
|
-
|
9
|
-
class GetLast
|
10
|
-
include Get::Last
|
11
|
-
|
12
|
-
def call(stream_name)
|
13
|
-
streams[stream_name]
|
14
|
-
end
|
15
|
-
|
16
|
-
def set(stream_name, message_data)
|
17
|
-
streams[stream_name] = message_data
|
18
|
-
end
|
19
|
-
|
20
|
-
def streams
|
21
|
-
@streams ||= {}
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|