ruby_event_store 0.13.0 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b76da76feedfe6a7a47b7580ae2ef14bb64785a7
4
- data.tar.gz: 970d9fa6c06ad47649e1bb5f35db967d76508ba8
3
+ metadata.gz: 7d71ec6a5d4c85e551b036dda5abca24e8bddc1c
4
+ data.tar.gz: 65666ce24c97b6818a2881a8ce543c4571b88192
5
5
  SHA512:
6
- metadata.gz: 8d952639196c9a5d24b06d985074dbcaf21c494c20c427c3e3af622f6ae096d4bbd36571f203c2eb2c7ed925aea49ea6262f445b50286eafb8ff22bb96366036
7
- data.tar.gz: e594bb468b2ea6497c365d5c68709bc0688093331654fe3ef6b41740b331ba21225cdf13ae44c4650446a9d49ae1a2c74998adbf25b71367cccbe9989674a9ac
6
+ metadata.gz: cf14a4789d7f4194598b39a8a09ad91f3baca78f6976792499a02476186b76c40a1059e12f926254e1075acc34da7b7a2f1147bea7d8a8f069f9c97e897146ba
7
+ data.tar.gz: f3014bb612918f1e39a68d719705faf4a9a6227c901883978ea5414135f2fc47c30e33afebaab07b7e718a0394bb5cdeeda3d6165b94d0679aebead526c9ceac
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.10
4
- - 2.2.5
5
- - 2.3.1
3
+ - 2.2.7
4
+ - 2.3.4
5
+ - 2.4.1
6
6
  before_install: gem install bundler
7
7
  gemfile: Gemfile
8
8
  script: make mutate
@@ -1,3 +1,8 @@
1
+ ### 0.14.0 (21.08.2017)
2
+
3
+ * Change: Add lint for 3rd party implementations of dispatcher
4
+ * Change: Deprecated MethodNotDefined error, use InvalidHandler instead
5
+
1
6
  ### 0.13.0 (15.10.2016)
2
7
 
3
8
  * Change: Dropped ClosedStruct event (meta)data wrapping PR #34
data/Makefile CHANGED
@@ -10,7 +10,7 @@ test: ## Run tests
10
10
 
11
11
  mutate: test ## Run mutation tests
12
12
  @echo "Running mutation tests - only 100% free mutation will be accepted"
13
- @bundle exec mutant --include lib --require ruby_event_store --use rspec "RubyEventStore*"
13
+ @bundle exec mutant --include lib --require ruby_event_store --use rspec --ignore-subject "RubyEventStore.const_missing" "RubyEventStore*"
14
14
 
15
15
  .PHONY: help
16
16
 
data/README.md CHANGED
@@ -28,8 +28,23 @@ Whenever you fix a bug or add a new feature, we require that the coverage doesn'
28
28
 
29
29
  ## About
30
30
 
31
- <img src="http://arkency.com/images/arkency.png" alt="Arkency" width="20%" align="left" />
31
+ <img src="http://arkency.com/images/arkency.png" alt="Arkency" width="60px" align="left" />
32
32
 
33
33
  This repository is funded and maintained by Arkency. Check out our other [open-source projects](https://github.com/arkency).
34
34
 
35
35
  You can also [hire us](http://arkency.com) or [read our blog](http://blog.arkency.com).
36
+
37
+
38
+ ## Learn more about DDD & Event Sourcing
39
+
40
+ Check our **Rails + Domain Driven Design Workshop** [more details](http://blog.arkency.com/ddd-training/).
41
+
42
+ Why You should attend? Robert has explained this in [this blogpost](http://blog.arkency.com/2016/12/why-would-you-even-want-to-listen-about-ddd/).
43
+
44
+
45
+ Next edition will be held on **21-22th September 2017** in Berlin, Germany.
46
+ Another edition is also planned for November in London.
47
+
48
+ You may also consider buying the [Domain-Driven Rails book](http://blog.arkency.com/domain-driven-rails/).
49
+ Workshop will be held in English.
50
+
@@ -1,3 +1,4 @@
1
+ require 'ruby_event_store/pub_sub/dispatcher'
1
2
  require 'ruby_event_store/pub_sub/broker'
2
3
  require 'ruby_event_store/in_memory_repository'
3
4
  require 'ruby_event_store/projection'
@@ -5,4 +6,5 @@ require 'ruby_event_store/errors'
5
6
  require 'ruby_event_store/constants'
6
7
  require 'ruby_event_store/client'
7
8
  require 'ruby_event_store/event'
9
+ require 'ruby_event_store/deprecations'
8
10
  require 'ruby_event_store/version'
@@ -3,11 +3,13 @@ module RubyEventStore
3
3
  def initialize(repository:,
4
4
  event_broker: PubSub::Broker.new,
5
5
  page_size: PAGE_SIZE,
6
- metadata_proc: nil)
6
+ metadata_proc: nil,
7
+ clock: ->{ Time.now.utc })
7
8
  @repository = repository
8
9
  @event_broker = event_broker
9
10
  @page_size = page_size
10
11
  @metadata_proc = metadata_proc
12
+ @clock = clock
11
13
  end
12
14
 
13
15
  def publish_event(event, stream_name: GLOBAL_STREAM, expected_version: :any)
@@ -74,11 +76,11 @@ module RubyEventStore
74
76
  end
75
77
 
76
78
  private
77
- attr_reader :repository, :page_size, :event_broker, :metadata_proc
79
+ attr_reader :repository, :page_size, :event_broker, :metadata_proc, :clock
78
80
 
79
81
  def enrich_event_metadata(event)
80
82
  metadata = event.metadata
81
- metadata[:timestamp] ||= Time.now.utc
83
+ metadata[:timestamp] ||= clock.()
82
84
  metadata.merge!(metadata_proc.call || {}) if metadata_proc
83
85
 
84
86
  event.class.new(event_id: event.event_id, metadata: metadata, data: event.data)
@@ -0,0 +1,7 @@
1
+ module RubyEventStore
2
+ def self.const_missing(const_name)
3
+ super unless const_name == :MethodNotDefined
4
+ warn "`RubyEventStore::MethodNotDefined` has been deprecated. Use `RubyEventStore::InvalidHandler` instead."
5
+ InvalidHandler
6
+ end
7
+ end
@@ -4,7 +4,12 @@ module RubyEventStore
4
4
  IncorrectStreamData = Class.new(StandardError)
5
5
  EventNotFound = Class.new(StandardError)
6
6
  SubscriberNotExist = Class.new(StandardError)
7
- MethodNotDefined = Class.new(StandardError)
8
7
  InvalidPageStart = Class.new(ArgumentError)
9
8
  InvalidPageSize = Class.new(ArgumentError)
9
+
10
+ class InvalidHandler < StandardError
11
+ def initialize(subscriber)
12
+ super("#call method not found in #{subscriber.class} subscriber. Are you sure it is a valid subscriber?")
13
+ end
14
+ end
10
15
  end
@@ -1,25 +1,6 @@
1
1
  module RubyEventStore
2
2
  module PubSub
3
3
  class Broker
4
- class Dispatcher
5
- def call(subscriber, event)
6
- ensure_method_defined(subscriber)
7
- subscriber.call(event)
8
- end
9
-
10
- private
11
- def ensure_method_defined(subscriber)
12
- unless subscriber.respond_to?(:call)
13
- raise MethodNotDefined.new(method_not_defined_message(subscriber))
14
- end
15
- end
16
-
17
- def method_not_defined_message(subscriber)
18
- "#call method not found in #{subscriber.class} subscriber. Are you sure it is a valid subscriber?"
19
- end
20
- end
21
- private_constant :Dispatcher
22
-
23
4
  DEFAULT_DISPATCHER = Dispatcher.new
24
5
 
25
6
  def initialize(dispatcher: DEFAULT_DISPATCHER)
@@ -0,0 +1,10 @@
1
+ module RubyEventStore
2
+ module PubSub
3
+ class Dispatcher
4
+ def call(subscriber, event)
5
+ raise InvalidHandler.new(subscriber) unless subscriber.respond_to?(:call)
6
+ subscriber.call(event)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ RSpec.shared_examples :dispatcher do |dispatcher|
2
+ specify "calls subscribed handler" do
3
+ handler = double(:handler)
4
+ event = instance_double(::RubyEventStore::Event)
5
+
6
+ expect(handler).to receive(:call).with(event)
7
+ dispatcher.(handler, event)
8
+ end
9
+
10
+ specify "error when invalid subscriber passed" do
11
+ handler = double(:handler)
12
+ event = instance_double(::RubyEventStore::Event)
13
+
14
+ expect { dispatcher.(handler, event) }.to raise_error(::RubyEventStore::InvalidHandler,
15
+ "#call method not found in RSpec::Mocks::Double subscriber. Are you sure it is a valid subscriber?")
16
+ end
17
+ end
@@ -63,7 +63,7 @@ RSpec.shared_examples :event_broker do |broker_class|
63
63
  " Are you sure it is a valid subscriber?"
64
64
  subscriber = InvalidTestHandler.new
65
65
  broker.add_subscriber(subscriber, [Test1DomainEvent])
66
- expect { broker.notify_subscribers(Test1DomainEvent.new) }.to raise_error(RubyEventStore::MethodNotDefined, message)
66
+ expect { broker.notify_subscribers(Test1DomainEvent.new) }.to raise_error(RubyEventStore::InvalidHandler, message)
67
67
  end
68
68
 
69
69
  it 'raises error when no valid method on global handler' do
@@ -72,7 +72,7 @@ RSpec.shared_examples :event_broker do |broker_class|
72
72
  " Are you sure it is a valid subscriber?"
73
73
  subscriber = InvalidTestHandler.new
74
74
  broker.add_global_subscriber(subscriber)
75
- expect { broker.notify_subscribers(Test1DomainEvent.new) }.to raise_error(RubyEventStore::MethodNotDefined, message)
75
+ expect { broker.notify_subscribers(Test1DomainEvent.new) }.to raise_error(RubyEventStore::InvalidHandler, message)
76
76
  end
77
77
 
78
78
  it 'returns lambda as an output of global subscribe methods' do
@@ -1,3 +1,3 @@
1
1
  module RubyEventStore
2
- VERSION = '0.13.0'
2
+ VERSION = '0.14.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-15 00:00:00.000000000 Z
11
+ date: 2017-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -99,11 +99,14 @@ files:
99
99
  - lib/ruby_event_store.rb
100
100
  - lib/ruby_event_store/client.rb
101
101
  - lib/ruby_event_store/constants.rb
102
+ - lib/ruby_event_store/deprecations.rb
102
103
  - lib/ruby_event_store/errors.rb
103
104
  - lib/ruby_event_store/event.rb
104
105
  - lib/ruby_event_store/in_memory_repository.rb
105
106
  - lib/ruby_event_store/projection.rb
106
107
  - lib/ruby_event_store/pub_sub/broker.rb
108
+ - lib/ruby_event_store/pub_sub/dispatcher.rb
109
+ - lib/ruby_event_store/spec/dispatcher_lint.rb
107
110
  - lib/ruby_event_store/spec/event_broker_lint.rb
108
111
  - lib/ruby_event_store/spec/event_repository_lint.rb
109
112
  - lib/ruby_event_store/version.rb
@@ -128,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
131
  version: '0'
129
132
  requirements: []
130
133
  rubyforge_project:
131
- rubygems_version: 2.6.7
134
+ rubygems_version: 2.6.11
132
135
  signing_key:
133
136
  specification_version: 4
134
137
  summary: Event Store in Ruby