cache_helper 0.1.0 → 0.2.0
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/cache_helper.rb +46 -3
- data/lib/cache_helper/version.rb +1 -1
- metadata +7 -5
data/lib/cache_helper.rb
CHANGED
@@ -4,7 +4,7 @@ module CacheHelper
|
|
4
4
|
base.extend(ClassMethods)
|
5
5
|
end
|
6
6
|
|
7
|
-
# Overrides ActiveRecord::Base#cache_key to return unique keys for new
|
7
|
+
# Overrides ActiveRecord::Base#cache_key to return unique cache keys for new
|
8
8
|
# records.
|
9
9
|
def cache_key_with_new_record_id
|
10
10
|
key = cache_key_without_new_record_id
|
@@ -28,13 +28,56 @@ module CacheHelper
|
|
28
28
|
key
|
29
29
|
end
|
30
30
|
|
31
|
+
# Returns a cache key associated with the record for the specified method,
|
32
|
+
# associations, and options.
|
33
|
+
def method_cache_key_using_associations(method, *remaining_args)
|
34
|
+
options = remaining_args.extract_options!
|
35
|
+
associations = remaining_args
|
36
|
+
associations.each do |association|
|
37
|
+
options["#{association.to_s}_updated_time".to_sym] = association_updated_time(association)
|
38
|
+
end
|
39
|
+
method_cache_key(method, options)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns the latest updated time of the record or records in the specified
|
43
|
+
# association. This can be used as a method_cache_key option if the method's
|
44
|
+
# return value depends on the associated records.
|
45
|
+
def association_updated_time(association)
|
46
|
+
self.class.reflect_on_all_associations.each do |assoc_reflection|
|
47
|
+
if (assoc_reflection.name == association)
|
48
|
+
case assoc_reflection.macro
|
49
|
+
when :has_one, :belongs_to
|
50
|
+
return self.__send__(association).updated_at
|
51
|
+
when :has_many, :has_and_belongs_to_many
|
52
|
+
return self.__send__(association).maximum(:updated_at)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
raise ArgumentError.new("association #{association.inspect} not found in #{self.class.name}")
|
57
|
+
end
|
58
|
+
|
31
59
|
module ClassMethods
|
32
60
|
private
|
33
|
-
#
|
61
|
+
# Adds basic caching functionality to an instance method.
|
34
62
|
def cache_method(method)
|
63
|
+
cache_method_using_cache_key_method(method, :method_cache_key, method)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Adds basic caching functionality to an instance method whose return value
|
67
|
+
# depends on associated records.
|
68
|
+
def cache_method_using_associations(method, *associations)
|
69
|
+
associations.each do |association|
|
70
|
+
raise ArgumentError.new("association #{association.inspect} not found in #{self.name}") unless self.reflect_on_all_associations.any? { |assoc_reflection| assoc_reflection.name == association }
|
71
|
+
end
|
72
|
+
cache_method_using_cache_key_method(method, :method_cache_key_using_associations, method, *associations)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Adds basic caching functionality to an instance method using the
|
76
|
+
# specified cache key method and arguments.
|
77
|
+
def cache_method_using_cache_key_method(method, cache_key_method, *cache_key_method_args)
|
35
78
|
method_with_caching, method_without_caching = method_chain_aliases(method, :caching)
|
36
79
|
define_method(method_with_caching.to_sym) {
|
37
|
-
Rails.cache.fetch(
|
80
|
+
Rails.cache.fetch(self.__send__(cache_key_method, *cache_key_method_args)) do
|
38
81
|
self.__send__(method_without_caching.to_sym)
|
39
82
|
end
|
40
83
|
}
|
data/lib/cache_helper/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cache_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Clyde Law
|
@@ -15,7 +15,8 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-20 00:00:00
|
18
|
+
date: 2011-04-20 00:00:00 -07:00
|
19
|
+
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: activerecord
|
@@ -64,6 +65,7 @@ files:
|
|
64
65
|
- cache_helper.gemspec
|
65
66
|
- lib/cache_helper.rb
|
66
67
|
- lib/cache_helper/version.rb
|
68
|
+
has_rdoc: true
|
67
69
|
homepage: http://github.com/FutureAdvisor/cache_helper
|
68
70
|
licenses:
|
69
71
|
- MIT
|
@@ -93,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
95
|
requirements: []
|
94
96
|
|
95
97
|
rubyforge_project: cache_helper
|
96
|
-
rubygems_version: 1.
|
98
|
+
rubygems_version: 1.5.2
|
97
99
|
signing_key:
|
98
100
|
specification_version: 3
|
99
101
|
summary: Adds methods to more easily work with Rails caching.
|