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