entity_store 0.2.9 → 0.2.10
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 +9 -6
- data/lib/entity_store/entity_value.rb +4 -0
- data/lib/entity_store/store.rb +51 -2
- data/lib/entity_store/version.rb +1 -1
- metadata +11 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdb8325e6aed8b76acc0e56d83f65fe429e17057
|
4
|
+
data.tar.gz: 90843b39a5d258eaeaa1c51fe809d3cf3bdb690b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1468965394051e814cfb094c469983d8eed1ee2dc7b3f2e73936562c4ec79a4206240f468eb6b94e31a15dc5b03d26582392504b8cb3e604d93818013c341eb6
|
7
|
+
data.tar.gz: c237b942a079ff336d07d5e77834e58561354cd6511e156c4fc359e24a6c0dc06dabcaa8ea77c52949cadab30a0ad05b81eab820ae91f58a0fd638fa1e9674e2
|
data/lib/entity_store/entity.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module EntityStore
|
2
2
|
module Entity
|
3
3
|
attr_accessor :id
|
4
|
-
|
4
|
+
|
5
5
|
def self.included(klass)
|
6
6
|
klass.class_eval do
|
7
7
|
include HashSerialization
|
@@ -36,7 +36,7 @@ module EntityStore
|
|
36
36
|
def type
|
37
37
|
self.class.name
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def version
|
41
41
|
@_version ||= 1
|
42
42
|
end
|
@@ -50,23 +50,26 @@ module EntityStore
|
|
50
50
|
def related_entity_loader=(value)
|
51
51
|
@_related_entity_loader = value
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
def pending_events
|
55
55
|
@pending_events ||= []
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
def clear_pending_events
|
59
|
-
@pending_events = []
|
59
|
+
@pending_events = []
|
60
60
|
end
|
61
61
|
|
62
62
|
def record_event(event)
|
63
63
|
apply_event(event)
|
64
64
|
pending_events<<event
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
def apply_event(event)
|
68
68
|
event.apply(self)
|
69
69
|
end
|
70
70
|
|
71
|
+
def inspect
|
72
|
+
"<#{self.class.name} #{self.attributes.inspect}>"
|
73
|
+
end
|
71
74
|
end
|
72
75
|
end
|
data/lib/entity_store/store.rb
CHANGED
@@ -70,9 +70,9 @@ module EntityStore
|
|
70
70
|
log_debug { "Store#get #{id}"}
|
71
71
|
if entity = storage_client.get_entity(id, raise_exception)
|
72
72
|
|
73
|
-
storage_client.get_events(id, entity.version).each do |event|
|
73
|
+
storage_client.get_events(id, entity.version).each do |event|
|
74
74
|
begin
|
75
|
-
event.apply(entity)
|
75
|
+
event.apply(entity)
|
76
76
|
log_debug { "Applied #{event.inspect} to #{id}" }
|
77
77
|
rescue => e
|
78
78
|
log_error "Failed to apply #{event.class.name} #{event.attributes} to #{id} with #{e.inspect}", e
|
@@ -97,5 +97,54 @@ module EntityStore
|
|
97
97
|
def event_bus
|
98
98
|
@_event_bus ||= EventBus.new
|
99
99
|
end
|
100
|
+
|
101
|
+
# Public : returns an array representing a full audit trail for the entity.
|
102
|
+
# After each event is applied the state of the entity is rendered.
|
103
|
+
# Optionally accepts a block which should return true or false to indicate
|
104
|
+
# whether to render the line. The block yields entity, event, lines collection
|
105
|
+
def get_audit(id, output=nil)
|
106
|
+
lines = []
|
107
|
+
|
108
|
+
if entity = storage_client.get_entity(id, true)
|
109
|
+
|
110
|
+
lines << "---"
|
111
|
+
lines << entity.inspect
|
112
|
+
lines << "---"
|
113
|
+
|
114
|
+
storage_client.get_events(id, entity.version).each do |event|
|
115
|
+
|
116
|
+
begin
|
117
|
+
event.apply(entity)
|
118
|
+
entity.version = event.entity_version
|
119
|
+
|
120
|
+
render = true
|
121
|
+
|
122
|
+
if block_given?
|
123
|
+
render = yield(entity, event, lines)
|
124
|
+
end
|
125
|
+
|
126
|
+
if render
|
127
|
+
lines << event.inspect
|
128
|
+
lines << entity.inspect
|
129
|
+
|
130
|
+
lines << "---"
|
131
|
+
end
|
132
|
+
|
133
|
+
rescue => e
|
134
|
+
lines << "ERROR #{e.class.name} #{e.message}"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
else
|
139
|
+
lines << "No entity for #{id}"
|
140
|
+
end
|
141
|
+
|
142
|
+
if output
|
143
|
+
output.write lines.join("\n")
|
144
|
+
else
|
145
|
+
lines
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
100
149
|
end
|
101
150
|
end
|
data/lib/entity_store/version.rb
CHANGED
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
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.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Bird
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongo
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.8'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.8'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bson_ext
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.8'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.8'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: hatchet
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.2'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.2'
|
55
55
|
description: Event sourced entity store with a replaceable body
|
@@ -95,17 +95,17 @@ require_paths:
|
|
95
95
|
- lib
|
96
96
|
required_ruby_version: !ruby/object:Gem::Requirement
|
97
97
|
requirements:
|
98
|
-
- -
|
98
|
+
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
100
|
version: '0'
|
101
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- -
|
103
|
+
- - ">="
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '0'
|
106
106
|
requirements: []
|
107
107
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.1.
|
108
|
+
rubygems_version: 2.1.11
|
109
109
|
signing_key:
|
110
110
|
specification_version: 4
|
111
111
|
summary: Event sourced entity store with a replaceable body
|
@@ -120,4 +120,3 @@ test_files:
|
|
120
120
|
- spec/entity_store/store_spec.rb
|
121
121
|
- spec/entity_store_spec.rb
|
122
122
|
- spec/spec_helper.rb
|
123
|
-
has_rdoc:
|