entity_store 0.2.11 → 0.2.12

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: 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