entity_store 0.2.9 → 0.2.10

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: d20e8cbde446a0c8079689f003aae7b5cb06a113
4
- data.tar.gz: 7059c4b37172bb89699c5f9566fad552e31f345e
3
+ metadata.gz: cdb8325e6aed8b76acc0e56d83f65fe429e17057
4
+ data.tar.gz: 90843b39a5d258eaeaa1c51fe809d3cf3bdb690b
5
5
  SHA512:
6
- metadata.gz: dafa949cc2b77783ce442d14a2f2c28f96d19476c66ba15407e7208cfe469317c2e4b3bb8e9dcbf1fec86ac7cd5d602dcfaa143a453c0bff9c42d10f7ecbeabc
7
- data.tar.gz: 9bb78b4637fac541c3ebf0a7b0b7d7d5ef265e285936e1b0b8eaa6f8ab6d478cd83cdb9ac30f710552c03209920ee1a720e248f8c11169dfbb5e67909966552f
6
+ metadata.gz: 1468965394051e814cfb094c469983d8eed1ee2dc7b3f2e73936562c4ec79a4206240f468eb6b94e31a15dc5b03d26582392504b8cb3e604d93818013c341eb6
7
+ data.tar.gz: c237b942a079ff336d07d5e77834e58561354cd6511e156c4fc359e24a6c0dc06dabcaa8ea77c52949cadab30a0ad05b81eab820ae91f58a0fd638fa1e9674e2
@@ -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
@@ -14,5 +14,9 @@ module EntityStore
14
14
  return true
15
15
  end
16
16
 
17
+ def inspect
18
+ "<#{self.class.name} #{self.attributes.inspect}>"
19
+ end
20
+
17
21
  end
18
22
  end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module EntityStore
2
- VERSION = "0.2.9".freeze
2
+ VERSION = "0.2.10".freeze
3
3
  end
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.9
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: 2013-11-13 00:00:00.000000000 Z
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.10
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: