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 +4 -4
- data/lib/entity_store/entity.rb +19 -1
- data/lib/entity_store/store.rb +7 -0
- data/lib/entity_store/version.rb +1 -1
- data/lib/entity_store.rb +4 -4
- data/spec/entity_store/store_spec.rb +6 -2
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7ecf24a7dbe5745394292dbb963c8dd054a77d09
|
|
4
|
+
data.tar.gz: eb2b14b2957be872c24f13e411199e41e091c923
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0ce11530e134d7a4f772cff1686033b8a09641758e591880206b73efcc0c286a9e16cf55e4883ed64ee35d40f074010e0510f33a05549ca9c51bea5ab4fb26be
|
|
7
|
+
data.tar.gz: 488ea3118af760e517789201ba4510237460e7e999eba7b423c6e399a02ba1cf40ea98edf2544067d0c30376dbf14ce5b8040531b8c4c3a6f9f4e59061d92c11
|
data/lib/entity_store/entity.rb
CHANGED
|
@@ -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)
|
data/lib/entity_store/store.rb
CHANGED
|
@@ -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
|
data/lib/entity_store/version.rb
CHANGED
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.
|
|
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-
|
|
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
|
|
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
|