euston-eventstore 1.1.0 → 1.2.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.
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'euston-eventstore'
3
- s.version = '1.1.0'
4
- s.date = '2011-10-03'
3
+ s.version = '1.2.0'
4
+ s.date = '2011-10-12'
5
5
  s.platform = RUBY_PLATFORM.to_s == 'java' ? 'java' : Gem::Platform::RUBY
6
6
  s.authors = ['Lee Henson', 'Guy Boertje']
7
7
  s.email = ['lee.m.henson@gmail.com', 'guyboertje@gmail.com']
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
14
14
  Rakefile
15
15
  euston-eventstore.gemspec
16
16
  lib/euston-eventstore.rb
17
+ lib/euston-eventstore/command_message.rb
17
18
  lib/euston-eventstore/commit.rb
18
19
  lib/euston-eventstore/constants.rb
19
20
  lib/euston-eventstore/dispatcher/asynchronous_dispatcher.rb
@@ -23,6 +24,7 @@ Gem::Specification.new do |s|
23
24
  lib/euston-eventstore/event_message.rb
24
25
  lib/euston-eventstore/optimistic_event_store.rb
25
26
  lib/euston-eventstore/optimistic_event_stream.rb
27
+ lib/euston-eventstore/persistence/mongodb/mongo_command_message.rb
26
28
  lib/euston-eventstore/persistence/mongodb/mongo_commit.rb
27
29
  lib/euston-eventstore/persistence/mongodb/mongo_commit_id.rb
28
30
  lib/euston-eventstore/persistence/mongodb/mongo_config.rb
@@ -51,17 +53,17 @@ Gem::Specification.new do |s|
51
53
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
52
54
 
53
55
  s.add_dependency 'activesupport', '~> 3.0.9'
54
- s.add_dependency 'euston', '~> 1.1.0'
56
+ s.add_dependency 'euston', '~> 1.2.0'
55
57
  s.add_dependency 'hash-keys', '~> 1.0.0'
56
58
 
57
59
  if RUBY_PLATFORM.to_s == 'java'
58
60
  s.add_dependency 'json-jruby', '~> 1.5.0'
59
- s.add_dependency 'jmongo', '~> 1.1.0'
61
+ s.add_dependency 'jmongo', '~> 1.1.1'
60
62
  else
61
- s.add_dependency 'bson', '~> 1.3.1'
62
- s.add_dependency 'bson_ext', '~> 1.3.1'
63
+ s.add_dependency 'bson', '~> 1.4.0'
64
+ s.add_dependency 'bson_ext', '~> 1.4.0'
63
65
  s.add_dependency 'json', '~> 1.5.0'
64
- s.add_dependency 'mongo', '~> 1.3.1'
66
+ s.add_dependency 'mongo', '~> 1.4.0'
65
67
  s.add_dependency 'uuid', '~> 2.3.0'
66
68
  end
67
69
 
@@ -4,6 +4,7 @@ require 'hash-keys'
4
4
  require 'euston-eventstore/commit'
5
5
  require 'euston-eventstore/constants'
6
6
  require 'euston-eventstore/errors'
7
+ require 'euston-eventstore/command_message'
7
8
  require 'euston-eventstore/event_message'
8
9
  require 'euston-eventstore/optimistic_event_store'
9
10
  require 'euston-eventstore/optimistic_event_stream'
@@ -17,6 +18,7 @@ require 'euston-eventstore/persistence/stream_head'
17
18
  require 'euston-eventstore/persistence/mongodb/mongo_commit'
18
19
  require 'euston-eventstore/persistence/mongodb/mongo_commit_id'
19
20
  require 'euston-eventstore/persistence/mongodb/mongo_config'
21
+ require 'euston-eventstore/persistence/mongodb/mongo_command_message'
20
22
  require 'euston-eventstore/persistence/mongodb/mongo_event_message'
21
23
  require 'euston-eventstore/persistence/mongodb/mongo_persistence_engine'
22
24
  require 'euston-eventstore/persistence/mongodb/mongo_persistence_factory'
@@ -0,0 +1,26 @@
1
+ module Euston
2
+ module EventStore
3
+ # Represents a single element in a stream of commands.
4
+ class CommandMessage
5
+
6
+ def initialize arg = nil
7
+ if arg.is_a?(Hash) && (arg.keys & ['body','headers']).size == 2
8
+ @body, @headers = arg.values_at('body','headers')
9
+ else
10
+ @headers = {}
11
+ @body = arg
12
+ end
13
+ end
14
+
15
+ def to_hash
16
+ { :headers => @headers, :body => @body }
17
+ end
18
+
19
+ # Gets the metadata which provides additional, unstructured information about this command.
20
+ attr_reader :headers
21
+
22
+ # Gets or sets the actual comman body.
23
+ attr_reader :body
24
+ end
25
+ end
26
+ end
@@ -11,7 +11,8 @@ module Euston
11
11
  :commit_sequence => 1,
12
12
  :commit_timestamp => Time.now.utc,
13
13
  :headers => OpenStruct.new,
14
- :events => []
14
+ :events => [],
15
+ :commands => []
15
16
  }
16
17
  values = defaults.merge hash
17
18
  defaults.keys.each { |key| instance_variable_set "@#{key}", values[key] }
@@ -25,7 +26,8 @@ module Euston
25
26
  :commit_sequence => commit_sequence,
26
27
  :commit_timestamp => commit_timestamp,
27
28
  :headers => headers.is_a?(OpenStruct) ? headers.instance_variable_get(:@table) : headers,
28
- :events => events
29
+ :events => events,
30
+ :commands => commands
29
31
  }
30
32
  end
31
33
  # Gets the value which uniquely identifies the stream to which the commit belongs.
@@ -49,6 +51,9 @@ module Euston
49
51
  # Gets the collection of event messages to be committed as a single unit.
50
52
  attr_reader :events
51
53
 
54
+ # Gets the collection of command messages to be committed as a single unit.
55
+ attr_reader :commands
56
+
52
57
  def ==(other)
53
58
  (other.is_a? Commit) && (@stream_id == other.stream_id) && (@commit_id == other.commit_id)
54
59
  end
@@ -5,6 +5,7 @@ module Euston
5
5
  @persistence = options[:persistence]
6
6
  @committed_events = []
7
7
  @committed_headers = {}
8
+ @uncommitted_commands = []
8
9
  @uncommitted_events = []
9
10
  @uncommitted_headers = {}
10
11
  @commit_sequence = 0
@@ -31,13 +32,17 @@ module Euston
31
32
  end
32
33
  end
33
34
 
34
- attr_reader :stream_id, :stream_revision, :commit_sequence, :committed_events, :committed_headers, :uncommitted_events, :uncommitted_headers
35
+ attr_reader :stream_id, :stream_revision, :commit_sequence, :committed_events, :committed_headers, :uncommitted_commands, :uncommitted_events, :uncommitted_headers
35
36
 
36
- def <<(event)
37
- @uncommitted_events << event unless event.nil? || event.body.nil?
37
+ def <<(message)
38
+ return if message.nil? || message.body.nil?
39
+
40
+ @uncommitted_commands << message if message.is_a? CommandMessage
41
+ @uncommitted_events << message if message.is_a? EventMessage
38
42
  end
39
43
 
40
44
  def clear_changes
45
+ @uncommitted_commands = []
41
46
  @uncommitted_events = []
42
47
  @uncommitted_headers = {}
43
48
  end
@@ -66,11 +71,12 @@ module Euston
66
71
  :commit_sequence => commit_sequence + 1,
67
72
  :commit_timestamp => Time.now.utc,
68
73
  :headers => uncommitted_headers,
69
- :events => uncommitted_events
74
+ :events => uncommitted_events,
75
+ :commands => uncommitted_commands
70
76
  end
71
77
 
72
78
  def has_changes
73
- !uncommitted_events.empty?
79
+ !uncommitted_commands.empty? || !uncommitted_events.empty?
74
80
  end
75
81
 
76
82
  def persist_changes(commit_id)
@@ -0,0 +1,32 @@
1
+ module Euston
2
+ module EventStore
3
+ module Persistence
4
+ module Mongodb
5
+ module MongoCommandMessage
6
+ extend ActiveSupport::Concern
7
+
8
+ class << self
9
+ def from_hash hash
10
+ hash.recursive_symbolize_keys!
11
+
12
+ message = CommandMessage.new hash[:body]
13
+ message.instance_variable_set :@headers, hash[:headers]
14
+ message
15
+ end
16
+ end
17
+
18
+ def to_hash
19
+ {
20
+ :headers => headers,
21
+ :body => body.to_hash.recursive_stringify_symbol_values!
22
+ }
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ class CommandMessage
29
+ include Persistence::Mongodb::MongoCommandMessage
30
+ end
31
+ end
32
+ end
@@ -3,7 +3,7 @@ module Euston
3
3
  module Persistence
4
4
  module Mongodb
5
5
  module MongoCommit
6
- extend ::ActiveSupport::Concern
6
+ extend ActiveSupport::Concern
7
7
 
8
8
  included do
9
9
  alias_method :original_initialize, :initialize
@@ -18,8 +18,10 @@ module Euston
18
18
 
19
19
  id = hash['_id']
20
20
  events = hash['events'].sort_by { |e| e["stream_revision"] }.to_a
21
+ commands = hash['commands'] || []
21
22
  stream_revision = events.last['stream_revision']
22
- events = events.map { |e| Euston::EventStore::Persistence::Mongodb::MongoEventMessage.from_hash e['payload'] }
23
+ events = events.map { |e| MongoEventMessage.from_hash e['payload'] }
24
+ commands = commands.map { |c| MongoCommandMessage.from_hash c }
23
25
 
24
26
  Euston::EventStore::Commit.new :stream_id => id['stream_id'],
25
27
  :stream_revision => stream_revision,
@@ -27,7 +29,8 @@ module Euston
27
29
  :commit_sequence => id['commit_sequence'],
28
30
  :commit_timestamp => hash['commit_timestamp'],
29
31
  :headers => hash['headers'].recursive_symbolize_keys!,
30
- :events => events
32
+ :events => events,
33
+ :commands => commands
31
34
  end
32
35
  end
33
36
 
@@ -45,6 +48,7 @@ module Euston
45
48
  hash.delete :commit_sequence
46
49
  hash[:dispatched] ||= false
47
50
  hash[:events] = hash[:events].map { |e| e.to_hash }
51
+ hash[:commands] = hash[:commands].map { |c| c.to_hash }
48
52
  hash[:commit_timestamp] = hash[:commit_timestamp].to_f
49
53
  hash
50
54
  end
@@ -60,6 +64,10 @@ module Euston
60
64
  event_hash
61
65
  end
62
66
 
67
+ hash[:commands] = commands.map do |c|
68
+ c.to_hash
69
+ end
70
+
63
71
  hash[:commit_timestamp_for_humans] = Time.at(hash[:commit_timestamp]).utc
64
72
 
65
73
  hash
@@ -8,14 +8,10 @@ module Euston
8
8
  include ::Singleton
9
9
 
10
10
  def uri
11
- @uri ||= 'mongodb://0.0.0.0:27017/'
11
+ @uri ||= 'mongodb://0.0.0.0:27017/?safe=true;fsync=true;w=1;'
12
12
  end
13
13
 
14
- def options
15
- @options ||= { :safe => true, :fsync => true, :journal => true }
16
- end
17
-
18
- attr_writer :uri, :options
14
+ attr_writer :uri
19
15
  attr_accessor :database, :logger
20
16
  end
21
17
  end
@@ -7,17 +7,18 @@ module Euston
7
7
 
8
8
  class << self
9
9
  def from_hash(hash)
10
- {}.recursive_symbolize_keys!
11
- message = EventMessage.new hash['body'].recursive_symbolize_keys!
12
- message.instance_variable_set :@headers, hash['headers'].recursive_symbolize_keys!
10
+ hash.recursive_symbolize_keys!
11
+
12
+ message = EventMessage.new hash[:body]
13
+ message.instance_variable_set :@headers, hash[:headers]
13
14
  message
14
15
  end
15
16
  end
16
17
 
17
18
  def to_hash
18
19
  {
19
- :headers => headers,
20
- :body => body.to_hash.recursive_stringify_symbol_values!
20
+ :headers => headers,
21
+ :body => body.to_hash.recursive_stringify_symbol_values!
21
22
  }
22
23
  end
23
24
  end
@@ -22,23 +22,16 @@ module Euston
22
22
  doc = { 'headers' => mongo_snapshot[:headers],
23
23
  'payload' => mongo_snapshot[:payload] }.merge(id)
24
24
 
25
- # jmongo doesn't currently honour the safe mode on the connection, so we have to specify safe here
26
- persisted_snapshots.update id, doc, :upsert => true, :safe => true
25
+ persisted_snapshots.update id, doc, :upsert => true
27
26
 
28
27
  id = { '_id' => snapshot.stream_id }
29
28
 
30
- # jmongo's find_one is broken
31
- if defined?(JMongo)
32
- stream_head = MongoStreamHead.from_hash persisted_stream_heads.find(id).to_a.first
33
- else
34
- stream_head = MongoStreamHead.from_hash persisted_stream_heads.find_one(id)
35
- end
29
+ stream_head = MongoStreamHead.from_hash persisted_stream_heads.find_one(id)
36
30
 
37
31
  modifiers = { '$set' => { 'snapshot_revision' => snapshot.stream_revision,
38
32
  'unsnapshotted' => stream_head.head_revision - snapshot.stream_revision } }
39
33
 
40
- # jmongo doesn't currently honour the safe mode on the connection, so we have to specify safe here
41
- persisted_stream_heads.update id, modifiers, :safe => true
34
+ persisted_stream_heads.update id, modifiers
42
35
  return true
43
36
  rescue Mongo::OperationFailure
44
37
  return false
@@ -50,19 +43,13 @@ module Euston
50
43
  commit = attempt.to_mongo_commit
51
44
 
52
45
  begin
53
- # jmongo doesn't currently honour the safe mode on the connection, so we have to specify safe here
54
- persisted_commits.insert commit, :safe => true
46
+ persisted_commits.insert commit
55
47
 
56
48
  update_stream_head_async attempt.stream_id, attempt.stream_revision, attempt.events.length
57
49
  rescue Mongo::OperationFailure, NativeException => e
58
50
  raise(Euston::EventStore::StorageError, e.message, e.backtrace) unless e.message.include? CONCURRENCY_EXCEPTION
59
51
 
60
- # jmongo's find_one is broken
61
- if defined?(JMongo)
62
- committed = persisted_commits.find(attempt.to_id_query).to_a.first
63
- else
64
- committed = persisted_commits.find_one(attempt.to_id_query)
65
- end
52
+ committed = persisted_commits.find_one(attempt.to_id_query)
66
53
 
67
54
  raise Euston::EventStore::DuplicateCommitError if !committed.nil? && committed['commit_id'] == attempt.commit_id
68
55
  raise Euston::EventStore::ConcurrencyError
@@ -82,7 +69,7 @@ module Euston
82
69
  order = [ 'events.stream_revision', Mongo::ASCENDING ]
83
70
  end
84
71
 
85
- persisted_commits.find(query).sort(order).to_a.map { |hash| MongoCommit.from_hash hash }
72
+ persisted_commits.find(query, :sort => order).to_a.map { |hash| MongoCommit.from_hash hash }
86
73
  end
87
74
  end
88
75
 
@@ -92,7 +79,7 @@ module Euston
92
79
  '$lte' => { 'stream_id' => stream_id, 'stream_revision' => max_revision } } }
93
80
  order = [ '_id', Mongo::DESCENDING ]
94
81
 
95
- persisted_snapshots.find(query).sort(order).limit(1).to_a.map { |hash| MongoSnapshot::from_hash hash }.first
82
+ persisted_snapshots.find(query, :sort => order, :limit => 1).map { |hash| MongoSnapshot::from_hash hash }.first
96
83
  end
97
84
  end
98
85
 
@@ -101,22 +88,25 @@ module Euston
101
88
  query = { 'unsnapshotted' => { '$gte' => max_threshold } }
102
89
  order = [ 'unsnapshotted', Mongo::DESCENDING ]
103
90
 
104
- persisted_stream_heads.find(query).sort(order).to_a.map { |hash| MongoStreamHead.from_hash hash }
91
+ persisted_stream_heads.find(query, :sort => order).map { |hash| MongoStreamHead.from_hash hash }
105
92
  end
106
93
  end
107
94
 
108
- def get_undispatched_commits
95
+ def get_undispatched_commits component_id = nil
109
96
  try_mongo do
110
97
  query = { 'dispatched' => false }
98
+ query['component_id'] = component_id unless component_id.nil?
99
+
111
100
  order = [ 'commit_timestamp', Mongo::ASCENDING ]
112
101
 
113
- persisted_commits.find(query).sort(order).to_a.map { |hash| MongoCommit.from_hash hash }
102
+ persisted_commits.find(query, :sort => order, :batch_size => 100).to_a.map { |hash| MongoCommit.from_hash hash }
114
103
  end
115
104
  end
116
105
 
117
106
  def init
118
107
  try_mongo do
119
108
  persisted_commits.ensure_index [ ['dispatched', Mongo::ASCENDING],
109
+ ['component_id', Mongo::ASCENDING],
120
110
  ['commit_timestamp', Mongo::ASCENDING] ], :unique => false, :name => 'dispatched_index'
121
111
 
122
112
  persisted_commits.ensure_index [ ['_id.stream_id', Mongo::ASCENDING],
@@ -130,9 +120,33 @@ module Euston
130
120
  end
131
121
 
132
122
  def mark_commit_as_dispatched(commit)
123
+ mark_commits_as_dispatched [commit]
124
+ end
125
+
126
+ def mark_commits_as_dispatched(commits)
127
+ return if commits.empty?
128
+
129
+ try_mongo do
130
+ id_queries = commits.map { |c| c.to_id_query }
131
+ query = { '$or' => id_queries }
132
+
133
+ persisted_commits.update query, { '$set' => { 'dispatched' => true }, '$unset' => { 'component_id' => 1 } }, :multi => true
134
+ end
135
+ end
136
+
137
+ def take_ownership_of_undispatched_commits component_id
133
138
  try_mongo do
134
- # jmongo doesn't currently honour the safe mode on the connection, so we have to specify safe here
135
- persisted_commits.update commit.to_id_query, { '$set' => { 'dispatched' => true }}, :safe => true
139
+ new_commits_eligible_for_dispatch = { 'component_id' => nil,
140
+ 'dispatched' => false }
141
+
142
+ commits_stuck_in_other_components = { 'component_id' => { '$ne' => nil } ,
143
+ 'dispatched' => false,
144
+ 'commit_timestamp' => Time.now.to_f - 60 }
145
+
146
+ query = { '$or' => [ new_commits_eligible_for_dispatch, commits_stuck_in_other_components ] }
147
+ doc = { '$set' => { 'component_id' => component_id } }
148
+
149
+ persisted_commits.update query, doc, :multi => true
136
150
  end
137
151
  end
138
152
 
@@ -162,12 +176,11 @@ module Euston
162
176
 
163
177
  def update_stream_head_async(stream_id, stream_revision, events_count)
164
178
  Thread.fork do
165
- # jmongo doesn't currently honour the safe mode on the connection, so we have to specify safe here
166
179
  id = { '_id' => stream_id }
167
180
  doc = { '$set' => { 'head_revision' => stream_revision },
168
181
  '$inc' => { 'snapshot_revision' => 0, 'unsnapshotted' => events_count } }
169
182
 
170
- persisted_stream_heads.update id, doc, :upsert => true, :safe => true
183
+ persisted_stream_heads.update id, doc, :upsert => true
171
184
  end
172
185
  end
173
186
 
@@ -17,7 +17,7 @@ module Euston
17
17
  class MongoPersistenceFactory
18
18
  def self.build
19
19
  config = Config.instance
20
- options = config.options
20
+ options = {}
21
21
  options.merge!(:logger => config.logger) unless config.logger.nil?
22
22
 
23
23
  @connection ||= Mongo::Connection.from_uri config.uri, options
@@ -11,10 +11,10 @@ module Euston
11
11
 
12
12
  id = hash['_id']
13
13
 
14
- Euston::EventStore::Snapshot.new id['stream_id'],
15
- id['stream_revision'],
16
- hash['payload'].recursive__symbolize__keys!,
17
- hash['headers'].recursive__symbolize__keys!
14
+ Snapshot.new id['stream_id'],
15
+ id['stream_revision'],
16
+ hash['payload'].recursive__symbolize__keys!,
17
+ hash['headers'].recursive__symbolize__keys!
18
18
  end
19
19
  end
20
20
 
@@ -3,12 +3,12 @@ module Euston
3
3
  module Persistence
4
4
  module Mongodb
5
5
  module MongoStreamHead
6
- extend ::ActiveSupport::Concern
6
+ extend ActiveSupport::Concern
7
7
 
8
8
  class << self
9
9
  def from_hash hash
10
10
  return nil if hash.nil?
11
- Euston::EventStore::Persistence::StreamHead.new hash['_id'], hash['head_revision'], hash['snapshot_revision']
11
+ StreamHead.new hash['_id'], hash['head_revision'], hash['snapshot_revision']
12
12
  end
13
13
  end
14
14
 
@@ -10,7 +10,8 @@ module Euston
10
10
 
11
11
  def save aggregate
12
12
  stream = event_store.open_stream :stream_id => aggregate.aggregate_id
13
- aggregate.uncommitted_events.each { |e| stream << Euston::EventStore::EventMessage.new(e.to_hash.stringify__keys) }
13
+ aggregate.uncommitted_events.each { |e| stream << EventStore::EventMessage.new(e.to_hash.stringify__keys) }
14
+ aggregate.uncommitted_commands.each { |c| stream << EventStore::CommandMessage.new(c.to_hash.stringify__keys) }
14
15
  stream.uncommitted_headers[:aggregate_type] = aggregate.class.to_s
15
16
  stream.commit_changes Euston.uuid.generate
16
17
  end
@@ -1,5 +1,5 @@
1
1
  module Euston
2
2
  module EventStore
3
- VERSION = "1.1.0"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
data/spec/spec_helper.rb CHANGED
@@ -28,14 +28,13 @@ require 'support/array_enumeration_counter'
28
28
 
29
29
  mongo_config = Euston::EventStore::Persistence::Mongodb::Config.instance
30
30
  mongo_config.database = 'event_store_tests'
31
- mongo_config.options = { :safe => true, :fsync => true, :journal => true } #, :logger => Logger.new(STDOUT)
32
31
 
33
32
  RSpec.configure do |config|
34
33
  config.fail_fast = true
35
34
 
36
35
  config.before :each do
37
- connection = Mongo::Connection.from_uri 'mongodb://0.0.0.0:27017/', mongo_config.options
38
- db = connection.db(mongo_config.database)
36
+ connection = Mongo::Connection.from_uri mongo_config.uri
37
+ db = connection.db mongo_config.database
39
38
  db.collections.select { |c| c.name !~ /system/ }.each { |c| db.drop_collection c.name }
40
39
  end
41
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: euston-eventstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-03 00:00:00.000000000 Z
13
+ date: 2011-10-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
17
- requirement: &76979100 !ruby/object:Gem::Requirement
17
+ requirement: &81168440 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,21 +22,21 @@ dependencies:
22
22
  version: 3.0.9
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *76979100
25
+ version_requirements: *81168440
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: euston
28
- requirement: &77012460 !ruby/object:Gem::Requirement
28
+ requirement: &80665360 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.0
33
+ version: 1.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *77012460
36
+ version_requirements: *80665360
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: hash-keys
39
- requirement: &77011560 !ruby/object:Gem::Requirement
39
+ requirement: &80664300 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,32 +44,32 @@ dependencies:
44
44
  version: 1.0.0
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *77011560
47
+ version_requirements: *80664300
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: bson
50
- requirement: &77010990 !ruby/object:Gem::Requirement
50
+ requirement: &80662450 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 1.3.1
55
+ version: 1.4.0
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *77010990
58
+ version_requirements: *80662450
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: bson_ext
61
- requirement: &77010070 !ruby/object:Gem::Requirement
61
+ requirement: &80660670 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
65
65
  - !ruby/object:Gem::Version
66
- version: 1.3.1
66
+ version: 1.4.0
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *77010070
69
+ version_requirements: *80660670
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: json
72
- requirement: &77009580 !ruby/object:Gem::Requirement
72
+ requirement: &80659140 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,21 +77,21 @@ dependencies:
77
77
  version: 1.5.0
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *77009580
80
+ version_requirements: *80659140
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: mongo
83
- requirement: &77008960 !ruby/object:Gem::Requirement
83
+ requirement: &80656520 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
87
87
  - !ruby/object:Gem::Version
88
- version: 1.3.1
88
+ version: 1.4.0
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *77008960
91
+ version_requirements: *80656520
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: uuid
94
- requirement: &77008510 !ruby/object:Gem::Requirement
94
+ requirement: &80655690 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ~>
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: 2.3.0
100
100
  type: :runtime
101
101
  prerelease: false
102
- version_requirements: *77008510
102
+ version_requirements: *80655690
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: awesome_print
105
- requirement: &77007730 !ruby/object:Gem::Requirement
105
+ requirement: &80654900 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: 0.4.0
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *77007730
113
+ version_requirements: *80654900
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: fuubar
116
- requirement: &77006970 !ruby/object:Gem::Requirement
116
+ requirement: &80651070 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ~>
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: 0.0.0
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *77006970
124
+ version_requirements: *80651070
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rake
127
- requirement: &77006470 !ruby/object:Gem::Requirement
127
+ requirement: &80650260 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: 0.9.2
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *77006470
135
+ version_requirements: *80650260
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: rspec
138
- requirement: &77005820 !ruby/object:Gem::Requirement
138
+ requirement: &80648850 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ~>
@@ -143,7 +143,7 @@ dependencies:
143
143
  version: 2.6.0
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *77005820
146
+ version_requirements: *80648850
147
147
  description: Ruby port for Jonathan Oliver's EventStore. See https://github.com/joliver/EventStore
148
148
  for details.
149
149
  email:
@@ -157,6 +157,7 @@ files:
157
157
  - Rakefile
158
158
  - euston-eventstore.gemspec
159
159
  - lib/euston-eventstore.rb
160
+ - lib/euston-eventstore/command_message.rb
160
161
  - lib/euston-eventstore/commit.rb
161
162
  - lib/euston-eventstore/constants.rb
162
163
  - lib/euston-eventstore/dispatcher/asynchronous_dispatcher.rb
@@ -166,6 +167,7 @@ files:
166
167
  - lib/euston-eventstore/event_message.rb
167
168
  - lib/euston-eventstore/optimistic_event_store.rb
168
169
  - lib/euston-eventstore/optimistic_event_stream.rb
170
+ - lib/euston-eventstore/persistence/mongodb/mongo_command_message.rb
169
171
  - lib/euston-eventstore/persistence/mongodb/mongo_commit.rb
170
172
  - lib/euston-eventstore/persistence/mongodb/mongo_commit_id.rb
171
173
  - lib/euston-eventstore/persistence/mongodb/mongo_config.rb