aggro 0.0.3 → 0.0.4
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/.travis.yml +1 -5
- data/aggro.gemspec +1 -3
- data/lib/aggro.rb +25 -7
- data/lib/aggro/aggregate.rb +33 -6
- data/lib/aggro/attribute_dsl.rb +8 -0
- data/lib/aggro/client.rb +4 -0
- data/lib/aggro/cluster_config.rb +5 -0
- data/lib/aggro/concurrent_actor.rb +1 -1
- data/lib/aggro/event_bus.rb +5 -2
- data/lib/aggro/event_serializer.rb +2 -2
- data/lib/aggro/file_store.rb +2 -2
- data/lib/aggro/file_store/reader.rb +11 -3
- data/lib/aggro/file_store/writer.rb +2 -2
- data/lib/aggro/handler/query.rb +19 -7
- data/lib/aggro/logging.rb +16 -0
- data/lib/aggro/marshal_stream.rb +123 -0
- data/lib/aggro/message/events.rb +6 -2
- data/lib/aggro/message/server_error.rb +20 -0
- data/lib/aggro/node.rb +3 -1
- data/lib/aggro/projection.rb +1 -0
- data/lib/aggro/server.rb +1 -5
- data/lib/aggro/subscription.rb +16 -2
- data/lib/aggro/transform/boolean.rb +14 -2
- data/lib/aggro/transform/date.rb +22 -0
- data/lib/aggro/transform/string.rb +2 -2
- data/lib/aggro/transform/time.rb +22 -0
- data/lib/aggro/version.rb +1 -1
- data/lib/aggro/zeromq_transport.rb +44 -0
- data/lib/aggro/{nanomsg_transport → zeromq_transport}/client.rb +11 -9
- data/lib/aggro/{nanomsg_transport → zeromq_transport}/publisher.rb +11 -8
- data/lib/aggro/zeromq_transport/server.rb +92 -0
- data/lib/aggro/{nanomsg_transport → zeromq_transport}/subscriber.rb +23 -24
- data/spec/lib/aggro/event_serializer_spec.rb +1 -1
- data/spec/lib/aggro/file_store/reader_spec.rb +2 -1
- data/spec/lib/aggro/file_store/writer_spec.rb +10 -7
- data/spec/lib/aggro/local_node_spec.rb +2 -2
- data/spec/lib/aggro/marshal_stream_spec.rb +17 -0
- data/spec/lib/aggro/message/events_spec.rb +4 -3
- data/spec/lib/aggro/node_spec.rb +3 -3
- data/spec/lib/aggro/subscription_spec.rb +4 -2
- data/spec/lib/aggro/{nanomsg_transport_spec.rb → zeromq_transport_spec.rb} +11 -7
- data/spec/spec_helper.rb +8 -1
- metadata +17 -50
- data/lib/aggro/abstract_store.rb +0 -12
- data/lib/aggro/nanomsg_transport/connection.rb +0 -98
- data/lib/aggro/nanomsg_transport/publish.rb +0 -17
- data/lib/aggro/nanomsg_transport/raw_reply.rb +0 -18
- data/lib/aggro/nanomsg_transport/raw_request.rb +0 -18
- data/lib/aggro/nanomsg_transport/reply.rb +0 -17
- data/lib/aggro/nanomsg_transport/request.rb +0 -17
- data/lib/aggro/nanomsg_transport/server.rb +0 -84
- data/lib/aggro/nanomsg_transport/socket_error.rb +0 -20
- data/lib/aggro/nanomsg_transport/subscribe.rb +0 -27
- data/spec/lib/aggro/abstract_store_spec.rb +0 -15
- data/spec/lib/aggro/nanomsg_transport/socket_error_spec.rb +0 -21
@@ -0,0 +1,92 @@
|
|
1
|
+
module Aggro
|
2
|
+
module ZeroMQTransport
|
3
|
+
# Public: Server to handle messages from nanomsg clients.
|
4
|
+
class Server
|
5
|
+
DEFAULT_WORKER_COUNT = 16
|
6
|
+
|
7
|
+
# Private: Struct to hold request workload data.
|
8
|
+
class Workload < Struct.new(:identity, :message, :socket, :mutex)
|
9
|
+
def finish(reply)
|
10
|
+
mutex.synchronize do
|
11
|
+
socket.send_string identity, ZMQ::SNDMORE
|
12
|
+
socket.send_string '', ZMQ::SNDMORE
|
13
|
+
socket.send_string reply.to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class ServerAlreadyRunning < RuntimeError; end
|
19
|
+
|
20
|
+
def initialize(endpoint, callable = nil, &block)
|
21
|
+
fail ArgumentError unless callable || block_given?
|
22
|
+
|
23
|
+
@callable = block_given? ? block : callable
|
24
|
+
@endpoint = endpoint
|
25
|
+
@inproc_endpoint = "inproc://aggro-server-#{SecureRandom.hex}"
|
26
|
+
@reply_mutex = Mutex.new
|
27
|
+
@work_queue = Queue.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def start
|
31
|
+
fail ServerAlreadyRunning if @running
|
32
|
+
|
33
|
+
@running = true
|
34
|
+
start_master
|
35
|
+
DEFAULT_WORKER_COUNT.times { start_worker }
|
36
|
+
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
def stop
|
41
|
+
return self unless @running
|
42
|
+
|
43
|
+
@running = false
|
44
|
+
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def enqueue_request(socket)
|
51
|
+
id = ''
|
52
|
+
delimiter = ''
|
53
|
+
message = ''
|
54
|
+
|
55
|
+
socket.recv_string id
|
56
|
+
socket.recv_string delimiter
|
57
|
+
socket.recv_string message
|
58
|
+
|
59
|
+
@work_queue << Workload.new(id, message, socket, @reply_mutex)
|
60
|
+
end
|
61
|
+
|
62
|
+
def respond_to_request(workload)
|
63
|
+
return if workload.nil?
|
64
|
+
|
65
|
+
response = '00'
|
66
|
+
response = @callable.call(workload.message)
|
67
|
+
ensure
|
68
|
+
workload.finish response unless workload.nil?
|
69
|
+
end
|
70
|
+
|
71
|
+
def start_master
|
72
|
+
Concurrent::SingleThreadExecutor.new.post do
|
73
|
+
socket = ZeroMQTransport.context.socket(ZMQ::XREP)
|
74
|
+
poller = ZeroMQ::Poller.new
|
75
|
+
poller.register_readable socket
|
76
|
+
socket.setsockopt ZMQ::LINGER, ZeroMQTransport.linger
|
77
|
+
socket.bind @endpoint
|
78
|
+
|
79
|
+
(enqueue_request socket while poller.poll(1) > 0) while @running
|
80
|
+
|
81
|
+
socket.close
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def start_worker
|
86
|
+
Concurrent::SingleThreadExecutor.new.post do
|
87
|
+
respond_to_request @work_queue.pop while @running
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -1,7 +1,5 @@
|
|
1
|
-
require 'aggro/nanomsg_transport/subscribe'
|
2
|
-
|
3
1
|
module Aggro
|
4
|
-
module
|
2
|
+
module ZeroMQTransport
|
5
3
|
# Public: Handles subscribing to messages on a given endpoint.
|
6
4
|
class Subscriber
|
7
5
|
class SubscriberAlreadyRunning < RuntimeError; end
|
@@ -12,17 +10,12 @@ module Aggro
|
|
12
10
|
@callable = block_given? ? block : callable
|
13
11
|
@endpoint = endpoint
|
14
12
|
@mutex = Mutex.new
|
15
|
-
@selector = NIO::Selector.new
|
16
|
-
|
17
|
-
ObjectSpace.define_finalizer self, method(:stop)
|
18
13
|
end
|
19
14
|
|
20
15
|
def add_subscription(topic)
|
21
|
-
start unless @running
|
16
|
+
start unless @mutex.synchronize { @running }
|
22
17
|
|
23
|
-
@mutex.synchronize
|
24
|
-
sub_socket.add_subscription(topic)
|
25
|
-
end
|
18
|
+
@mutex.synchronize { sub_socket.setsockopt ZMQ::SUBSCRIBE, topic }
|
26
19
|
|
27
20
|
self
|
28
21
|
end
|
@@ -31,10 +24,10 @@ module Aggro
|
|
31
24
|
@mutex.synchronize do
|
32
25
|
return self if @running
|
33
26
|
|
34
|
-
|
27
|
+
sub_socket
|
35
28
|
start_on_thread
|
36
29
|
|
37
|
-
sleep 0.01
|
30
|
+
sleep 0.01 until @running
|
38
31
|
end
|
39
32
|
|
40
33
|
self
|
@@ -45,9 +38,6 @@ module Aggro
|
|
45
38
|
return self unless @running
|
46
39
|
|
47
40
|
@running = false
|
48
|
-
@selector.wakeup
|
49
|
-
|
50
|
-
sleep 0.01 until @selector.empty?
|
51
41
|
end
|
52
42
|
|
53
43
|
self
|
@@ -56,24 +46,33 @@ module Aggro
|
|
56
46
|
private
|
57
47
|
|
58
48
|
def handle_message
|
59
|
-
message =
|
60
|
-
|
49
|
+
message = ''
|
50
|
+
sub_socket.recv_string message
|
51
|
+
|
52
|
+
@callable.call message if message.present?
|
61
53
|
end
|
62
54
|
|
63
55
|
def sub_socket
|
64
|
-
@sub_socket ||=
|
56
|
+
@sub_socket ||= begin
|
57
|
+
socket = ZeroMQTransport.context.socket(ZMQ::SUB)
|
58
|
+
socket.connect @endpoint
|
59
|
+
|
60
|
+
socket
|
61
|
+
end
|
65
62
|
end
|
66
63
|
|
67
64
|
def start_on_thread
|
68
65
|
Concurrent::SingleThreadExecutor.new.post do
|
69
|
-
|
70
|
-
|
66
|
+
poller = ZeroMQ::Poller.new
|
67
|
+
poller.register_readable sub_socket
|
68
|
+
|
69
|
+
@running = true
|
70
|
+
|
71
|
+
(handle_message while poller.poll(1) > 0) while @running
|
71
72
|
|
72
|
-
|
73
|
+
poller.deregister_readable sub_socket
|
73
74
|
|
74
|
-
|
75
|
-
io.close
|
76
|
-
sub_socket.terminate
|
75
|
+
sub_socket.close
|
77
76
|
@sub_socket = nil
|
78
77
|
end
|
79
78
|
end
|
@@ -4,7 +4,8 @@ RSpec.describe FileStore::Reader do
|
|
4
4
|
let(:data) { { one: 9000, two: 'pizza', three: ['foo', 123] } }
|
5
5
|
let(:existing_event) { Event.new :tested_pizza, Time.new(2014), data }
|
6
6
|
|
7
|
-
let(:
|
7
|
+
let(:raw_content) { EventSerializer.serialize(existing_event) }
|
8
|
+
let(:data_content) { Marshal.dump raw_content }
|
8
9
|
let(:index_content) { Marshal.dump data_content.bytesize }
|
9
10
|
|
10
11
|
let(:data_io) { StringIO.new(data_content, 'rb') }
|
@@ -26,13 +26,14 @@ RSpec.describe FileStore::Writer do
|
|
26
26
|
writer.write(events)
|
27
27
|
|
28
28
|
index_io.rewind
|
29
|
-
offsets =
|
29
|
+
offsets = MarshalStream.new(index_io).to_a
|
30
30
|
expect(offsets.length).to eq 2
|
31
31
|
end
|
32
32
|
|
33
33
|
context 'when files already contain data' do
|
34
34
|
let(:existing_event) { Event.new 'tested_pizza', Time.new(2014), data }
|
35
|
-
let(:
|
35
|
+
let(:raw_content) { EventSerializer.serialize(existing_event) }
|
36
|
+
let(:data_content) { Marshal.dump raw_content }
|
36
37
|
let(:index_content) { Marshal.dump data_content.bytesize }
|
37
38
|
|
38
39
|
it 'should write event data to the data file' do
|
@@ -46,7 +47,7 @@ RSpec.describe FileStore::Writer do
|
|
46
47
|
writer.write(events)
|
47
48
|
|
48
49
|
index_io.rewind
|
49
|
-
offsets =
|
50
|
+
offsets = MarshalStream.new(index_io).to_a
|
50
51
|
expect(offsets.length).to eq 3
|
51
52
|
end
|
52
53
|
|
@@ -54,12 +55,14 @@ RSpec.describe FileStore::Writer do
|
|
54
55
|
writer.write(events)
|
55
56
|
|
56
57
|
index_io.rewind
|
57
|
-
offsets =
|
58
|
+
offsets = MarshalStream.new(index_io).to_a
|
58
59
|
|
59
60
|
expect do
|
60
|
-
|
61
|
-
|
62
|
-
|
61
|
+
[
|
62
|
+
data_content[0...(offsets[0])],
|
63
|
+
data_content[offsets[0]...offsets[1]],
|
64
|
+
data_content[offsets[1]...offsets[2]]
|
65
|
+
].each { |data| EventSerializer.deserialize Marshal.load(data) }
|
63
66
|
end.to_not raise_error
|
64
67
|
end
|
65
68
|
end
|
@@ -20,7 +20,7 @@ RSpec.describe LocalNode do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'should have a local TCP endpoint with the correct port' do
|
23
|
-
expect(node.endpoint).to eq 'tcp
|
23
|
+
expect(node.endpoint).to eq 'tcp://*:6000'
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -30,7 +30,7 @@ RSpec.describe LocalNode do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'should have a local TCP endpoint with the correct port' do
|
33
|
-
expect(node.publisher_endpoint).to eq 'tcp
|
33
|
+
expect(node.publisher_endpoint).to eq 'tcp://*:7000'
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
RSpec.describe MarshalStream do
|
2
|
+
let(:objects) { [1, :test, 'test'] }
|
3
|
+
let(:io) { StringIO.new }
|
4
|
+
|
5
|
+
describe '#each' do
|
6
|
+
it 'should work as expected' do
|
7
|
+
stream = MarshalStream.new(io).write(*objects)
|
8
|
+
|
9
|
+
io.rewind
|
10
|
+
result = stream.each.to_a
|
11
|
+
|
12
|
+
expect(result[0]).to eq 1
|
13
|
+
expect(result[1]).to eq :test
|
14
|
+
expect(result[2]).to eq 'test'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -3,13 +3,14 @@ RSpec.describe Message::Events do
|
|
3
3
|
|
4
4
|
let(:id) { SecureRandom.uuid }
|
5
5
|
|
6
|
-
let(:event1) { Event.new :tested_pizza, Time.
|
7
|
-
let(:event2) { Event.new :tested_system, Time.
|
6
|
+
let(:event1) { Event.new :tested_pizza, Time.now.round, foo: 'bar' }
|
7
|
+
let(:event2) { Event.new :tested_system, Time.now.round, bar: 'foo' }
|
8
8
|
let(:events) { [event1, event2] }
|
9
9
|
|
10
10
|
let(:binary_events) do
|
11
|
-
events.map { |event| EventSerializer.serialize event }.join
|
11
|
+
events.map { |event| Marshal.dump EventSerializer.serialize event }.join
|
12
12
|
end
|
13
|
+
|
13
14
|
let(:string) { EVENTS_TYPE_CODE + id + binary_events }
|
14
15
|
|
15
16
|
let(:message) { Message::Events.new(id, events) }
|
data/spec/lib/aggro/node_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
RSpec.describe Node do
|
2
|
-
subject(:node) { Node.new('flashing-sparkle') }
|
2
|
+
subject(:node) { Node.new('flashing-sparkle', 'tcp://127.0.0.1:5000') }
|
3
3
|
|
4
4
|
describe '#client' do
|
5
5
|
it 'should return a client for the node using the current transport' do
|
@@ -10,10 +10,10 @@ RSpec.describe Node do
|
|
10
10
|
describe '#publisher_endpoint' do
|
11
11
|
context 'node returns an Endpoint message' do
|
12
12
|
it 'should ask the node for the publisher endpoint' do
|
13
|
-
endpoint = Message::Endpoint.new('
|
13
|
+
endpoint = Message::Endpoint.new('tcp://*:8000')
|
14
14
|
allow(node).to receive(:client).and_return(double post: endpoint)
|
15
15
|
|
16
|
-
expect(node.publisher_endpoint).to eq '
|
16
|
+
expect(node.publisher_endpoint).to eq 'tcp://127.0.0.1:8000'
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -8,7 +8,9 @@ RSpec.describe Subscription do
|
|
8
8
|
|
9
9
|
let(:correlation_id) { SecureRandom.uuid }
|
10
10
|
let(:details) { { name: 'Sebastian', correlation_id: correlation_id } }
|
11
|
-
let(:event)
|
11
|
+
let(:event) do
|
12
|
+
double(name: 'added_contact', details: details, occured_at: Time.now)
|
13
|
+
end
|
12
14
|
|
13
15
|
let(:invokr) { spy }
|
14
16
|
before { stub_const 'Invokr', invokr }
|
@@ -22,7 +24,7 @@ RSpec.describe Subscription do
|
|
22
24
|
subscription.handle_event event
|
23
25
|
|
24
26
|
expect(invokr).to have_received(:invoke).with \
|
25
|
-
on: subscriber, method: 'test_added_contact', using:
|
27
|
+
on: subscriber, method: 'test_added_contact', using: Hash
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
@@ -1,26 +1,28 @@
|
|
1
|
-
RSpec.describe
|
2
|
-
let(:host) { 'tcp://127.0.0.1:7250' }
|
1
|
+
RSpec.describe ZeroMQTransport do
|
3
2
|
let(:message) { SecureRandom.hex }
|
4
3
|
|
5
|
-
|
6
|
-
server =
|
7
|
-
client =
|
4
|
+
it 'should work for REQREP' do
|
5
|
+
server = ZeroMQTransport.server('tcp://*:7250') { |rec| @rec = rec }.start
|
6
|
+
client = ZeroMQTransport.client 'tcp://localhost:7250'
|
8
7
|
|
9
8
|
client.post message
|
10
9
|
|
11
10
|
server.stop
|
12
11
|
client.close_socket
|
13
12
|
|
13
|
+
sleep 0.1
|
14
|
+
|
14
15
|
expect(@rec).to eq message
|
15
16
|
end
|
16
17
|
|
17
18
|
it 'should work for PUBSUB' do
|
18
|
-
publisher =
|
19
|
+
publisher = ZeroMQTransport.publisher('tcp://*:7350')
|
19
20
|
publisher.open_socket
|
20
21
|
|
21
22
|
@reced = []
|
22
23
|
|
23
|
-
|
24
|
+
host = 'tcp://localhost:7350'
|
25
|
+
subscriber = ZeroMQTransport.subscriber(host) { |rec| @reced << rec }
|
24
26
|
subscriber.add_subscription('foo').start
|
25
27
|
|
26
28
|
sleep 0.1
|
@@ -28,6 +30,8 @@ RSpec.describe NanomsgTransport do
|
|
28
30
|
publisher.publish 'foobar'
|
29
31
|
publisher.publish 'bazbar'
|
30
32
|
|
33
|
+
sleep 0.1
|
34
|
+
|
31
35
|
publisher.close_socket
|
32
36
|
subscriber.stop
|
33
37
|
|
data/spec/spec_helper.rb
CHANGED
@@ -16,7 +16,6 @@ RSpec.configure do |config|
|
|
16
16
|
end
|
17
17
|
|
18
18
|
config.before(:each) do
|
19
|
-
Aggro.reset
|
20
19
|
FileUtils.mkdir_p './tmp/test'
|
21
20
|
Aggro.data_dir = './tmp/test'
|
22
21
|
end
|
@@ -24,11 +23,19 @@ RSpec.configure do |config|
|
|
24
23
|
config.after(:each) do
|
25
24
|
FileUtils.rm_r './tmp/test' if File.exist? './tmp/test'
|
26
25
|
Thread.current[:aggro_context] = nil
|
26
|
+
Aggro.reset unless Aggro.is_a? RSpec::Mocks::Double
|
27
|
+
end
|
28
|
+
|
29
|
+
config.after(:suite) do
|
30
|
+
Aggro.reset
|
31
|
+
Aggro.transport.teardown
|
27
32
|
end
|
28
33
|
end
|
29
34
|
|
30
35
|
require 'aggro'
|
31
36
|
|
37
|
+
Aggro.transport.linger = 0
|
38
|
+
|
32
39
|
Aggro.constants.each do |const|
|
33
40
|
eval "#{const} = Aggro::#{const}"
|
34
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aggro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Edwards
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -151,35 +151,7 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
160
|
-
type: :runtime
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - ">="
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: nn-core
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :runtime
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: object-stream
|
154
|
+
name: zeromqrb
|
183
155
|
requirement: !ruby/object:Gem::Requirement
|
184
156
|
requirements:
|
185
157
|
- - ">="
|
@@ -210,7 +182,6 @@ files:
|
|
210
182
|
- Rakefile
|
211
183
|
- aggro.gemspec
|
212
184
|
- lib/aggro.rb
|
213
|
-
- lib/aggro/abstract_store.rb
|
214
185
|
- lib/aggro/aggregate.rb
|
215
186
|
- lib/aggro/aggregate_ref.rb
|
216
187
|
- lib/aggro/attribute_dsl.rb
|
@@ -235,6 +206,8 @@ files:
|
|
235
206
|
- lib/aggro/handler/start_saga.rb
|
236
207
|
- lib/aggro/local_node.rb
|
237
208
|
- lib/aggro/locator.rb
|
209
|
+
- lib/aggro/logging.rb
|
210
|
+
- lib/aggro/marshal_stream.rb
|
238
211
|
- lib/aggro/message/ask.rb
|
239
212
|
- lib/aggro/message/command.rb
|
240
213
|
- lib/aggro/message/create_aggregate.rb
|
@@ -247,24 +220,13 @@ files:
|
|
247
220
|
- lib/aggro/message/publisher_endpoint_inquiry.rb
|
248
221
|
- lib/aggro/message/query.rb
|
249
222
|
- lib/aggro/message/result.rb
|
223
|
+
- lib/aggro/message/server_error.rb
|
250
224
|
- lib/aggro/message/start_saga.rb
|
251
225
|
- lib/aggro/message/unhandled_operation.rb
|
252
226
|
- lib/aggro/message/unknown_operation.rb
|
253
227
|
- lib/aggro/message_parser.rb
|
254
228
|
- lib/aggro/message_router.rb
|
255
229
|
- lib/aggro/nanomsg_transport.rb
|
256
|
-
- lib/aggro/nanomsg_transport/client.rb
|
257
|
-
- lib/aggro/nanomsg_transport/connection.rb
|
258
|
-
- lib/aggro/nanomsg_transport/publish.rb
|
259
|
-
- lib/aggro/nanomsg_transport/publisher.rb
|
260
|
-
- lib/aggro/nanomsg_transport/raw_reply.rb
|
261
|
-
- lib/aggro/nanomsg_transport/raw_request.rb
|
262
|
-
- lib/aggro/nanomsg_transport/reply.rb
|
263
|
-
- lib/aggro/nanomsg_transport/request.rb
|
264
|
-
- lib/aggro/nanomsg_transport/server.rb
|
265
|
-
- lib/aggro/nanomsg_transport/socket_error.rb
|
266
|
-
- lib/aggro/nanomsg_transport/subscribe.rb
|
267
|
-
- lib/aggro/nanomsg_transport/subscriber.rb
|
268
230
|
- lib/aggro/node.rb
|
269
231
|
- lib/aggro/node_list.rb
|
270
232
|
- lib/aggro/projection.rb
|
@@ -277,15 +239,21 @@ files:
|
|
277
239
|
- lib/aggro/subscriber.rb
|
278
240
|
- lib/aggro/subscription.rb
|
279
241
|
- lib/aggro/transform/boolean.rb
|
242
|
+
- lib/aggro/transform/date.rb
|
280
243
|
- lib/aggro/transform/email.rb
|
281
244
|
- lib/aggro/transform/id.rb
|
282
245
|
- lib/aggro/transform/integer.rb
|
283
246
|
- lib/aggro/transform/money.rb
|
284
247
|
- lib/aggro/transform/noop.rb
|
285
248
|
- lib/aggro/transform/string.rb
|
249
|
+
- lib/aggro/transform/time.rb
|
286
250
|
- lib/aggro/transform/time_interval.rb
|
287
251
|
- lib/aggro/version.rb
|
288
|
-
-
|
252
|
+
- lib/aggro/zeromq_transport.rb
|
253
|
+
- lib/aggro/zeromq_transport/client.rb
|
254
|
+
- lib/aggro/zeromq_transport/publisher.rb
|
255
|
+
- lib/aggro/zeromq_transport/server.rb
|
256
|
+
- lib/aggro/zeromq_transport/subscriber.rb
|
289
257
|
- spec/lib/aggro/aggregate_ref_spec.rb
|
290
258
|
- spec/lib/aggro/aggregate_spec.rb
|
291
259
|
- spec/lib/aggro/channel_spec.rb
|
@@ -305,6 +273,7 @@ files:
|
|
305
273
|
- spec/lib/aggro/handler/start_saga_spec.rb
|
306
274
|
- spec/lib/aggro/local_node_spec.rb
|
307
275
|
- spec/lib/aggro/locator_spec.rb
|
276
|
+
- spec/lib/aggro/marshal_stream_spec.rb
|
308
277
|
- spec/lib/aggro/message/ask_spec.rb
|
309
278
|
- spec/lib/aggro/message/command_spec.rb
|
310
279
|
- spec/lib/aggro/message/create_aggregate_spec.rb
|
@@ -321,8 +290,6 @@ files:
|
|
321
290
|
- spec/lib/aggro/message/unknown_operation_spec.rb
|
322
291
|
- spec/lib/aggro/message_parser_spec.rb
|
323
292
|
- spec/lib/aggro/message_router_spec.rb
|
324
|
-
- spec/lib/aggro/nanomsg_transport/socket_error_spec.rb
|
325
|
-
- spec/lib/aggro/nanomsg_transport_spec.rb
|
326
293
|
- spec/lib/aggro/node_list_spec.rb
|
327
294
|
- spec/lib/aggro/node_spec.rb
|
328
295
|
- spec/lib/aggro/projection_spec.rb
|
@@ -340,6 +307,7 @@ files:
|
|
340
307
|
- spec/lib/aggro/transform/money_spec.rb
|
341
308
|
- spec/lib/aggro/transform/string_spec.rb
|
342
309
|
- spec/lib/aggro/transform/time_interval_spec.rb
|
310
|
+
- spec/lib/aggro/zeromq_transport_spec.rb
|
343
311
|
- spec/lib/aggro_spec.rb
|
344
312
|
- spec/spec_helper.rb
|
345
313
|
homepage: ''
|
@@ -367,7 +335,6 @@ signing_key:
|
|
367
335
|
specification_version: 4
|
368
336
|
summary: Distributed in-memory event-store.
|
369
337
|
test_files:
|
370
|
-
- spec/lib/aggro/abstract_store_spec.rb
|
371
338
|
- spec/lib/aggro/aggregate_ref_spec.rb
|
372
339
|
- spec/lib/aggro/aggregate_spec.rb
|
373
340
|
- spec/lib/aggro/channel_spec.rb
|
@@ -387,6 +354,7 @@ test_files:
|
|
387
354
|
- spec/lib/aggro/handler/start_saga_spec.rb
|
388
355
|
- spec/lib/aggro/local_node_spec.rb
|
389
356
|
- spec/lib/aggro/locator_spec.rb
|
357
|
+
- spec/lib/aggro/marshal_stream_spec.rb
|
390
358
|
- spec/lib/aggro/message/ask_spec.rb
|
391
359
|
- spec/lib/aggro/message/command_spec.rb
|
392
360
|
- spec/lib/aggro/message/create_aggregate_spec.rb
|
@@ -403,8 +371,6 @@ test_files:
|
|
403
371
|
- spec/lib/aggro/message/unknown_operation_spec.rb
|
404
372
|
- spec/lib/aggro/message_parser_spec.rb
|
405
373
|
- spec/lib/aggro/message_router_spec.rb
|
406
|
-
- spec/lib/aggro/nanomsg_transport/socket_error_spec.rb
|
407
|
-
- spec/lib/aggro/nanomsg_transport_spec.rb
|
408
374
|
- spec/lib/aggro/node_list_spec.rb
|
409
375
|
- spec/lib/aggro/node_spec.rb
|
410
376
|
- spec/lib/aggro/projection_spec.rb
|
@@ -422,5 +388,6 @@ test_files:
|
|
422
388
|
- spec/lib/aggro/transform/money_spec.rb
|
423
389
|
- spec/lib/aggro/transform/string_spec.rb
|
424
390
|
- spec/lib/aggro/transform/time_interval_spec.rb
|
391
|
+
- spec/lib/aggro/zeromq_transport_spec.rb
|
425
392
|
- spec/lib/aggro_spec.rb
|
426
393
|
- spec/spec_helper.rb
|