entity_store 0.2.11 → 0.2.12

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: 6fa9f736b58b12c0a108d21e6a2f08b139fb60f7
4
- data.tar.gz: 876fbbbda6f47c416804965b128db466cc2915a3
3
+ metadata.gz: 7ecf24a7dbe5745394292dbb963c8dd054a77d09
4
+ data.tar.gz: eb2b14b2957be872c24f13e411199e41e091c923
5
5
  SHA512:
6
- metadata.gz: 2be1595b0f5e3a859f8db0107df32c07488dc7e68d9c546be33feba4b04657a97b6ca79c58e659dd867a9042ef3b96c458b69550dbc01d2e27e928bbec575ba1
7
- data.tar.gz: 990bac3d8f6245c0f9b895721eb577baae369a20a94ad7b80c3f35352ed289d7c4bf64adac03e695aea133ef599d6191e3ac26047e45e5a32a7af547cd596a63
6
+ metadata.gz: 0ce11530e134d7a4f772cff1686033b8a09641758e591880206b73efcc0c286a9e16cf55e4883ed64ee35d40f074010e0510f33a05549ca9c51bea5ab4fb26be
7
+ data.tar.gz: 488ea3118af760e517789201ba4510237460e7e999eba7b423c6e399a02ba1cf40ea98edf2544067d0c30376dbf14ce5b8040531b8c4c3a6f9f4e59061d92c11
@@ -7,6 +7,20 @@ module EntityStore
7
7
  include HashSerialization
8
8
  include Attributes
9
9
  extend ClassMethods
10
+
11
+ version_incremented_event_class = "#{self.name}VersionIncremented".split('::').inject(Object) {|obj, name|
12
+ obj.const_defined?(name) ? obj.const_get(name) : obj.const_set(name, Class.new)
13
+ }
14
+
15
+ version_incremented_event_class.class_eval %Q"
16
+ include ::EntityStore::Event
17
+
18
+ attr_accessor :version
19
+
20
+ def apply(entity)
21
+ # nothing to do as signal event
22
+ end
23
+ "
10
24
  end
11
25
  end
12
26
 
@@ -30,7 +44,6 @@ module EntityStore
30
44
  names.collect{ |name| instance_variable_get("@_#{name}") }.select{|entity| !entity.nil? }
31
45
  }
32
46
  end
33
-
34
47
  end
35
48
 
36
49
  def type
@@ -45,6 +58,11 @@ module EntityStore
45
58
  @_version = value
46
59
  end
47
60
 
61
+ def generate_version_incremented_event
62
+ event_class= "#{self.class.name}VersionIncremented".split('::').inject(Object) {|obj, name| obj.const_get(name) }
63
+ event_class.new(:entity_id => id, :version => version)
64
+ end
65
+
48
66
  # Holds a reference to the store used to load this entity so the same store
49
67
  # can be used for related entities
50
68
  def related_entity_loader=(value)
@@ -9,6 +9,10 @@ module EntityStore
9
9
  def add(entity)
10
10
  entity.id = storage_client.add_entity(entity)
11
11
  add_events(entity)
12
+
13
+ # publish version increment signal event to the bus
14
+ event_bus.publish(entity.type, entity.generate_version_incremented_event)
15
+
12
16
  entity
13
17
  rescue => e
14
18
  logger.error { "Store#add error: #{e.inspect} - #{entity.inspect}" }
@@ -32,6 +36,9 @@ module EntityStore
32
36
  end
33
37
  add_events(entity)
34
38
  snapshot_entity(entity) if entity.version % Config.snapshot_threshold == 0
39
+
40
+ # publish version increment signal event to the bus
41
+ event_bus.publish(entity.type, entity.generate_version_incremented_event)
35
42
  end
36
43
  entity
37
44
  rescue => e
@@ -1,3 +1,3 @@
1
1
  module EntityStore
2
- VERSION = "0.2.11".freeze
2
+ VERSION = "0.2.12".freeze
3
3
  end
data/lib/entity_store.rb CHANGED
@@ -3,15 +3,15 @@ module EntityStore
3
3
  require_relative 'entity_store/logging'
4
4
  require_relative 'entity_store/config'
5
5
  require_relative 'entity_store/time_factory'
6
+ require_relative 'entity_store/event'
7
+ require_relative 'entity_store/attributes'
8
+ require_relative 'entity_store/hash_serialization'
6
9
  require_relative 'entity_store/entity'
7
10
  require_relative 'entity_store/entity_value'
8
- require_relative 'entity_store/event'
9
11
  require_relative 'entity_store/store'
10
12
  require_relative 'entity_store/event_data_object'
11
13
  require_relative 'entity_store/event_bus'
12
14
  require_relative 'entity_store/not_found'
13
- require_relative 'entity_store/hash_serialization'
14
- require_relative 'entity_store/attributes'
15
15
 
16
16
  if defined?(Mongo)
17
17
  require_relative 'entity_store/mongo_entity_store'
@@ -22,7 +22,7 @@ module EntityStore
22
22
  def setup
23
23
  yield EntityStore::Config.setup
24
24
  end
25
-
25
+
26
26
  def event_subscribers
27
27
  EntityStore::Config.event_subscribers
28
28
  end
@@ -86,7 +86,7 @@ describe Store do
86
86
  @entity.stub(:loaded_related_entities) { [ @related_entity ] }
87
87
  @store.stub(:do_save)
88
88
  end
89
-
89
+
90
90
  subject { @store.save(@entity) }
91
91
 
92
92
  it "should save the entity" do
@@ -132,6 +132,10 @@ describe Store do
132
132
  @store.should_not_receive(:snapshot_entity)
133
133
  subject
134
134
  end
135
+ it "should publish a version incremented event" do
136
+ @store.event_bus.should_receive(:publish).with(@entity.type, an_instance_of(DummyEntityForStoreVersionIncremented))
137
+ subject
138
+ end
135
139
 
136
140
  context "when no pending events" do
137
141
  before(:each) do
@@ -178,7 +182,7 @@ describe Store do
178
182
  @entity = DummyEntityForStore.new(id: random_string, version: random_integer)
179
183
  DummyEntityForStore.stub(:new).and_return(@entity)
180
184
  @events = [
181
- double("Event", apply: true, entity_version: @entity.version + 1),
185
+ double("Event", apply: true, entity_version: @entity.version + 1),
182
186
  double("Event", apply: true, entity_version: @entity.version + 2)
183
187
  ]
184
188
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entity_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.11
4
+ version: 0.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Bird
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-03 00:00:00.000000000 Z
11
+ date: 2014-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongo
@@ -58,6 +58,7 @@ executables: []
58
58
  extensions: []
59
59
  extra_rdoc_files: []
60
60
  files:
61
+ - lib/entity_store.rb
61
62
  - lib/entity_store/attributes.rb
62
63
  - lib/entity_store/config.rb
63
64
  - lib/entity_store/entity.rb
@@ -73,7 +74,6 @@ files:
73
74
  - lib/entity_store/store.rb
74
75
  - lib/entity_store/time_factory.rb
75
76
  - lib/entity_store/version.rb
76
- - lib/entity_store.rb
77
77
  - lib/tasks/entity_store.rake
78
78
  - spec/entity_store/config_spec.rb
79
79
  - spec/entity_store/entity_spec.rb
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  version: '0'
106
106
  requirements: []
107
107
  rubyforge_project:
108
- rubygems_version: 2.1.11
108
+ rubygems_version: 2.2.1
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: Event sourced entity store with a replaceable body