cache_helper 0.1.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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.rdoc +7 -0
- data/Rakefile +2 -0
- data/cache_helper.gemspec +25 -0
- data/lib/cache_helper.rb +48 -0
- data/lib/cache_helper/version.rb +3 -0
- metadata +101 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "cache_helper/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "cache_helper"
|
7
|
+
s.version = CacheHelper::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Clyde Law"]
|
10
|
+
s.email = ["clyde@futureadvisor.com"]
|
11
|
+
s.homepage = %q{http://github.com/FutureAdvisor/cache_helper}
|
12
|
+
s.summary = %q{Adds methods to more easily work with Rails caching.}
|
13
|
+
s.description = %q{Overrides ActiveRecord::Base#cache_key to return unique keys for new records and adds methods to more easily work with Rails caching.}
|
14
|
+
s.license = 'MIT'
|
15
|
+
|
16
|
+
s.add_dependency('activerecord', '>= 2.1.0')
|
17
|
+
s.add_dependency('alias_helper')
|
18
|
+
|
19
|
+
s.rubyforge_project = "cache_helper"
|
20
|
+
|
21
|
+
s.files = `git ls-files`.split("\n")
|
22
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
23
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
end
|
data/lib/cache_helper.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
module CacheHelper
|
2
|
+
def self.included(base)
|
3
|
+
base.alias_method_chain :cache_key, :new_record_id
|
4
|
+
base.extend(ClassMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
# Overrides ActiveRecord::Base#cache_key to return unique keys for new
|
8
|
+
# records.
|
9
|
+
def cache_key_with_new_record_id
|
10
|
+
key = cache_key_without_new_record_id
|
11
|
+
if self.new_record?
|
12
|
+
# The object is not yet database-backed; append the object's ID and the
|
13
|
+
# current time to use as a provisional cache key.
|
14
|
+
if @temp_cache_key.nil?
|
15
|
+
@temp_cache_key = key << "(#{self.__id__})-#{Time.now.to_s(:number)}"
|
16
|
+
else
|
17
|
+
key = @temp_cache_key
|
18
|
+
end
|
19
|
+
end
|
20
|
+
key
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns a cache key associated with the record for the specified method
|
24
|
+
# and options.
|
25
|
+
def method_cache_key(method, options = {})
|
26
|
+
key = self.cache_key + "-#{method.to_s}"
|
27
|
+
key << ".#{options.hash.to_s(36)}" unless options.empty?
|
28
|
+
key
|
29
|
+
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
private
|
33
|
+
# Wraps an instance method with basic caching functionality.
|
34
|
+
def cache_method(method)
|
35
|
+
method_with_caching, method_without_caching = method_chain_aliases(method, :caching)
|
36
|
+
define_method(method_with_caching.to_sym) {
|
37
|
+
Rails.cache.fetch(method_cache_key(method)) do
|
38
|
+
self.__send__(method_without_caching.to_sym)
|
39
|
+
end
|
40
|
+
}
|
41
|
+
alias_method_chain method, :caching
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class ActiveRecord::Base
|
47
|
+
include CacheHelper
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cache_helper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Clyde Law
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-04-20 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: activerecord
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 11
|
29
|
+
segments:
|
30
|
+
- 2
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
version: 2.1.0
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: alias_helper
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
version: "0"
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id002
|
50
|
+
description: Overrides ActiveRecord::Base#cache_key to return unique keys for new records and adds methods to more easily work with Rails caching.
|
51
|
+
email:
|
52
|
+
- clyde@futureadvisor.com
|
53
|
+
executables: []
|
54
|
+
|
55
|
+
extensions: []
|
56
|
+
|
57
|
+
extra_rdoc_files: []
|
58
|
+
|
59
|
+
files:
|
60
|
+
- .gitignore
|
61
|
+
- Gemfile
|
62
|
+
- README.rdoc
|
63
|
+
- Rakefile
|
64
|
+
- cache_helper.gemspec
|
65
|
+
- lib/cache_helper.rb
|
66
|
+
- lib/cache_helper/version.rb
|
67
|
+
homepage: http://github.com/FutureAdvisor/cache_helper
|
68
|
+
licenses:
|
69
|
+
- MIT
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
hash: 3
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
version: "0"
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
90
|
+
segments:
|
91
|
+
- 0
|
92
|
+
version: "0"
|
93
|
+
requirements: []
|
94
|
+
|
95
|
+
rubyforge_project: cache_helper
|
96
|
+
rubygems_version: 1.7.2
|
97
|
+
signing_key:
|
98
|
+
specification_version: 3
|
99
|
+
summary: Adds methods to more easily work with Rails caching.
|
100
|
+
test_files: []
|
101
|
+
|