synapse-core 0.5.6 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/lib/synapse-core.rb +31 -1
  3. data/lib/synapse/command.rb +1 -0
  4. data/lib/synapse/command/callbacks/future.rb +3 -3
  5. data/lib/synapse/command/callbacks/void.rb +14 -0
  6. data/lib/synapse/command/command_bus.rb +2 -2
  7. data/lib/synapse/command/command_callback.rb +9 -2
  8. data/lib/synapse/command/gateway.rb +1 -1
  9. data/lib/synapse/command/gateway/interval_retry_scheduler.rb +6 -6
  10. data/lib/synapse/command/gateway/retry_scheduler.rb +7 -4
  11. data/lib/synapse/command/interceptor_chain.rb +1 -1
  12. data/lib/synapse/command/interceptors/serialization.rb +2 -1
  13. data/lib/synapse/command/simple_command_bus.rb +23 -34
  14. data/lib/synapse/common.rb +2 -2
  15. data/lib/synapse/common/concurrency/disposable_lock.rb +157 -0
  16. data/lib/synapse/common/concurrency/identifier_lock_manager.rb +164 -0
  17. data/lib/synapse/common/duplication.rb +4 -4
  18. data/lib/synapse/common/errors.rb +5 -0
  19. data/lib/synapse/configuration/container.rb +1 -1
  20. data/lib/synapse/configuration/container_builder.rb +1 -1
  21. data/lib/synapse/configuration/definition.rb +1 -1
  22. data/lib/synapse/domain/aggregate_root.rb +1 -1
  23. data/lib/synapse/domain/simple_stream.rb +3 -5
  24. data/lib/synapse/domain/stream.rb +2 -2
  25. data/lib/synapse/event_bus/event_bus.rb +2 -2
  26. data/lib/synapse/event_bus/simple_event_bus.rb +5 -6
  27. data/lib/synapse/event_sourcing/caching.rb +1 -1
  28. data/lib/synapse/event_sourcing/entity.rb +4 -2
  29. data/lib/synapse/event_sourcing/repository.rb +9 -13
  30. data/lib/synapse/event_sourcing/snapshot/taker.rb +1 -1
  31. data/lib/synapse/mapping/mapping.rb +1 -1
  32. data/lib/synapse/process_manager/correlation.rb +3 -29
  33. data/lib/synapse/process_manager/pessimistic_lock_manager.rb +3 -3
  34. data/lib/synapse/process_manager/process.rb +2 -6
  35. data/lib/synapse/process_manager/process_manager.rb +1 -1
  36. data/lib/synapse/process_manager/process_repository.rb +1 -1
  37. data/lib/synapse/process_manager/repository/in_memory.rb +5 -4
  38. data/lib/synapse/process_manager/simple_process_manager.rb +2 -2
  39. data/lib/synapse/repository/errors.rb +2 -2
  40. data/lib/synapse/repository/locking.rb +48 -0
  41. data/lib/synapse/repository/optimistic_lock_manager.rb +10 -9
  42. data/lib/synapse/repository/pessimistic_lock_manager.rb +5 -4
  43. data/lib/synapse/repository/repository.rb +1 -1
  44. data/lib/synapse/repository/simple_repository.rb +8 -7
  45. data/lib/synapse/serialization/converter.rb +3 -0
  46. data/lib/synapse/serialization/converter_factory.rb +6 -5
  47. data/lib/synapse/serialization/serialized_object.rb +4 -4
  48. data/lib/synapse/serialization/serialized_type.rb +4 -4
  49. data/lib/synapse/uow/listener_collection.rb +12 -9
  50. data/lib/synapse/uow/provider.rb +1 -1
  51. data/lib/synapse/uow/uow.rb +1 -1
  52. data/lib/synapse/upcasting/upcaster_chain.rb +1 -1
  53. data/lib/synapse/version.rb +1 -1
  54. data/test/command/serialization_test.rb +5 -2
  55. data/test/command/simple_command_bus_test.rb +9 -16
  56. data/test/command/validation_test.rb +1 -1
  57. data/test/common/concurrency/identifier_lock_manager_test.rb +137 -0
  58. data/test/configuration/component/serialization/converter_factory_test.rb +2 -2
  59. data/test/event_sourcing/repository_test.rb +18 -0
  60. data/test/repository/simple_repository_test.rb +42 -10
  61. data/test/test_helper.rb +3 -4
  62. metadata +25 -29
  63. data/lib/synapse.rb +0 -34
  64. data/lib/synapse/common/concurrency/identifier_lock.rb +0 -56
  65. data/lib/synapse/common/concurrency/public_lock.rb +0 -95
  66. data/lib/synapse/event_bus/clustering/cluster.rb +0 -10
  67. data/lib/synapse/event_bus/clustering/event_bus.rb +0 -55
  68. data/lib/synapse/event_bus/clustering/selector.rb +0 -14
  69. data/lib/synapse/rails/injection_helper.rb +0 -23
  70. data/lib/synapse/railtie.rb +0 -17
  71. data/test/common/concurrency/identifier_lock_test.rb +0 -25
  72. data/test/common/concurrency/public_lock_test.rb +0 -83
  73. data/test/process_manager/correlation_test.rb +0 -24
  74. data/test/rails/injection_helper_test.rb +0 -27
@@ -1,14 +0,0 @@
1
- module Synapse
2
- module EventBus
3
- # Represents a mechanism for assigning event listeners to clusters
4
- # @abstract
5
- class ClusterSelector
6
- # Selects and returns a suitable cluster for the given event listener
7
- #
8
- # @abstract
9
- # @param [EventListener] listener
10
- # @return [Cluster] Returns nil if no suitable cluster
11
- def select_cluster(listener); end
12
- end # ClusterSelector
13
- end # EventBus
14
- end
@@ -1,23 +0,0 @@
1
- module Synapse
2
- module Rails
3
- # Mixin for an action controller in Rails that adds dependency injection
4
- module InjectionHelper
5
- extend ActiveSupport::Concern
6
-
7
- included do
8
- before_filter :inject_dependencies
9
- end
10
-
11
- # Performs one-time dependency injection before an action is called
12
- # @return [undefined]
13
- def inject_dependencies
14
- return if @_dependencies_injected
15
-
16
- container = Synapse.container
17
- container.inject_into self
18
-
19
- @_dependencies_injected = true
20
- end
21
- end # InjectionHelper
22
- end # Rails
23
- end
@@ -1,17 +0,0 @@
1
- module Synapse
2
- # Simple integration between the Synapse framework and Rails 3.2+
3
- class Railtie < Rails::Railtie
4
- # Set the name of the Railtie
5
- railtie_name :synapse
6
-
7
- # Controllers will get dependencies injected automatically
8
- initializer 'synapse.include_controller_mixins' do
9
- ActionController::Base.class_eval do
10
- include Synapse::Configuration::Dependent
11
- include Synapse::Rails::InjectionHelper
12
- end
13
- end
14
- end # Railtie
15
- end
16
-
17
- require 'synapse/rails/injection_helper'
@@ -1,25 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Synapse
4
- class IdentifierLockTest < Test::Unit::TestCase
5
- should 'indicate whether the current thread holds a lock' do
6
- lock = IdentifierLock.new
7
- identifier = 'some_id'
8
-
9
- refute lock.owned? identifier
10
-
11
- lock.obtain_lock identifier
12
- assert lock.owned? identifier
13
-
14
- lock.release_lock identifier
15
- refute lock.owned? identifier
16
- end
17
-
18
- should 'raise an exception when a thread releases a lock it does not own' do
19
- lock = IdentifierLock.new
20
- assert_raise ThreadError do
21
- lock.release_lock 'derp'
22
- end
23
- end
24
- end
25
- end
@@ -1,83 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Synapse
4
- class PublicLockTest < Test::Unit::TestCase
5
- should 'raise an exception when a thread tries to obtain a lock twice' do
6
- @lock = PublicLock.new
7
- @lock.lock
8
-
9
- assert_raise ThreadError do
10
- @lock.lock
11
- end
12
- end
13
-
14
- should 'properly manage its list of waiting threads' do
15
- @lock = PublicLock.new
16
- @lock.lock
17
-
18
- t = Thread.new do
19
- @lock.lock
20
- end
21
-
22
- wait_until do
23
- @lock.waiting == [t]
24
- end
25
-
26
- t.kill
27
-
28
- wait_until do
29
- @lock.waiting == []
30
- end
31
- end
32
-
33
- should 'synchronize the execution of a block' do
34
- @lock = PublicLock.new
35
-
36
- refute @lock.owned?
37
- refute @lock.owned_by? Thread.current
38
-
39
- @lock.synchronize do
40
- assert @lock.owned?
41
- assert @lock.owned_by? Thread.current
42
- end
43
-
44
- refute @lock.owned?
45
- refute @lock.owned_by? Thread.current
46
- end
47
-
48
- should 'raise an exception when a thread releases a lock it does not own' do
49
- @lock = PublicLock.new
50
-
51
- assert_raise ThreadError do
52
- @lock.unlock
53
- end
54
- end
55
-
56
- should 'provide a non-blocking lock attempt' do
57
- @lock = PublicLock.new
58
-
59
- t = Thread.new do
60
- assert @lock.try_lock
61
- Thread.stop
62
- @lock.unlock
63
- end
64
-
65
- wait_until do
66
- @lock.owned_by? t
67
- end
68
-
69
- refute @lock.try_lock
70
-
71
- t.wakeup
72
- end
73
-
74
- should 'raise an exception when a thread tries to obtain a non-blocking lock twice' do
75
- @lock = PublicLock.new
76
- @lock.try_lock
77
-
78
- assert_raise ThreadError do
79
- @lock.try_lock
80
- end
81
- end
82
- end
83
- end
@@ -1,24 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Synapse
4
- module ProcessManager
5
- class CorrelationTest < Test::Unit::TestCase
6
- should 'coerce key and value to correct types' do
7
- correlation = Correlation.new :foo, 'bar'
8
-
9
- assert_equal :foo, correlation.key
10
- assert_equal 'bar', correlation.value
11
- end
12
-
13
- should 'be able to determine equality with similar correlations' do
14
- correlation_a = Correlation.new :foo, 'bar'
15
- correlation_b = Correlation.new :foo, 'bar'
16
- correlation_c = Correlation.new :foo, 'baz'
17
-
18
- assert_equal correlation_a, correlation_b
19
- assert_equal correlation_b, correlation_b
20
- refute_equal correlation_a, correlation_c
21
- end
22
- end
23
- end
24
- end
@@ -1,27 +0,0 @@
1
- require 'test_helper'
2
-
3
- require 'rails'
4
- require 'synapse/railtie'
5
-
6
- module Synapse
7
- module Rails
8
- class InjectionHelperTest < Test::Unit::TestCase
9
-
10
- def setup
11
- @controller_class = Class.new
12
- @controller = @controller_class.new
13
- mock(@controller_class).before_filter(:inject_dependencies)
14
- @controller_class.send :include, InjectionHelper
15
- end
16
-
17
- should 'inject dependencies only once' do
18
- container_mock = mock(Synapse).container.mock!
19
- container_mock.inject_into(@controller)
20
-
21
- @controller.inject_dependencies
22
- @controller.inject_dependencies
23
- end
24
-
25
- end
26
- end
27
- end