replay 0.1.0 → 0.1.1
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/replay.rb +2 -0
- data/lib/replay/observer.rb +20 -9
- data/lib/replay/publisher.rb +3 -12
- data/lib/replay/router.rb +19 -0
- data/lib/replay/router/default_router.rb +1 -12
- data/lib/replay/subscriptions.rb +15 -0
- data/lib/replay/test.rb +10 -0
- data/lib/replay/version.rb +1 -1
- data/test/replay/observer_spec.rb +21 -0
- data/test/replay/router/default_router_spec.rb +1 -11
- data/test/test_helper.rb +0 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 084d0ba8e80a2b93566f0ba8e780feedccf92d28
|
4
|
+
data.tar.gz: 7cf7c4e15f76ee0659cb0be60cac9a21d0fc2d6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1561eba9d3b6469a38243a840e22dd850500a057f3b272f8ea67964680436867f40c57a892e07cf31aa44cdd519660d3f273f4bd657e0e304635120bec65d64
|
7
|
+
data.tar.gz: ebd32484a7c18fa8c7dbbd77c49b3564bfaede2ee2c785c839e0a1af00d1dac5ee876ea57cc1f6659c6438f28013e1353aecd2b9abf80afe422389a7a9ab43eb
|
data/lib/replay.rb
CHANGED
@@ -13,6 +13,7 @@ module Replay
|
|
13
13
|
class UndefinedKeyError < ReplayError; end
|
14
14
|
class UnhandledEventError < ReplayError; end
|
15
15
|
class UnknownEventError < ReplayError; end
|
16
|
+
class InvalidRouterError < ReplayError; end
|
16
17
|
class InvalidStorageError < ReplayError;
|
17
18
|
def initialize(*args)
|
18
19
|
klass = args.shift
|
@@ -33,6 +34,7 @@ require 'replay/event_decorator'
|
|
33
34
|
require 'replay/event_declarations'
|
34
35
|
require 'replay/publisher'
|
35
36
|
require 'replay/subscription_manager'
|
37
|
+
require 'replay/subscriptions'
|
36
38
|
require 'replay/backends'
|
37
39
|
require 'replay/repository'
|
38
40
|
require 'replay/repository/identity_map'
|
data/lib/replay/observer.rb
CHANGED
@@ -2,16 +2,27 @@ module Replay
|
|
2
2
|
module Observer
|
3
3
|
|
4
4
|
def self.included(base)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
base.extend(ClassMethods)
|
6
|
+
base.instance_variable_set(:@router, Replay::Router::DefaultRouter)
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def router(rtr)
|
11
|
+
raise Replay::InvalidRouterError.new("Router does not implement add_observer") unless rtr.respond_to?(:add_observer)
|
12
|
+
@router = rtr
|
13
|
+
end
|
14
|
+
|
15
|
+
def observe(event_type, &block)
|
16
|
+
raise InvalidRouterError.new("No router defined!") unless @router
|
17
|
+
@observer_blocks ||= Hash.new
|
18
|
+
@observer_blocks[Replay::Inflector.underscore(event_type.to_s)] = block
|
19
|
+
|
20
|
+
@router.add_observer self, event_type
|
21
|
+
end
|
10
22
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
23
|
+
def published(stream_id, event)
|
24
|
+
blk = @observer_blocks[Replay::Inflector.underscore(event.class.to_s)]
|
25
|
+
blk.call(stream_id, event, binding) if blk
|
15
26
|
end
|
16
27
|
end
|
17
28
|
end
|
data/lib/replay/publisher.rb
CHANGED
@@ -1,21 +1,12 @@
|
|
1
1
|
module Replay
|
2
2
|
module Publisher
|
3
3
|
def self.included(base)
|
4
|
-
include_essentials base
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.include_essentials(base)
|
8
4
|
base.instance_variable_set :@application_blocks, {}
|
9
5
|
base.extend ClassMethods
|
10
6
|
base.extend(Replay::Events)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@subscription_manager ||= Replay::SubscriptionManager.new(Replay.logger)
|
15
|
-
end
|
16
|
-
|
17
|
-
def add_subscriber(subscriber)
|
18
|
-
subscription_manager.add_subscriber(subscriber)
|
7
|
+
base.class_exec do
|
8
|
+
include Replay::Subscriptions
|
9
|
+
end
|
19
10
|
end
|
20
11
|
|
21
12
|
def apply(events, raise_unhandled = true)
|
data/lib/replay/router.rb
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
module Replay
|
2
2
|
module Router
|
3
|
+
def self.included(base)
|
4
|
+
base.class_exec do
|
5
|
+
include Replay::Subscriptions
|
6
|
+
extend ClassMethods if base.include?(Singleton)
|
7
|
+
end
|
8
|
+
end
|
3
9
|
|
10
|
+
def add_observer(observer, *events)
|
11
|
+
add_subscriber observer
|
12
|
+
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
def add_observer(observer, *events)
|
16
|
+
instance.add_subscriber(observer)
|
17
|
+
end
|
18
|
+
|
19
|
+
def published(stream, event)
|
20
|
+
instance.published(stream, event)
|
21
|
+
end
|
22
|
+
end
|
4
23
|
end
|
5
24
|
end
|
@@ -2,18 +2,7 @@ module Replay
|
|
2
2
|
module Router
|
3
3
|
class DefaultRouter
|
4
4
|
include Singleton
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
@subscription_manager = Replay::SubscriptionManager.new
|
8
|
-
end
|
9
|
-
|
10
|
-
def add_observer(observer, *events)
|
11
|
-
@subscription_manager.add_subscriber(observer)
|
12
|
-
end
|
13
|
-
|
14
|
-
def published(stream_id, event)
|
15
|
-
@subscription_manager.notify_subscribers(stream_id, event)
|
16
|
-
end
|
5
|
+
include Replay::Router
|
17
6
|
end
|
18
7
|
end
|
19
8
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Replay
|
2
|
+
module Subscriptions
|
3
|
+
def subscription_manager
|
4
|
+
@subscription_manager ||= Replay::SubscriptionManager.new(Replay.logger)
|
5
|
+
end
|
6
|
+
|
7
|
+
def add_subscriber(subscriber)
|
8
|
+
subscription_manager.add_subscriber(subscriber)
|
9
|
+
end
|
10
|
+
|
11
|
+
def published(stream_id, event)
|
12
|
+
@subscription_manager.notify_subscribers(stream_id, event)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/replay/test.rb
CHANGED
@@ -37,6 +37,16 @@ Replay::SubscriptionManager.class_exec do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
Replay::Router.module_exec do
|
41
|
+
def inspect
|
42
|
+
self.class.to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def observed_by?(object)
|
46
|
+
@subscription_manager.has_subscriber?(object)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
40
50
|
Replay::Publisher::ClassMethods.module_exec do
|
41
51
|
def self.extended(base)
|
42
52
|
@publishers ||= []
|
data/lib/replay/version.rb
CHANGED
@@ -21,6 +21,19 @@ class ObserverTest
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
class NonstandardRouter
|
25
|
+
include Singleton
|
26
|
+
include Replay::Router
|
27
|
+
end
|
28
|
+
|
29
|
+
class RoutedObserverTest
|
30
|
+
include Replay::Observer
|
31
|
+
router NonstandardRouter.instance
|
32
|
+
|
33
|
+
observe ObservedEvent do |e|
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
24
37
|
describe Replay::Observer do
|
25
38
|
before do
|
26
39
|
ObserverTest.reset
|
@@ -34,4 +47,12 @@ describe Replay::Observer do
|
|
34
47
|
ObserverTest.published('123', UnobservedEvent.new)
|
35
48
|
ObserverTest.wont_be :observed?
|
36
49
|
end
|
50
|
+
|
51
|
+
it "links to DefaultRouter by default" do
|
52
|
+
Replay::Router::DefaultRouter.instance.must_be :observed_by?,ObserverTest
|
53
|
+
end
|
54
|
+
|
55
|
+
it "links to a substitute router when instructed" do
|
56
|
+
NonstandardRouter.instance.must_be :observed_by?, RoutedObserverTest
|
57
|
+
end
|
37
58
|
end
|
@@ -1,12 +1,4 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
|
3
|
-
module Router
|
4
|
-
module Test
|
5
|
-
def has_observer?(object)
|
6
|
-
@subscription_manager.has_subscriber?(object)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
2
|
class TypedEvent
|
11
3
|
|
12
4
|
end
|
@@ -20,8 +12,6 @@ class Observer
|
|
20
12
|
end
|
21
13
|
end
|
22
14
|
|
23
|
-
Replay::Router::DefaultRouter.send(:include, Router::Test)
|
24
|
-
|
25
15
|
describe Replay::Router::DefaultRouter do
|
26
16
|
before do
|
27
17
|
@router = Replay::Router::DefaultRouter.instance
|
@@ -29,7 +19,7 @@ describe Replay::Router::DefaultRouter do
|
|
29
19
|
describe "adding observers" do
|
30
20
|
it "tracks the observing object" do
|
31
21
|
@router.add_observer(Observer)
|
32
|
-
|
22
|
+
@router.must_be :observed_by?, Observer
|
33
23
|
end
|
34
24
|
end
|
35
25
|
describe "event publishing" do
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: replay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- karmajunkie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/replay/router/default_router.rb
|
97
97
|
- lib/replay/rspec.rb
|
98
98
|
- lib/replay/subscription_manager.rb
|
99
|
+
- lib/replay/subscriptions.rb
|
99
100
|
- lib/replay/test.rb
|
100
101
|
- lib/replay/test/test_event_stream.rb
|
101
102
|
- lib/replay/version.rb
|