cache_method 0.2.1 → 0.2.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/CHANGELOG +6 -0
- data/README.markdown +21 -0
- data/lib/cache_method/cached_result.rb +5 -1
- data/lib/cache_method/debug.rb +17 -0
- data/lib/cache_method/version.rb +1 -1
- data/lib/cache_method.rb +4 -0
- data/test/helper.rb +12 -0
- data/test/test_cache_method.rb +36 -0
- metadata +5 -4
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
0.2.2 / 2012-03-02
|
2
|
+
|
3
|
+
* Enhancements
|
4
|
+
|
5
|
+
* Class name is now force-prepended to the result of #as_cache_key. This prevents objects of different classes that have the same #as_cache_key from being confused with each other. In any case, this sort of duck typing (?) doesn't seem appropriate for cache keys.
|
6
|
+
|
1
7
|
0.2.1 / 2012-03-01
|
2
8
|
|
3
9
|
* Enhancements
|
data/README.markdown
CHANGED
@@ -44,6 +44,27 @@ And clear them too
|
|
44
44
|
|
45
45
|
(which doesn't delete the rest of your cache)
|
46
46
|
|
47
|
+
## ActiveRecord
|
48
|
+
|
49
|
+
If you're caching methods ActiveRecord objects (aka instances of `ActiveRecord::Base`), then you should probably define something like:
|
50
|
+
|
51
|
+
class ActiveRecord::Base
|
52
|
+
def as_cache_key
|
53
|
+
attributes
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
Otherwise the full object will be marshal dumped **just to get a cache key**.
|
58
|
+
|
59
|
+
## Debug
|
60
|
+
|
61
|
+
CacheMethod can warn you if your obj or args cache keys are suspiciously long.
|
62
|
+
|
63
|
+
require 'cache_method'
|
64
|
+
require 'cache_method/debug'
|
65
|
+
|
66
|
+
Then watch your logs.
|
67
|
+
|
47
68
|
## Configuration (and supported cache clients)
|
48
69
|
|
49
70
|
You need to set where the cache will be stored:
|
@@ -16,7 +16,7 @@ module CacheMethod
|
|
16
16
|
memo
|
17
17
|
end
|
18
18
|
else
|
19
|
-
obj.respond_to?(:as_cache_key) ? obj.as_cache_key : obj
|
19
|
+
obj.respond_to?(:as_cache_key) ? [obj.class.name, obj.as_cache_key] : obj
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -46,6 +46,10 @@ module CacheMethod
|
|
46
46
|
v
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
def exist?
|
51
|
+
Config.instance.storage.exist?(cache_key)
|
52
|
+
end
|
49
53
|
|
50
54
|
def ttl
|
51
55
|
@ttl ||= Config.instance.default_ttl
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module CacheMethod
|
2
|
+
class CachedResult #:nodoc: all
|
3
|
+
def obj_digest
|
4
|
+
if (l = ::Marshal.dump(CachedResult.resolve_cache_key(obj)).length) > 500
|
5
|
+
$stderr.puts "Warn: #{l} long obj digest. #{obj.class} -> #{CachedResult.resolve_cache_key(obj).inspect}"
|
6
|
+
end
|
7
|
+
@obj_digest ||= ::Digest::SHA1.hexdigest(::Marshal.dump(CachedResult.resolve_cache_key(obj)))
|
8
|
+
end
|
9
|
+
|
10
|
+
def args_digest
|
11
|
+
if (l = ::Marshal.dump(CachedResult.resolve_cache_key(args)).length) > 500
|
12
|
+
$stderr.puts "Warn: #{l} long args digest. #{method_signature}(#{CachedResult.resolve_cache_key(args).inspect})"
|
13
|
+
end
|
14
|
+
@args_digest ||= args.empty? ? 'empty' : ::Digest::SHA1.hexdigest(::Marshal.dump(CachedResult.resolve_cache_key(args)))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/cache_method/version.rb
CHANGED
data/lib/cache_method.rb
CHANGED
@@ -35,6 +35,10 @@ module CacheMethod
|
|
35
35
|
raise ::RuntimeError, "[cache_method] cache_method_clear called, but you have disabled generational caching. Check your setting for CacheMethod.config.generational"
|
36
36
|
end
|
37
37
|
end
|
38
|
+
|
39
|
+
def cache_method_cached?(method_id, *args)
|
40
|
+
::CacheMethod::CachedResult.new(self, method_id, nil, nil, args).exist?
|
41
|
+
end
|
38
42
|
end
|
39
43
|
|
40
44
|
# All Classes (but not instances), get the <tt>.cache_method</tt> method.
|
data/test/helper.rb
CHANGED
data/test/test_cache_method.rb
CHANGED
@@ -436,4 +436,40 @@ class TestCacheMethod < Test::Unit::TestCase
|
|
436
436
|
end
|
437
437
|
end
|
438
438
|
end
|
439
|
+
|
440
|
+
def test_cached_query
|
441
|
+
a = CopyCat1.new 'mimo'
|
442
|
+
assert !a.cache_method_cached?(:echo, 'hi')
|
443
|
+
assert !a.cache_method_cached?(:echo, 'there')
|
444
|
+
a.echo('hi')
|
445
|
+
assert a.cache_method_cached?(:echo, 'hi')
|
446
|
+
assert !a.cache_method_cached?(:echo, 'there')
|
447
|
+
|
448
|
+
assert !BlogM.cache_method_cached?(:get_latest_entries)
|
449
|
+
assert !BlogM.cache_method_cached?(:get_latest_entries, 'there')
|
450
|
+
BlogM.get_latest_entries
|
451
|
+
assert BlogM.cache_method_cached?(:get_latest_entries)
|
452
|
+
assert !BlogM.cache_method_cached?(:get_latest_entries, 'there')
|
453
|
+
end
|
454
|
+
|
455
|
+
def test_class_name_automatically_appended_to_cache_key
|
456
|
+
jek = DrJekyll.new
|
457
|
+
hyde = MrHyde.new
|
458
|
+
|
459
|
+
assert_equal jek.as_cache_key, hyde.as_cache_key
|
460
|
+
|
461
|
+
a = CopyCat1.new 'mimo'
|
462
|
+
|
463
|
+
a.ack(jek)
|
464
|
+
assert_equal 1, a.ack_count
|
465
|
+
|
466
|
+
a.ack(hyde)
|
467
|
+
assert_equal 2, a.ack_count
|
468
|
+
|
469
|
+
a.ack(jek)
|
470
|
+
assert_equal 2, a.ack_count
|
471
|
+
|
472
|
+
a.ack(hyde)
|
473
|
+
assert_equal 2, a.ack_count
|
474
|
+
end
|
439
475
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cache_method
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cache
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152318920 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 0.2.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152318920
|
25
25
|
description: Like alias_method, but it's cache_method!
|
26
26
|
email:
|
27
27
|
- seamus@abshere.net
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- lib/cache_method.rb
|
39
39
|
- lib/cache_method/cached_result.rb
|
40
40
|
- lib/cache_method/config.rb
|
41
|
+
- lib/cache_method/debug.rb
|
41
42
|
- lib/cache_method/generation.rb
|
42
43
|
- lib/cache_method/version.rb
|
43
44
|
- test/helper.rb
|