ruby_cqrs 0.2.2 → 0.2.3

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: e5defe0400414fa278a0716341c10d41dcf050a9
4
- data.tar.gz: 303081f7864984adc5675514c0a3355538f67c5c
3
+ metadata.gz: 55315f0c54dfcba27b2e0bd0a40390cb6743906a
4
+ data.tar.gz: 6d462d0ff742db26e70c0d5d51f89418b9906f82
5
5
  SHA512:
6
- metadata.gz: bb699d7dda967e16639dc5d28b640845941a6c0545ffb4108e9338242352b0bd7a92253ef3b8329d0717c37ca44eb85ffb559c7b0d4874b25d1b70c6b9611bd4
7
- data.tar.gz: e975d958f11be45a15dc16b27ab410546d470a80d579dd60cdc94b5bb5a38a25665ac2f0658c7d7d74f8e973e5b8e68428ff28bca43586ccb463069b7e204230
6
+ metadata.gz: bccb7a15ecf97f11c1e11d6bb03bf0d1ba3099c5dd3d215762f145751f5990ddbc3670641b45f8dc19c52c075ca6d645fd9c8594cb0d76731c6b8eaf0b3ba820
7
+ data.tar.gz: c052bdfd8e7a7ac56b6b7918dc74bf5f97d068937fcca70cddd0d4a18fd520f049d9bfc71227c95b224bf4cff4dc829c056eb38330024b3ba22ea03a6aa888f3
@@ -1,4 +1,3 @@
1
- require('ruby_cqrs/error')
2
1
  require('ruby_cqrs/guid')
3
2
 
4
3
  require('ruby_cqrs/data/event_store')
@@ -0,0 +1,96 @@
1
+ require 'contracts'
2
+
3
+ module RubyCqrs
4
+ module Validation
5
+ include Contracts
6
+ include Contracts::Modules
7
+
8
+ class EventStore
9
+ def self.valid? val
10
+ val.is_a? RubyCqrs::Data::EventStore
11
+ end
12
+ end
13
+
14
+ class Event
15
+ def self.valid? val
16
+ val.is_a? RubyCqrs::Domain::Event
17
+ end
18
+ end
19
+
20
+ class TypeOfEvent
21
+ def self.valid? val
22
+ val < RubyCqrs::Domain::Event
23
+ end
24
+ end
25
+
26
+ class Snapshot
27
+ def self.valid? val
28
+ val.is_a? RubyCqrs::Domain::Snapshot
29
+ end
30
+ end
31
+
32
+ class Aggregate
33
+ def self.valid? val
34
+ val.is_a? RubyCqrs::Domain::Aggregate
35
+ end
36
+ end
37
+
38
+ class AggregateId
39
+ def self.valid? val
40
+ RubyCqrs::Guid.validate? val
41
+ end
42
+ end
43
+
44
+ AggregateChanges = ({ :events => ArrayOf[Event],
45
+ :aggregate_id => AggregateId,
46
+ :aggregate_type => String,
47
+ :expecting_source_version => Or[0, Pos],
48
+ :expecting_version => Pos })
49
+
50
+ AggregateChangesWithSnapshot = ({\
51
+ :events => ArrayOf[Event],
52
+ :aggregate_id => AggregateId,
53
+ :aggregate_type => String,
54
+ :expecting_source_version => Or[0, Pos],
55
+ :expecting_version => Pos,
56
+ :snapshot => {\
57
+ :state => Snapshot,
58
+ :state_type => String,
59
+ :version => Pos }})
60
+
61
+ AggregateState = ({\
62
+ :aggregate_id => AggregateId,
63
+ :aggregate_type => String,
64
+ :events => ArrayOf[Event]})
65
+
66
+ AggregateStateWithSnapshot = ({\
67
+ :aggregate_id => AggregateId,
68
+ :aggregate_type => String,
69
+ :snapshot => {\
70
+ :state => Snapshot,
71
+ :version => Pos },
72
+ :events => ArrayOf[Event]})
73
+
74
+ SerializedAggregateState = ({\
75
+ :aggregate_id => AggregateId,
76
+ :aggregate_type => String,
77
+ :events => ArrayOf[{\
78
+ :aggregate_id => AggregateId,
79
+ :event_type => String,
80
+ :version => Pos,
81
+ :data => String }]})
82
+
83
+ SerializedAggregateStateWithSnapshot = ({\
84
+ :aggregate_id => AggregateId,
85
+ :aggregate_type => String,
86
+ :snapshot => {\
87
+ :state_type => String,
88
+ :version => Pos,
89
+ :data => String },
90
+ :events => ArrayOf[{\
91
+ :aggregate_id => AggregateId,
92
+ :event_type => String,
93
+ :version => Pos,
94
+ :data => String }]})
95
+ end
96
+ end
@@ -1,26 +1,23 @@
1
+ require 'contracts'
2
+ require_relative '../contracts'
3
+
1
4
  module RubyCqrs
2
5
  module Data
3
6
  class InMemoryEventStore
4
7
  include EventStore
8
+ include Contracts
9
+ include Contracts::Modules
5
10
 
11
+ Contract None => Any
6
12
  def initialize
7
13
  @aggregate_store = {}
8
14
  @event_store = {}
9
15
  @snapshot_store = {}
10
16
  end
11
17
 
12
- # the returned format is as bellow
13
- # { :aggregate_id => some_aggregtate_id(uuid),
14
- # :aggregate_type => the full qualified name of the aggregate type(string),
15
- # :events => [ {:aggregate_id => the aggregate_id of the event belongs to(uuid),
16
- # :event_type => the full qualified name of the event type(string),
17
- # :version => the version number of the event(integer),
18
- # :data => protobuf encoded content of the event object(string)}, ..., {} ],
19
- # :snapshot => { :state_type => the full qualified name of the snapshot type(string),
20
- # :version => the version number of the aggregate when snapshot(integer),
21
- # :data => protobuf encoded content of the snapshot object(string)} }
22
- # the snapshot object could be null; and the events array should return events which has a version
23
- # number greater than the version number of the returning snapshot, if any.
18
+ Contract Validation::AggregateId, Any\
19
+ => Or[Validation::SerializedAggregateState,\
20
+ Validation::SerializedAggregateStateWithSnapshot]
24
21
  def load_by guid, command_context
25
22
  key = guid.to_sym
26
23
  state = { :aggregate_id => guid,
@@ -35,8 +32,8 @@ module RubyCqrs
35
32
  state
36
33
  end
37
34
 
38
- # the changes are defined as an array of aggregate change,
39
- # each change's format is identical to what above load_by returns
35
+ Contract Or[ArrayOf[Validation::SerializedAggregateState],\
36
+ ArrayOf[Validation::SerializedAggregateStateWithSnapshot]], Any => nil
40
37
  def save changes, command_context
41
38
  changes.each do |change|
42
39
  key = change[:aggregate_id].to_sym
@@ -2,8 +2,8 @@ require 'active_support/inflector'
2
2
  require 'beefcake'
3
3
 
4
4
  module RubyCqrs
5
- class ObjectNotEncodableError < Error; end
6
- class ObjectNotDecodableError < Error; end
5
+ class ObjectNotEncodableError < StandardError; end
6
+ class ObjectNotDecodableError < StandardError; end
7
7
 
8
8
  module Data
9
9
  module Encodable
@@ -1,10 +1,16 @@
1
1
  require 'active_support/inflector'
2
+ require 'contracts'
3
+ require_relative '../contracts'
2
4
 
3
5
  module RubyCqrs
4
6
  module Domain
5
7
  module Aggregate
8
+ include Contracts
9
+ include Contracts::Modules
10
+
6
11
  attr_reader :aggregate_id, :version
7
12
 
13
+ Contract None => Any
8
14
  def initialize
9
15
  @aggregate_id = Guid.create
10
16
  @version = 0
@@ -14,12 +20,13 @@ module RubyCqrs
14
20
  super
15
21
  end
16
22
 
23
+ Contract Pos => Bool
17
24
  def is_version_conflicted? client_side_version
18
25
  client_side_version != @source_version
19
26
  end
20
27
 
21
28
  private
22
-
29
+ Contract Or[Validation::AggregateState, Validation::AggregateStateWithSnapshot] => nil
23
30
  def load_from state
24
31
  sorted_events = state[:events].sort { |x, y| x.version <=> y.version }
25
32
  @aggregate_id = state[:aggregate_id]
@@ -28,8 +35,10 @@ module RubyCqrs
28
35
  apply(event)
29
36
  @source_version += 1
30
37
  end
38
+ nil
31
39
  end
32
40
 
41
+ Contract Or[Validation::AggregateState, Validation::AggregateStateWithSnapshot] => nil
33
42
  def try_apply_snapshot_in state
34
43
  if state.has_key? :snapshot and self.is_a? Snapshotable
35
44
  self.send :apply_snapshot, state[:snapshot][:state]
@@ -37,8 +46,10 @@ module RubyCqrs
37
46
  @source_version = state[:snapshot][:version]
38
47
  self.send(:reset_countdown, state[:events].size)
39
48
  end
49
+ nil
40
50
  end
41
51
 
52
+ Contract None => Or[nil, Validation::AggregateChanges, Validation::AggregateChangesWithSnapshot]
42
53
  def get_changes
43
54
  return nil unless @pending_events.size > 0
44
55
  changes = {
@@ -53,6 +64,7 @@ module RubyCqrs
53
64
  changes
54
65
  end
55
66
 
67
+ Contract Validation::AggregateChanges => nil
56
68
  def try_extract_snapshot_into changes
57
69
  snapshot_state = self.send :take_a_snapshot\
58
70
  if self.is_a? Snapshotable and self.send(:should_take_a_snapshot?)
@@ -63,39 +75,50 @@ module RubyCqrs
63
75
  :version => @version }
64
76
  self.send :set_snapshot_taken
65
77
  end
78
+ nil
66
79
  end
67
80
 
81
+ Contract None => nil
68
82
  def commit
69
83
  @pending_events = []
70
84
  @source_version = @version
71
85
  if self.is_a? Snapshotable and self.send :should_reset_snapshot_countdown?
72
86
  self.send(:reset_countdown, 0)
73
87
  end
88
+ nil
74
89
  end
75
90
 
91
+ Contract Validation::Event => nil
76
92
  def raise_event(event)
77
- raise NotADomainEventError unless event.is_a? Event
78
93
  apply(event)
79
94
  update_dispatch_detail_for(event)
80
95
  @pending_events << event
96
+ nil
81
97
  end
82
98
 
99
+ Contract Validation::Event => nil
83
100
  def update_dispatch_detail_for(event)
84
101
  event.instance_variable_set(:@aggregate_id, @aggregate_id)
85
102
  event.instance_variable_set(:@version, @version)
103
+ nil
86
104
  end
87
105
 
106
+ Contract Validation::Event => nil
88
107
  def apply(event)
89
108
  dispatch_handler_for(event)
90
109
  self.send(:snapshot_countdown) if self.is_a? Snapshotable
91
110
  @version += 1
111
+ nil
92
112
  end
93
113
 
114
+ Contract Validation::Event => nil
94
115
  def dispatch_handler_for(event)
95
116
  target = retrieve_handler_for(event.class)
96
117
  self.send(target, event)
118
+ nil
97
119
  end
98
120
 
121
+ Contract Validation::TypeOfEvent => Symbol
99
122
  def retrieve_handler_for(event_type)
100
123
  @event_handler_cache[event_type] ||= begin
101
124
  stripped_event_type_name = event_type.to_s.demodulize.underscore
@@ -1,19 +1,28 @@
1
1
  require 'active_support/inflector'
2
2
  require_relative '../guid'
3
+ require 'contracts'
4
+ require_relative '../contracts'
3
5
 
4
6
  module RubyCqrs
5
- class AggregateNotFoundError < Error; end
6
- class AggregateConcurrencyError < Error; end
7
- class AggregateDuplicationError < Error; end
7
+ class AggregateNotFoundError < StandardError; end
8
+ class AggregateConcurrencyError < StandardError; end
9
+ class AggregateDuplicationError < StandardError; end
8
10
 
9
11
  module Domain
10
12
  class AggregateRepository
13
+ include Contracts
14
+ include Contracts::Modules
11
15
  include RubyCqrs::Data::Decodable
12
16
 
13
- def find_by aggregate_id
14
- raise ArgumentError if aggregate_id.nil?
15
- raise ArgumentError unless Guid.validate? aggregate_id
17
+ Contract Validation::EventStore, Any => Any
18
+ def initialize event_store, command_context
19
+ raise ArgumentError unless event_store.is_a? Data::EventStore
20
+ @event_store = event_store
21
+ @command_context = command_context
22
+ end
16
23
 
24
+ Contract Validation::AggregateId => Validation::Aggregate
25
+ def find_by aggregate_id
17
26
  state = @event_store.load_by(aggregate_id, @command_context)
18
27
  raise AggregateNotFoundError if (state.nil? or state[:aggregate_type].nil? or\
19
28
  ((state[:events].nil? or state[:events].empty?) and state[:snapshot].nil?))
@@ -21,21 +30,19 @@ module RubyCqrs
21
30
  create_instance_from state
22
31
  end
23
32
 
24
- def save one_or_many_aggregate
25
- raise ArgumentError if one_or_many_aggregate.nil?
26
- return delegate_persistence_of [ one_or_many_aggregate ] if one_or_many_aggregate.is_a? Aggregate
27
-
28
- raise ArgumentError unless one_or_many_aggregate.is_a? Enumerable and one_or_many_aggregate.size > 0
29
- delegate_persistence_of one_or_many_aggregate
33
+ Contract Validation::Aggregate => nil
34
+ def save one_aggregate
35
+ delegate_persistence_of [ one_aggregate ]
30
36
  end
31
37
 
32
- private
33
- def initialize event_store, command_context
34
- raise ArgumentError unless event_store.is_a? Data::EventStore
35
- @event_store = event_store
36
- @command_context = command_context
38
+ Contract ArrayOf[Validation::Aggregate] => nil
39
+ def save many_aggregate
40
+ delegate_persistence_of many_aggregate
37
41
  end
38
42
 
43
+ private
44
+ Contract Or[Validation::SerializedAggregateState,\
45
+ Validation::SerializedAggregateStateWithSnapshot] => Validation::Aggregate
39
46
  def create_instance_from state
40
47
  try_decode_serialized_from state
41
48
  instance = state[:aggregate_type].constantize.new
@@ -43,6 +50,7 @@ module RubyCqrs
43
50
  instance
44
51
  end
45
52
 
53
+ Contract ArrayOf[Validation::Aggregate] => nil
46
54
  def delegate_persistence_of aggregates
47
55
  verify_uniqueness_of aggregates
48
56
 
@@ -57,11 +65,16 @@ module RubyCqrs
57
65
  nil
58
66
  end
59
67
 
68
+ Contract ArrayOf[Validation::Aggregate] => nil
60
69
  def verify_uniqueness_of aggregates
61
70
  uniq_array = aggregates.uniq { |aggregate| aggregate.aggregate_id }
62
71
  raise AggregateDuplicationError unless uniq_array.size == aggregates.size
72
+ nil
63
73
  end
64
74
 
75
+ Contract ArrayOf[Validation::Aggregate] =>\
76
+ Or[ ArrayOf[Validation::SerializedAggregateState],\
77
+ ArrayOf[Validation::SerializedAggregateStateWithSnapshot]]
65
78
  def prep_changes_for aggregates
66
79
  to_return = []
67
80
  aggregates.inject(to_return) do |product, aggregate|
@@ -74,12 +87,16 @@ module RubyCqrs
74
87
  to_return
75
88
  end
76
89
 
90
+ Contract Or[Validation::SerializedAggregateState,\
91
+ Validation::SerializedAggregateStateWithSnapshot] => nil
77
92
  def try_decode_serialized_from state
78
93
  state[:snapshot] = decode_snapshot_state_from state[:snapshot]\
79
94
  if state.has_key? :snapshot
80
95
 
81
96
  state[:events] = state[:events].map { |event_record| decode_event_from event_record }\
82
97
  if state[:events].size > 0
98
+
99
+ nil
83
100
  end
84
101
 
85
102
  def decode_snapshot_state_from snapshot_record
@@ -94,6 +111,8 @@ module RubyCqrs
94
111
  decoded_event
95
112
  end
96
113
 
114
+ Contract Or[Validation::AggregateChanges,\
115
+ Validation::AggregateChangesWithSnapshot] => nil
97
116
  def try_encode_serializable_in change
98
117
  if change.has_key? :snapshot
99
118
  encoded_snapshot = encode_data_from change[:snapshot][:state]
@@ -110,6 +129,8 @@ module RubyCqrs
110
129
  :version => event.version }
111
130
  }
112
131
  end
132
+
133
+ nil
113
134
  end
114
135
 
115
136
  def encode_data_from obj
@@ -1,9 +1,10 @@
1
1
  module RubyCqrs
2
- class NotADomainEventError < Error; end
2
+ class NotADomainEventError < StandardError; end
3
3
 
4
4
  module Domain
5
5
  module Event
6
6
  include RubyCqrs::Data::Encodable
7
+
7
8
  attr_reader :aggregate_id, :version
8
9
  end
9
10
  end
@@ -1,5 +1,5 @@
1
1
  module RubyCqrs
2
- class NotADomainSnapshotError < Error; end
2
+ class NotADomainSnapshotError < StandardError; end
3
3
 
4
4
  module Domain
5
5
  module Snapshot
@@ -1,3 +1,3 @@
1
1
  module RubyCqrs # :nodoc:
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.3'
3
3
  end
@@ -1,4 +1,4 @@
1
- require_relative('../spec_helper')
1
+ require_relative('../../../spec_helper')
2
2
 
3
3
  describe RubyCqrs::Data::InMemoryEventStore do
4
4
  let(:command_context) {}
@@ -1,4 +1,5 @@
1
- require_relative('../spec_helper')
1
+ require_relative('../../../spec_helper')
2
+
2
3
  describe 'decoder & encoder' do
3
4
  let(:unsupported_obj) { SomeDomain::FifthEvent.new }
4
5
  let(:unsupported_obj_type) { SomeDomain::FifthEvent.name }
@@ -1,4 +1,4 @@
1
- require_relative('../spec_helper')
1
+ require_relative('../../../spec_helper')
2
2
 
3
3
  describe RubyCqrs::Domain::AggregateRepository do
4
4
  let(:unsorted_event_records) { [
@@ -23,29 +23,7 @@ describe RubyCqrs::Domain::AggregateRepository do
23
23
  let(:repository) { RubyCqrs::Domain::AggregateRepository.new event_store, command_context }
24
24
  let(:aggregate_type) { SomeDomain::AggregateRoot }
25
25
 
26
- describe '#new' do
27
- context 'when expecting arguments' do
28
- it 'raises ArgumentError when the first argument is not an descendant from EventStore' do
29
- expect { RubyCqrs::Domain::AggregateRepository.new Object.new, command_context }.to raise_error ArgumentError
30
- end
31
-
32
- it 'is initialized with an EventStore instance and an CommandContext instance' do
33
- RubyCqrs::Domain::AggregateRepository.new event_store, command_context
34
- end
35
- end
36
- end
37
-
38
26
  describe '#find_by' do
39
- context 'when expecting arguments' do
40
- it 'raises ArgumentError when aggregate_id is nil' do
41
- expect { repository.find_by nil }.to raise_error ArgumentError
42
- end
43
-
44
- it 'raises ArgumentError when aggregate_id is not a valid guid' do
45
- expect { repository.find_by 'some_invalid_guid' }.to raise_error ArgumentError
46
- end
47
- end
48
-
49
27
  it "delegates the actual data loading to the EventStore instance's #load_by" do
50
28
  expect(event_store).to receive(:load_by) do |some_guid, some_command_context|
51
29
  expect(some_guid).to be_a_valid_uuid
@@ -94,20 +72,6 @@ describe RubyCqrs::Domain::AggregateRepository do
94
72
  end
95
73
 
96
74
  describe '#save' do
97
- context 'when expecting arguments' do
98
- it 'raises ArgumentError when given 0 or nil argument or an 0 length enumerable' do
99
- expect { repository.save }.to raise_error ArgumentError
100
- expect { repository.save nil }.to raise_error ArgumentError
101
- expect { repository.save [] }.to raise_error ArgumentError
102
- end
103
- it 'raises ArgumentError when the first argument is not an descendant from AggregateBase' do
104
- expect { repository.save Object.new }.to raise_error ArgumentError
105
- end
106
- it 'raises ArgumentError when the first argument is not an enumerable of AggregateBase' do
107
- expect { repository.save [ Object.new ] }.to raise_error ArgumentError
108
- end
109
- end
110
-
111
75
  describe 'during the saving process' do
112
76
  context 'when saving a single aggregate' do
113
77
  context 'when the aggregate has not been changed' do
@@ -1,9 +1,14 @@
1
- require_relative('../spec_helper')
1
+ require_relative('../../../spec_helper')
2
2
 
3
3
  describe RubyCqrs::Domain::Aggregate do
4
4
  let(:aggregate_id) { SomeDomain::AGGREGATE_ID }
5
5
  let(:aggregate) { SomeDomain::AggregateRoot.new }
6
+ let(:aggregate_type) { SomeDomain::AggregateRoot.name }
6
7
  let(:unsorted_events) { [ SomeDomain::SecondEvent.new, SomeDomain::FirstEvent.new ] }
8
+ let(:state) {{
9
+ :aggregate_id => aggregate_id,
10
+ :aggregate_type => aggregate_type,
11
+ :events => unsorted_events }}
7
12
 
8
13
  describe '#new' do
9
14
  it 'has aggregate_id initilized as a valid uuid' do
@@ -20,10 +25,6 @@ describe RubyCqrs::Domain::Aggregate do
20
25
  end
21
26
 
22
27
  describe '#raise_event' do
23
- it 'raise NotADomainEventError when raising an object that is not a proper event' do
24
- expect { aggregate.fire_weird_stuff }.to raise_error(RubyCqrs::NotADomainEventError)
25
- end
26
-
27
28
  context 'after raising an event' do
28
29
  it 'has version increased by 1' do
29
30
  original_version = aggregate.version
@@ -47,7 +48,6 @@ describe RubyCqrs::Domain::Aggregate do
47
48
  end
48
49
 
49
50
  describe '#is_version_conflicted?' do
50
- let(:state) { { :aggregate_id => aggregate_id, :events => unsorted_events } }
51
51
  let(:loaded_aggregate) { aggregate.send(:load_from, state); aggregate; }
52
52
 
53
53
  it 'returns true when supplied client side version does not match the server side persisted source_version' do
@@ -86,7 +86,6 @@ describe RubyCqrs::Domain::Aggregate do
86
86
  end
87
87
 
88
88
  describe '#load_from' do
89
- let(:state) { { :aggregate_id => aggregate_id, :events => unsorted_events } }
90
89
  let(:loaded_aggregate) { aggregate.send(:load_from, state); aggregate; }
91
90
 
92
91
  context 'when loading events' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_cqrs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raven Chen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-16 00:00:00.000000000 Z
11
+ date: 2015-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uuidtools
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: contracts
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.9.0
55
69
  description: a ruby implementation of cqrs, using event sourcing
56
70
  email:
57
71
  - ravenchen.cn@gmail.com
@@ -63,6 +77,7 @@ files:
63
77
  - License.txt
64
78
  - README.md
65
79
  - lib/ruby_cqrs.rb
80
+ - lib/ruby_cqrs/contracts.rb
66
81
  - lib/ruby_cqrs/data/event_store.rb
67
82
  - lib/ruby_cqrs/data/in_memory_event_store.rb
68
83
  - lib/ruby_cqrs/data/serialization.rb
@@ -71,18 +86,17 @@ files:
71
86
  - lib/ruby_cqrs/domain/event.rb
72
87
  - lib/ruby_cqrs/domain/snapshot.rb
73
88
  - lib/ruby_cqrs/domain/snapshotable.rb
74
- - lib/ruby_cqrs/error.rb
75
89
  - lib/ruby_cqrs/guid.rb
76
90
  - lib/ruby_cqrs/version.rb
77
91
  - spec/feature/basic_usage_spec.rb
78
92
  - spec/feature/snapshot_spec.rb
79
93
  - spec/fixture/typical_domain.rb
94
+ - spec/lib/ruby_cqrs/data/in_memory_event_store_spec.rb
95
+ - spec/lib/ruby_cqrs/data/serialization_spec.rb
96
+ - spec/lib/ruby_cqrs/domain/aggregate_repository_spec.rb
97
+ - spec/lib/ruby_cqrs/domain/aggregate_spec.rb
80
98
  - spec/spec_helper.rb
81
99
  - spec/support/matchers.rb
82
- - spec/unit/aggregate_repository_spec.rb
83
- - spec/unit/aggregate_spec.rb
84
- - spec/unit/in_memory_event_store_spec.rb
85
- - spec/unit/serialization_spec.rb
86
100
  homepage: https://github.com/iravench/ruby_cqrs
87
101
  licenses:
88
102
  - MIT
@@ -107,14 +121,14 @@ rubyforge_project:
107
121
  rubygems_version: 2.4.6
108
122
  signing_key:
109
123
  specification_version: 4
110
- summary: ruby_cqrs-0.2.2
124
+ summary: ruby_cqrs-0.2.3
111
125
  test_files:
112
126
  - spec/feature/basic_usage_spec.rb
113
127
  - spec/feature/snapshot_spec.rb
114
128
  - spec/fixture/typical_domain.rb
129
+ - spec/lib/ruby_cqrs/data/in_memory_event_store_spec.rb
130
+ - spec/lib/ruby_cqrs/data/serialization_spec.rb
131
+ - spec/lib/ruby_cqrs/domain/aggregate_repository_spec.rb
132
+ - spec/lib/ruby_cqrs/domain/aggregate_spec.rb
115
133
  - spec/spec_helper.rb
116
134
  - spec/support/matchers.rb
117
- - spec/unit/aggregate_repository_spec.rb
118
- - spec/unit/aggregate_spec.rb
119
- - spec/unit/in_memory_event_store_spec.rb
120
- - spec/unit/serialization_spec.rb
@@ -1,3 +0,0 @@
1
- module RubyCqrs
2
- class Error < RuntimeError; end
3
- end