ruby_event_store 0.12.1 → 0.13.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 977449503b7509bf29e5ed508ecd7eee1423cc9f
4
- data.tar.gz: 2dc475ea4234c521c9404a2a6468c1c8670289eb
3
+ metadata.gz: b76da76feedfe6a7a47b7580ae2ef14bb64785a7
4
+ data.tar.gz: 970d9fa6c06ad47649e1bb5f35db967d76508ba8
5
5
  SHA512:
6
- metadata.gz: 4c64882d002f71d4608508e26c4310045da83dbf502db615d9bba52810f99ce02fb85c30423d609dab4bdbd0775efc2b6e034a3c15ee3098beca863bf0fc0ff6
7
- data.tar.gz: 7f8743b45d31462da6074ca737f33a1dfc4805035e594d2564d9f8f15cb37fce5964afc30e8b9ba221faf9d8e827084eba883e8e009692ff2d2dfa4ccad08efe
6
+ metadata.gz: 8d952639196c9a5d24b06d985074dbcaf21c494c20c427c3e3af622f6ae096d4bbd36571f203c2eb2c7ed925aea49ea6262f445b50286eafb8ff22bb96366036
7
+ data.tar.gz: e594bb468b2ea6497c365d5c68709bc0688093331654fe3ef6b41740b331ba21225cdf13ae44c4650446a9d49ae1a2c74998adbf25b71367cccbe9989674a9ac
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ### 0.13.0 (15.10.2016)
2
+
3
+ * Change: Dropped ClosedStruct event (meta)data wrapping PR #34
4
+ Fix for Issue with ClosedStruct and object_id #33
5
+ * Change: Refactor RubyEventStore::Client to have the same methods signatures as RailsEventStore::Client (PR #35),
6
+ this will allow to remove most of the code form RailsEventStore::Client without breaking current
7
+ applications that use RailsEventStore::Client. This change is however a breaking one for RubyEventStore.
8
+
1
9
  ### 0.12.1 (11.08.2016)
2
10
 
3
11
  * Fix: improve EventRepository specification tests (mutation tests)
data/README.md CHANGED
@@ -16,6 +16,16 @@ All documentation and sample codes are available at [http://railseventstore.arke
16
16
 
17
17
  Check the contribution guide on [CONTRIBUTING.md](https://github.com/arkency/ruby_event_store/blob/master/CONTRIBUTING.md)
18
18
 
19
+ We're aiming for 100% mutation coverage in this project.
20
+ Read the reasoning:
21
+
22
+ [Why I want to introduce mutation testing to the rails_event_store gem](http://blog.arkency.com/2015/04/why-i-want-to-introduce-mutation-testing-to-the-rails-event-store-gem/)
23
+
24
+ [Mutation testing and continuous integration](http://blog.arkency.com/2015/05/mutation-testing-and-continuous-integration/)
25
+
26
+ In practice, it means that we run `make mutate` as part of the CI process.
27
+ Whenever you fix a bug or add a new feature, we require that the coverage doesn't go down.
28
+
19
29
  ## About
20
30
 
21
31
  <img src="http://arkency.com/images/arkency.png" alt="Arkency" width="20%" align="left" />
@@ -1,21 +1,22 @@
1
1
  module RubyEventStore
2
2
  class Client
3
- def initialize(repository,
3
+ def initialize(repository:,
4
4
  event_broker: PubSub::Broker.new,
5
+ page_size: PAGE_SIZE,
5
6
  metadata_proc: nil)
6
7
  @repository = repository
7
8
  @event_broker = event_broker
9
+ @page_size = page_size
8
10
  @metadata_proc = metadata_proc
9
11
  end
10
- attr_reader :repository, :event_broker
11
12
 
12
13
  def publish_event(event, stream_name: GLOBAL_STREAM, expected_version: :any)
13
- append_to_stream(stream_name, event, expected_version: expected_version)
14
+ append_to_stream(event, stream_name: stream_name, expected_version: expected_version)
14
15
  event_broker.notify_subscribers(event)
15
16
  :ok
16
17
  end
17
18
 
18
- def append_to_stream(stream_name, event, expected_version: :any)
19
+ def append_to_stream(event, stream_name: GLOBAL_STREAM, expected_version: :any)
19
20
  validate_expected_version(stream_name, expected_version)
20
21
  enriched_event = enrich_event_metadata(event)
21
22
  repository.create(enriched_event, stream_name)
@@ -28,13 +29,13 @@ module RubyEventStore
28
29
  :ok
29
30
  end
30
31
 
31
- def read_events_forward(stream_name, start, count)
32
+ def read_events_forward(stream_name, start: :head, count: page_size)
32
33
  raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
33
34
  page = Page.new(repository, start, count)
34
35
  repository.read_events_forward(stream_name, page.start, page.count)
35
36
  end
36
37
 
37
- def read_events_backward(stream_name, start, count)
38
+ def read_events_backward(stream_name, start: :head, count: page_size)
38
39
  raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
39
40
  page = Page.new(repository, start, count)
40
41
  repository.read_events_backward(stream_name, page.start, page.count)
@@ -50,12 +51,12 @@ module RubyEventStore
50
51
  repository.read_stream_events_backward(stream_name)
51
52
  end
52
53
 
53
- def read_all_streams_forward(start, count)
54
+ def read_all_streams_forward(start: :head, count: page_size)
54
55
  page = Page.new(repository, start, count)
55
56
  repository.read_all_streams_forward(page.start, page.count)
56
57
  end
57
58
 
58
- def read_all_streams_backward(start, count)
59
+ def read_all_streams_backward(start: :head, count: page_size)
59
60
  page = Page.new(repository, start, count)
60
61
  repository.read_all_streams_backward(page.start, page.count)
61
62
  end
@@ -73,14 +74,14 @@ module RubyEventStore
73
74
  end
74
75
 
75
76
  private
76
- attr_reader :metadata_proc
77
+ attr_reader :repository, :page_size, :event_broker, :metadata_proc
77
78
 
78
79
  def enrich_event_metadata(event)
79
- metadata = event.metadata.to_h
80
+ metadata = event.metadata
80
81
  metadata[:timestamp] ||= Time.now.utc
81
82
  metadata.merge!(metadata_proc.call || {}) if metadata_proc
82
83
 
83
- event.class.new(event_id: event.event_id, metadata: metadata, data: event.data.to_h)
84
+ event.class.new(event_id: event.event_id, metadata: metadata, data: event.data)
84
85
  end
85
86
 
86
87
  def handle_subscribe(unsub)
@@ -1,25 +1,24 @@
1
1
  require 'securerandom'
2
- require 'closed_struct'
3
2
 
4
3
  module RubyEventStore
5
4
  class Event
6
- def initialize(event_id: SecureRandom.uuid, metadata: {}, data: {})
5
+ def initialize(event_id: SecureRandom.uuid, metadata: nil, data: nil)
7
6
  @event_id = event_id.to_s
8
- @metadata = ClosedStruct.new(metadata)
9
- @data = ClosedStruct.new(data)
7
+ @metadata = metadata.to_h
8
+ @data = data.to_h
10
9
  end
11
10
  attr_reader :event_id, :metadata, :data
12
11
 
13
12
  def to_h
14
13
  {
15
14
  event_id: event_id,
16
- metadata: metadata.to_h,
17
- data: data.to_h
15
+ metadata: metadata,
16
+ data: data
18
17
  }
19
18
  end
20
19
 
21
20
  def timestamp
22
- metadata.timestamp rescue nil
21
+ metadata[:timestamp]
23
22
  end
24
23
 
25
24
  def ==(other_event)
@@ -39,7 +39,7 @@ module RubyEventStore
39
39
  end
40
40
 
41
41
  def call(event)
42
- handlers[event.class].(current_state, event)
42
+ handlers.fetch(event.class).(current_state, event)
43
43
  end
44
44
 
45
45
  def handled_events
@@ -58,13 +58,13 @@ module RubyEventStore
58
58
  def reduce_from_streams(event_store, start, count)
59
59
  raise ArgumentError.new('Start must be an array with event ids or :head') unless (start.instance_of?(Array) && start.size === streams.size) || start === :head
60
60
  streams.zip(start_events(start)).reduce(initial_state) do |state, (stream_name, start_event_id)|
61
- event_store.read_events_forward(stream_name, start_event_id, count).reduce(state, &method(:transition))
61
+ event_store.read_events_forward(stream_name, start: start_event_id, count: count).reduce(state, &method(:transition))
62
62
  end
63
63
  end
64
64
 
65
65
  def reduce_from_all_streams(event_store, start, count)
66
66
  raise ArgumentError.new('Start must be valid event id or :head') unless start.instance_of?(String) || start === :head
67
- event_store.read_all_streams_forward(start, count).reduce(initial_state, &method(:transition))
67
+ event_store.read_all_streams_forward(start: start, count: count).reduce(initial_state, &method(:transition))
68
68
  end
69
69
 
70
70
  def start_events(start)
@@ -54,12 +54,12 @@ module RubyEventStore
54
54
  end
55
55
 
56
56
  def subscribe(subscriber, event_types)
57
- event_types.each{ |type| subscribers[type] << subscriber }
58
- ->() {event_types.each{ |type| subscribers[type].delete(subscriber) } }
57
+ event_types.each{ |type| subscribers[type.name] << subscriber }
58
+ ->() {event_types.each{ |type| subscribers.fetch(type.name).delete(subscriber) } }
59
59
  end
60
60
 
61
61
  def all_subscribers_for(event_type)
62
- subscribers[event_type] + @global_subscribers
62
+ subscribers[event_type.name] + @global_subscribers
63
63
  end
64
64
  end
65
65
  end
@@ -1,6 +1,6 @@
1
1
  RSpec.shared_examples :event_repository do |repository_class|
2
2
  TestDomainEvent = Class.new(RubyEventStore::Event)
3
- subject(:repository) { repository_class.new }
3
+ let(:repository) { subject || repository_class.new }
4
4
 
5
5
  it 'just created is empty' do
6
6
  expect(repository.read_all_streams_forward(:head, 1)).to be_empty
@@ -24,14 +24,14 @@ RSpec.shared_examples :event_repository do |repository_class|
24
24
  event = TestDomainEvent.new(data: { order_id: 3 })
25
25
  repository.create(event, 'stream')
26
26
  retrieved_event = repository.read_all_streams_forward(:head, 1).first
27
- expect(retrieved_event.data.order_id).to eq(3)
27
+ expect(retrieved_event.data[:order_id]).to eq(3)
28
28
  end
29
29
 
30
30
  it 'metadata attributes are retrieved' do
31
31
  event = TestDomainEvent.new(metadata: { request_id: 3 })
32
32
  repository.create(event, 'stream')
33
33
  retrieved_event = repository.read_all_streams_forward(:head, 1).first
34
- expect(retrieved_event.metadata.request_id).to eq(3)
34
+ expect(retrieved_event.metadata[:request_id]).to eq(3)
35
35
  end
36
36
 
37
37
  it 'does not have deleted streams' do
@@ -1,3 +1,3 @@
1
1
  module RubyEventStore
2
- VERSION = '0.12.1'
2
+ VERSION = '0.13.0'
3
3
  end
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'ruby_event_store/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "ruby_event_store"
7
+ spec.name = 'ruby_event_store'
8
8
  spec.version = RubyEventStore::VERSION
9
9
  spec.licenses = ['MIT']
10
10
  spec.authors = ['Arkency']
@@ -15,14 +15,13 @@ Gem::Specification.new do |spec|
15
15
  spec.homepage = 'https://github.com/arkency/ruby_event_store'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.add_dependency "closed_struct", "~> 0.1"
23
- spec.add_development_dependency "bundler", "~> 1.8"
24
- spec.add_development_dependency "rake", "~> 10.0"
25
- spec.add_development_dependency 'rspec', "~> 3.2"
26
- spec.add_development_dependency 'pry', "~> 0"
27
- spec.add_development_dependency 'mutant-rspec', '~> 0.7.9'
22
+ spec.add_development_dependency 'bundler', '~> 1.8'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'rspec', '~> 3.4'
25
+ spec.add_development_dependency 'pry', '~> 0'
26
+ spec.add_development_dependency 'mutant-rspec', '~> 0.8.11'
28
27
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.1
4
+ version: 0.13.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-08-11 00:00:00.000000000 Z
11
+ date: 2016-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: closed_struct
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.1'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.1'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +44,14 @@ dependencies:
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '3.2'
47
+ version: '3.4'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '3.2'
54
+ version: '3.4'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: pry
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +72,14 @@ dependencies:
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: 0.7.9
75
+ version: 0.8.11
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: 0.7.9
82
+ version: 0.8.11
97
83
  description: Implementation of Event Store in Ruby
98
84
  email:
99
85
  - dev@arkency.com
@@ -142,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
128
  version: '0'
143
129
  requirements: []
144
130
  rubyforge_project:
145
- rubygems_version: 2.5.1
131
+ rubygems_version: 2.6.7
146
132
  signing_key:
147
133
  specification_version: 4
148
134
  summary: Event Store in Ruby