entity_store 0.0.8 → 0.0.9
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.
data/lib/entity_store.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module EntityStore
|
2
2
|
require 'logger'
|
3
|
+
require 'entity_store/cache'
|
3
4
|
require 'entity_store/entity'
|
4
5
|
require 'entity_store/entity_value'
|
5
6
|
require 'entity_store/event'
|
@@ -17,6 +18,9 @@ module EntityStore
|
|
17
18
|
yield self
|
18
19
|
end
|
19
20
|
|
21
|
+
# Public: cache to be used
|
22
|
+
attr_accessor :cache
|
23
|
+
|
20
24
|
def connection_profile
|
21
25
|
@_connection_profile
|
22
26
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Private: wrapper for the assigned cache
|
2
|
+
#
|
3
|
+
module EntityStore
|
4
|
+
module Cache
|
5
|
+
|
6
|
+
def cache_enabled?
|
7
|
+
EntityStore.cache
|
8
|
+
end
|
9
|
+
|
10
|
+
def cache_fetch(id, version)
|
11
|
+
cache_enabled? ? EntityStore.cache.fetch("_entity_store_#{id}_#{version}") { yield } : yield
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -4,6 +4,7 @@ require 'uri'
|
|
4
4
|
module EntityStore
|
5
5
|
class MongoEntityStore
|
6
6
|
include Mongo
|
7
|
+
include Cache
|
7
8
|
|
8
9
|
def open_connection
|
9
10
|
@db ||= open_store
|
@@ -73,14 +74,16 @@ module EntityStore
|
|
73
74
|
if attrs = entities.find_one('_id' => BSON::ObjectId.from_string(id))
|
74
75
|
entity = get_type_constant(attrs['_type']).new(attrs['snapshot'] || {'id' => id, 'version' => attrs['version']})
|
75
76
|
|
76
|
-
|
77
|
+
cache_fetch(id, entity.version) {
|
78
|
+
since_version = attrs['snapshot'] ? attrs['snapshot']['version'] : nil
|
77
79
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
80
|
+
get_events(id, since_version).each do |e|
|
81
|
+
e.apply(entity)
|
82
|
+
entity.version = e.entity_version
|
83
|
+
end
|
82
84
|
|
83
|
-
|
85
|
+
entity
|
86
|
+
}
|
84
87
|
else
|
85
88
|
raise NotFound.new(id) if raise_exception
|
86
89
|
nil
|
data/lib/entity_store/version.rb
CHANGED
@@ -29,7 +29,7 @@ describe MongoEntityStore do
|
|
29
29
|
'_type' => "MongoEntityStoreSpec::DummyEntity",
|
30
30
|
'version' => @version = random_integer
|
31
31
|
}
|
32
|
-
@entity = MongoEntityStoreSpec::DummyEntity.new
|
32
|
+
@entity = MongoEntityStoreSpec::DummyEntity.new(:id => @id, :version => @version)
|
33
33
|
MongoEntityStoreSpec::DummyEntity.stub(:new) { @entity }
|
34
34
|
@entities_collection = mock('MongoCollection', :find_one => @attrs)
|
35
35
|
@store.stub(:entities) { @entities_collection }
|
@@ -61,6 +61,13 @@ describe MongoEntityStore do
|
|
61
61
|
subject
|
62
62
|
@entity.version.should eq(@events.last.entity_version)
|
63
63
|
end
|
64
|
+
it "should attempt to retrieve from the cache" do
|
65
|
+
@store.should_receive(:cache_fetch).with(@id, @version) { @entity }
|
66
|
+
subject
|
67
|
+
end
|
68
|
+
it "should return the entity" do
|
69
|
+
subject.should eq(@entity)
|
70
|
+
end
|
64
71
|
context "when a snapshot exists" do
|
65
72
|
before(:each) do
|
66
73
|
@attrs['snapshot'] = {
|
@@ -77,6 +84,15 @@ describe MongoEntityStore do
|
|
77
84
|
subject
|
78
85
|
end
|
79
86
|
end
|
87
|
+
context "when item exists in cache" do
|
88
|
+
before(:each) do
|
89
|
+
@another_entity = MongoEntityStoreSpec::DummyEntity.new
|
90
|
+
@store.stub(:cache_fetch) { @another_entity }
|
91
|
+
end
|
92
|
+
it "should reutrn the other entity" do
|
93
|
+
subject.should eq(@another_entity)
|
94
|
+
end
|
95
|
+
end
|
80
96
|
end
|
81
97
|
|
82
98
|
describe "#get_entity!" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: entity_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -50,6 +50,7 @@ extensions: []
|
|
50
50
|
extra_rdoc_files: []
|
51
51
|
files:
|
52
52
|
- lib/entity_store/attributes.rb
|
53
|
+
- lib/entity_store/cache.rb
|
53
54
|
- lib/entity_store/config.rb
|
54
55
|
- lib/entity_store/entity.rb
|
55
56
|
- lib/entity_store/entity_value.rb
|