mongoid_cached_document 0.1.1 → 0.1.2
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/README.rdoc +4 -4
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/mongoid/cached_document.rb +9 -4
- data/mongoid_cached_document.gemspec +2 -2
- data/spec/unit/mongoid/cached_document_spec.rb +26 -0
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -25,26 +25,26 @@ Assuming <tt>@user</tt> is a valid <tt>User</tt> with an <tt>id</tt> of 42 and <
|
|
25
25
|
|
26
26
|
This will create a new <tt>Post</tt> document, with an <tt>author</tt> field, the content of which is a hash:
|
27
27
|
|
28
|
-
{ '_type' => 'User', '_id' =
|
28
|
+
{ '_type' => 'User', '_id' = 42 }
|
29
29
|
|
30
30
|
@post.author._type
|
31
31
|
=> 'User'
|
32
32
|
@post.author._id
|
33
|
-
=>
|
33
|
+
=> 42
|
34
34
|
|
35
35
|
Attempting to get the user's <tt>login</tt> will cause the real user document to be fetched from the collection, which replaces the cached values.
|
36
36
|
|
37
37
|
class User
|
38
38
|
#...
|
39
39
|
|
40
|
-
def
|
40
|
+
def cachable_attributes
|
41
41
|
[ :login ]
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
With the above class definition, the cached attributes will be:
|
46
46
|
|
47
|
-
{ '_type' => 'User', '_id' =
|
47
|
+
{ '_type' => 'User', '_id' = 42, 'login' => 'jsmith' }
|
48
48
|
|
49
49
|
To use the above in a criteria:
|
50
50
|
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
@@ -35,7 +35,9 @@ module Mongoid
|
|
35
35
|
|
36
36
|
class << self
|
37
37
|
def set(value)
|
38
|
-
if value.
|
38
|
+
if value.nil?
|
39
|
+
nil
|
40
|
+
elsif value.respond_to? :cachable_attributes
|
39
41
|
value.cachable_attributes.merge({ '_type' => value.class.to_s, '_id' => value.id })
|
40
42
|
else
|
41
43
|
{ '_type' => value.class.to_s, '_id' => value.id }
|
@@ -57,20 +59,23 @@ module Mongoid
|
|
57
59
|
def method_missing(name, *args, &block)
|
58
60
|
if @document
|
59
61
|
_document.send name, *args, &block
|
60
|
-
elsif @cached_attributes.has_key? name.to_s
|
62
|
+
elsif @cached_attributes && @cached_attributes.has_key? name.to_s
|
61
63
|
@cached_attributes[name.to_s]
|
62
|
-
|
64
|
+
elsif _document
|
63
65
|
if defined? Rails
|
64
66
|
Rails.logger.debug("#{@cached_attributes['_type']}[:#{name}] is not cached (called from #{caller(1).first})")
|
65
67
|
end
|
66
68
|
|
67
69
|
_document.send name, *args, &block
|
70
|
+
else
|
71
|
+
super
|
68
72
|
end
|
69
73
|
end
|
70
74
|
|
71
75
|
private
|
72
76
|
def _document
|
73
|
-
@document ||= @cached_attributes['_type'].constantize.find(@cached_attributes['_id'])
|
77
|
+
@document ||= @cached_attributes && @cached_attributes['_type'].constantize.find(@cached_attributes['_id'])
|
78
|
+
end
|
74
79
|
end
|
75
80
|
end
|
76
81
|
end
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid_cached_document}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Matthew Gibbons"]
|
12
|
-
s.date = %q{2010-04-
|
12
|
+
s.date = %q{2010-04-08}
|
13
13
|
s.description = %q{Adds support for caching Mongoid documents as a field within other Mongoid documents, with complete control over which fields to cache.}
|
14
14
|
s.email = %q{mhgibbons@me.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -54,4 +54,30 @@ describe Mongoid::CachedDocument do
|
|
54
54
|
@cached_document.title == 'Title'
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
describe "tesing for equality" do
|
59
|
+
before :each do
|
60
|
+
@cachable_document = mock(CachableDocument)
|
61
|
+
|
62
|
+
@cachable_document.stub(:id).and_return 42
|
63
|
+
@cachable_document.stub(:class).and_return CachableDocument
|
64
|
+
|
65
|
+
@cached_document = Mongoid::CachedDocument.get('_type' => 'CachableDocument', '_id' => 42)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "#== delegates to the document" do
|
69
|
+
CachableDocument.should_receive(:find).with(42).and_return(@cachable_document)
|
70
|
+
@cached_document == @cachable_document
|
71
|
+
end
|
72
|
+
|
73
|
+
it "#eql? delegates to the document" do
|
74
|
+
CachableDocument.should_receive(:find).with(42).and_return(@cachable_document)
|
75
|
+
@cached_document.eql? @cachable_document
|
76
|
+
end
|
77
|
+
|
78
|
+
it "#equal? delegates to the document" do
|
79
|
+
CachableDocument.should_receive(:find).with(42).and_return(@cachable_document)
|
80
|
+
@cached_document.equal? @cachable_document
|
81
|
+
end
|
82
|
+
end
|
57
83
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Matthew Gibbons
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-08 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|