active_event 0.5.0.rc4 → 0.5.0.rc5
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/active_event/command.rb +2 -11
- data/lib/active_event/domain.rb +53 -42
- data/lib/active_event/event_source_server.rb +21 -2
- data/lib/active_event/sse.rb +11 -5
- data/lib/active_event/support/hash_buffer.rb +24 -0
- data/lib/active_event/support/ring_buffer.rb +20 -0
- data/lib/active_event/version.rb +1 -1
- data/spec/lib/domain_spec.rb +1 -0
- metadata +8 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: df8dd99b28d2b809d9a56eb4aa46a9b00ae908af
|
|
4
|
+
data.tar.gz: f1b4c218923220b3bd50d40c9e4b81f7aa127d1e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 183cece38086fe744d48efa6c9517cb0f3b0bf673890bd0ed3ac04e66c620fc957d412af0eac9c4fc3a94bc7d72c6a32a08cd805c03e087fd206b5678d20f7e6
|
|
7
|
+
data.tar.gz: 4dc0205111f8f487551f9b4b2be50edaaf8cf57ad6bb9555987c0134281ce877fe72d96c6874688b1ad7e321cb3c9f0e12b50bcb7800d8185523b415d1426c76
|
data/lib/active_event/command.rb
CHANGED
|
@@ -19,17 +19,8 @@ module ActiveEvent
|
|
|
19
19
|
include ActiveEvent::Support::AttrSetter
|
|
20
20
|
include ActiveModel::Validations
|
|
21
21
|
|
|
22
|
-
def is_valid_do
|
|
23
|
-
if valid?
|
|
24
|
-
block.call
|
|
25
|
-
else
|
|
26
|
-
false
|
|
27
|
-
end
|
|
28
|
-
rescue Exception => e
|
|
29
|
-
LOGGER.error "Validation failed for #{self.class.name}"
|
|
30
|
-
LOGGER.error e.message
|
|
31
|
-
LOGGER.error e.backtrace.join("\n")
|
|
32
|
-
false
|
|
22
|
+
def is_valid_do
|
|
23
|
+
yield if valid?
|
|
33
24
|
end
|
|
34
25
|
|
|
35
26
|
module ClassMethods
|
data/lib/active_event/domain.rb
CHANGED
|
@@ -1,42 +1,53 @@
|
|
|
1
|
-
require 'singleton'
|
|
2
|
-
require 'drb/drb'
|
|
3
|
-
|
|
4
|
-
module ActiveEvent
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
require 'singleton'
|
|
2
|
+
require 'drb/drb'
|
|
3
|
+
|
|
4
|
+
module ActiveEvent
|
|
5
|
+
class DomainExceptionCapture < StandardError
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class DomainException < StandardError
|
|
9
|
+
# prevent better errors from tracing this exception
|
|
10
|
+
def __better_errors_bindings_stack; [] end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module Domain
|
|
14
|
+
extend ActiveSupport::Concern
|
|
15
|
+
|
|
16
|
+
included do
|
|
17
|
+
include Singleton # singleton is not a concern - include directly into class
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def initialize(*args)
|
|
21
|
+
super
|
|
22
|
+
# DRb.start_service # should not be necessary
|
|
23
|
+
self.server = DRbObject.new_with_uri self.class.server_uri
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def run_command(command)
|
|
27
|
+
command.valid? && server.run_command(command)
|
|
28
|
+
rescue DomainExceptionCapture => e
|
|
29
|
+
message, backtrace = JSON.parse(e.message)
|
|
30
|
+
raise DomainException, message, backtrace
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
attr_accessor :server
|
|
36
|
+
|
|
37
|
+
module ClassMethods
|
|
38
|
+
def run_command(command)
|
|
39
|
+
self.instance.run_command command
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
attr_accessor :server_uri
|
|
43
|
+
|
|
44
|
+
def self.extended(base)
|
|
45
|
+
base.server_uri = 'druby://127.0.0.1:8787'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def set_config(protocol = 'druby', host = 'localhost', port = 8787)
|
|
49
|
+
self.server_uri = "#{protocol}://#{host}:#{port}"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -2,11 +2,22 @@ require 'singleton'
|
|
|
2
2
|
require 'bunny'
|
|
3
3
|
|
|
4
4
|
module ActiveEvent
|
|
5
|
+
class ProjectionException < StandardError
|
|
6
|
+
# prevent better errors from tracing this exception
|
|
7
|
+
def __better_errors_bindings_stack; [] end
|
|
8
|
+
end
|
|
9
|
+
|
|
5
10
|
class EventSourceServer
|
|
6
11
|
include Singleton
|
|
7
12
|
|
|
8
|
-
|
|
9
|
-
|
|
13
|
+
class << self
|
|
14
|
+
def after_event_projection(event_id, projection, &block)
|
|
15
|
+
instance.after_event_projection(event_id, projection, &block)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def projection_status(projection)
|
|
19
|
+
instance.projection_status(projection)
|
|
20
|
+
end
|
|
10
21
|
end
|
|
11
22
|
|
|
12
23
|
def after_event_projection(event_id, projection)
|
|
@@ -21,10 +32,18 @@ module ActiveEvent
|
|
|
21
32
|
projection_status.waiters[event_id].delete cv
|
|
22
33
|
end
|
|
23
34
|
end
|
|
35
|
+
raise ProjectionException, projection_status.error, projection_status.backtrace if projection_status.error
|
|
24
36
|
end
|
|
25
37
|
yield
|
|
26
38
|
end
|
|
27
39
|
|
|
40
|
+
def projection_status(projection)
|
|
41
|
+
mutex.synchronize do
|
|
42
|
+
projection_status = status[projection]
|
|
43
|
+
raise ProjectionException, projection_status.error, projection_status.backtrace if projection_status.error
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
28
47
|
private
|
|
29
48
|
|
|
30
49
|
class Status
|
data/lib/active_event/sse.rb
CHANGED
|
@@ -6,15 +6,21 @@ module ActiveEvent
|
|
|
6
6
|
@io = io
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
def
|
|
10
|
-
options.
|
|
11
|
-
|
|
9
|
+
def event(event, data = nil, options = {})
|
|
10
|
+
self.data options.merge(event: event, data: JSON.dump(data))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def data(data)
|
|
14
|
+
data.each_pair do |key, value|
|
|
15
|
+
(value+"\n").split("\n", -1)[0..-2].each do |v|
|
|
16
|
+
@io.write "#{key}: #{v}\n"
|
|
17
|
+
end
|
|
12
18
|
end
|
|
13
|
-
@io.write "
|
|
19
|
+
@io.write "\n"
|
|
14
20
|
end
|
|
15
21
|
|
|
16
22
|
def close
|
|
17
23
|
@io.close
|
|
18
24
|
end
|
|
19
25
|
end
|
|
20
|
-
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# a hash with limited size
|
|
2
|
+
class HashBuffer < Array
|
|
3
|
+
attr_accessor :max_size
|
|
4
|
+
|
|
5
|
+
def initialize(max_size, *args, &block)
|
|
6
|
+
super(*args, &block)
|
|
7
|
+
self.max_size = max_size
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def max_size=(new_size)
|
|
11
|
+
delete keys.first while new_size < size
|
|
12
|
+
self.max_size = new_size
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
attr_accessor entries
|
|
18
|
+
|
|
19
|
+
def []=(key, value)
|
|
20
|
+
delete keys.first if max_size && size == max_size
|
|
21
|
+
super
|
|
22
|
+
end
|
|
23
|
+
alias :push :<<
|
|
24
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# simple ring buffer
|
|
2
|
+
class RingBuffer < Array
|
|
3
|
+
attr_accessor :max_size
|
|
4
|
+
|
|
5
|
+
def initialize(max_size, *args, &block)
|
|
6
|
+
super(*args, &block)
|
|
7
|
+
self.max_size = max_size
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def max_size=(new_size)
|
|
11
|
+
replace first(new_size) if new_size < size
|
|
12
|
+
self.max_size = new_size
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def <<(item)
|
|
16
|
+
shift if max_size && size == max_size
|
|
17
|
+
super
|
|
18
|
+
end
|
|
19
|
+
alias :push :<<
|
|
20
|
+
end
|
data/lib/active_event/version.rb
CHANGED
data/spec/lib/domain_spec.rb
CHANGED
|
@@ -13,6 +13,7 @@ describe ActiveEvent::Domain do
|
|
|
13
13
|
|
|
14
14
|
it 'sends command over instance' do
|
|
15
15
|
expect(DRbObject).to receive(:new_with_uri).with(TestDomain.server_uri).and_return(@drb_object)
|
|
16
|
+
expect(@command).to receive(:valid?).and_return(true)
|
|
16
17
|
expect(@drb_object).to receive(:run_command).with(@command)
|
|
17
18
|
TestDomain.run_command(@command)
|
|
18
19
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_event
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.5.0.
|
|
4
|
+
version: 0.5.0.rc5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- HicknHack Software
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-04
|
|
11
|
+
date: 2014-05-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -147,9 +147,12 @@ executables: []
|
|
|
147
147
|
extensions: []
|
|
148
148
|
extra_rdoc_files: []
|
|
149
149
|
files:
|
|
150
|
+
- MIT-LICENSE
|
|
151
|
+
- README.md
|
|
150
152
|
- app/models/active_event/event.rb
|
|
151
153
|
- app/models/active_event/event_repository.rb
|
|
152
154
|
- db/migrate/00_create_domain_events.rb
|
|
155
|
+
- lib/active_event.rb
|
|
153
156
|
- lib/active_event/autoload.rb
|
|
154
157
|
- lib/active_event/command.rb
|
|
155
158
|
- lib/active_event/domain.rb
|
|
@@ -162,13 +165,12 @@ files:
|
|
|
162
165
|
- lib/active_event/support/attr_setter.rb
|
|
163
166
|
- lib/active_event/support/autoload.rb
|
|
164
167
|
- lib/active_event/support/autoloader.rb
|
|
168
|
+
- lib/active_event/support/hash_buffer.rb
|
|
165
169
|
- lib/active_event/support/multi_logger.rb
|
|
170
|
+
- lib/active_event/support/ring_buffer.rb
|
|
166
171
|
- lib/active_event/validations.rb
|
|
167
172
|
- lib/active_event/validations_registry.rb
|
|
168
173
|
- lib/active_event/version.rb
|
|
169
|
-
- lib/active_event.rb
|
|
170
|
-
- README.md
|
|
171
|
-
- MIT-LICENSE
|
|
172
174
|
- spec/factories/event_factory.rb
|
|
173
175
|
- spec/lib/command_spec.rb
|
|
174
176
|
- spec/lib/domain_spec.rb
|
|
@@ -200,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
200
202
|
version: 1.3.1
|
|
201
203
|
requirements: []
|
|
202
204
|
rubyforge_project:
|
|
203
|
-
rubygems_version: 2.
|
|
205
|
+
rubygems_version: 2.2.2
|
|
204
206
|
signing_key:
|
|
205
207
|
specification_version: 4
|
|
206
208
|
summary: Commands, Events and Validations for Rails Disco
|