aggro 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|