mongoid_identity_map 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
data/README.md
CHANGED
@@ -9,20 +9,24 @@ Mongoid Identity Map is a simple and transparent Identity Map implementation for
|
|
9
9
|
|
10
10
|
[Identity Map pattern](http://martinfowler.com/eaaCatalog/identityMap.html)
|
11
11
|
|
12
|
-
##
|
12
|
+
## Installing
|
13
13
|
|
14
14
|
In Gemfile:
|
15
15
|
|
16
16
|
gem "mongoid_identity_map"
|
17
17
|
|
18
|
-
##
|
18
|
+
## Using
|
19
19
|
|
20
|
-
|
20
|
+
Identity map is applied automatically to all queries that return a single model.
|
21
21
|
|
22
|
-
|
22
|
+
## Clearing the identity map
|
23
23
|
|
24
|
-
|
24
|
+
A rack middleware - `MongoidIdentityMap::ClearMiddleware` - is provided for clearing the identity map after each request. In a Rails app, this middleware is automatically added to the list of middlewares.
|
25
|
+
|
26
|
+
You can also clear the identity map by calling `MongoidIdentityMap::IdentityMap.clear`.
|
27
|
+
|
28
|
+
## Current limitations
|
25
29
|
|
26
30
|
Currently, it's an all or nothing deal. It is not possible to turn the identiy map on or off on a class (Mongoid::Document) basis.
|
27
31
|
|
28
|
-
Identity map is applied only on
|
32
|
+
Identity map is applied only on queries that return a single model. Queries that return a cursor are not affected.
|
@@ -8,15 +8,28 @@ module MongoidIdentityMap
|
|
8
8
|
included do
|
9
9
|
alias_method_chain :one, :identity_map
|
10
10
|
alias_method_chain :first, :identity_map
|
11
|
+
alias_method_chain :last, :identity_map
|
11
12
|
end
|
12
13
|
|
13
14
|
def one_with_identity_map
|
15
|
+
fetch(:one_without_identity_map)
|
16
|
+
end
|
17
|
+
|
18
|
+
def first_with_identity_map
|
19
|
+
fetch(:first_without_identity_map)
|
20
|
+
end
|
21
|
+
|
22
|
+
def last_with_identity_map
|
23
|
+
fetch(:last_without_identity_map)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def fetch(method)
|
14
29
|
IdentityMap.fetch(selector.merge(:_klass => klass)) do
|
15
|
-
|
30
|
+
send(method)
|
16
31
|
end
|
17
32
|
end
|
18
|
-
alias :first_with_identity_map :one_with_identity_map
|
19
|
-
|
20
33
|
end
|
21
34
|
end
|
22
35
|
end
|
@@ -12,34 +12,40 @@ describe MongoidIdentityMap::Contexts::IdentityMappable do
|
|
12
12
|
let(:selector) do
|
13
13
|
{:selector => :value}
|
14
14
|
end
|
15
|
-
|
16
|
-
|
15
|
+
|
16
|
+
shared_examples_for "methods that return a single model" do
|
17
17
|
before do
|
18
|
-
Model.collection.stub!(:find_one).with(selector,
|
18
|
+
Model.collection.stub!(:find_one).with(selector, options).and_return(model_attributes)
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should fetch model from identity map under key comprised of find selector merged with model class" do
|
22
22
|
MongoidIdentityMap::IdentityMap.should_receive(:fetch).with(selector.merge(:_klass => Model))
|
23
|
-
|
23
|
+
find
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should return model" do
|
27
|
-
|
27
|
+
find.should == model
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
describe "#
|
32
|
-
|
33
|
-
|
31
|
+
describe "#one" do
|
32
|
+
it_should_behave_like "methods that return a single model" do
|
33
|
+
let(:find) {Model.where(selector).one}
|
34
|
+
let(:options) {{}}
|
34
35
|
end
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#first" do
|
39
|
+
it_should_behave_like "methods that return a single model" do
|
40
|
+
let(:find) {Model.where(selector).first}
|
41
|
+
let(:options) {{}}
|
39
42
|
end
|
43
|
+
end
|
40
44
|
|
41
|
-
|
42
|
-
|
45
|
+
describe "#last" do
|
46
|
+
it_should_behave_like "methods that return a single model" do
|
47
|
+
let(:find) {Model.where(selector).last}
|
48
|
+
let(:options) {{:sort=>[[:_id, :desc]]}}
|
43
49
|
end
|
44
50
|
end
|
45
51
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 1
|
9
|
+
version: 0.3.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Guilherme Cirne
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-05-
|
17
|
+
date: 2011-05-10 00:00:00 -03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|