basiccache 0.0.21 → 0.0.22
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +48 -0
- data/basiccache.gemspec +1 -1
- data/lib/basiccache.rb +1 -1
- data/lib/methodcacher.rb +17 -0
- data/spec/basiccache_spec.rb +0 -6
- data/spec/methodcacher_spec.rb +56 -0
- metadata +5 -3
- data/lib/version.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22d2709c9524354f74da72c0b334aa8eb8f41b1b
|
4
|
+
data.tar.gz: 395bc1e79ca4a535e7bfd209e156684d9bb1adca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4184929bde760bfbc19555318fd9186ae3a1728291cebc49e859c48752448bdb8e288b47e00688d984e0a9044f84b764118081ec6766f7b0f580c46f055f85f
|
7
|
+
data.tar.gz: 51df167bc6fee497e09d1d77751d3b850b474136a54464fa12234653b4201ea52ba0d82c19670abe8909c4694b0a67097b0220df877a71cad38ef79e7f80353d
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -56,6 +56,54 @@ my_cache.clear!
|
|
56
56
|
|
57
57
|
The .clear! method can be passed a key name to clear just a specific key, as well.
|
58
58
|
|
59
|
+
### MethodCacher
|
60
|
+
|
61
|
+
MethodCacher provides a helper module for caching method calls inside a class.
|
62
|
+
|
63
|
+
To cache the results of Foo.bar and Foo.act, for instance, you'd do the following:
|
64
|
+
|
65
|
+
```
|
66
|
+
require 'basiccache'
|
67
|
+
|
68
|
+
class Foo
|
69
|
+
include MethodCacher
|
70
|
+
|
71
|
+
def initialize
|
72
|
+
enable_caching [:bar, :act]
|
73
|
+
end
|
74
|
+
|
75
|
+
def bar
|
76
|
+
# deep computation here
|
77
|
+
end
|
78
|
+
|
79
|
+
def act
|
80
|
+
# more super deep calculations
|
81
|
+
end
|
82
|
+
|
83
|
+
def other
|
84
|
+
# this method isn't cached
|
85
|
+
end
|
86
|
+
end
|
87
|
+
```
|
88
|
+
|
89
|
+
You can also provide a second argument to enable_caching to specify a custom cache object (like TimeCache):
|
90
|
+
|
91
|
+
```
|
92
|
+
require 'basiccache'
|
93
|
+
|
94
|
+
class Foo
|
95
|
+
include MethodCacher
|
96
|
+
|
97
|
+
def initialize
|
98
|
+
enable_caching [:act], BasicCache::TimeCache.new
|
99
|
+
end
|
100
|
+
|
101
|
+
def act
|
102
|
+
# super deep time-sensitive calculations
|
103
|
+
end
|
104
|
+
end
|
105
|
+
```
|
106
|
+
|
59
107
|
## Subclasses
|
60
108
|
|
61
109
|
### TimeCache
|
data/basiccache.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'basiccache'
|
3
|
-
s.version = '0.0.
|
3
|
+
s.version = '0.0.22'
|
4
4
|
s.date = Time.now.strftime("%Y-%m-%d")
|
5
5
|
s.summary = 'Provides a minimal key/value caching layer'
|
6
6
|
s.description = "Allows an application to dynamically cache values and retrieve them later"
|
data/lib/basiccache.rb
CHANGED
data/lib/methodcacher.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
##
|
2
|
+
# Helper module for caching methods inside a class
|
3
|
+
# To use, extend your class with MethodCacher
|
4
|
+
# Then, in initialize, call enable_caching
|
5
|
+
|
6
|
+
module MethodCacher
|
7
|
+
def enable_caching(methods, cache = nil)
|
8
|
+
cache ||= BasicCache.new
|
9
|
+
methods.each do |name|
|
10
|
+
uncached_name = "#{name}_uncached".to_sym
|
11
|
+
(class << self; self; end).class_eval do
|
12
|
+
alias_method uncached_name, name
|
13
|
+
define_method(name) { |*a| cache.cache { send uncached_name, *a } }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/basiccache_spec.rb
CHANGED
@@ -1,12 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe BasicCache do
|
4
|
-
describe '::VERSION' do
|
5
|
-
it 'follows the semantic version scheme' do
|
6
|
-
expect(BasicCache::VERSION).to match /\d+\.\d+\.\d+/
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
4
|
describe '.new' do
|
11
5
|
it 'creates cache objects' do
|
12
6
|
expect(BasicCache.new).to be_an_instance_of BasicCache::Cache
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
##
|
4
|
+
# Example class for testing method caching
|
5
|
+
|
6
|
+
class Example
|
7
|
+
include MethodCacher
|
8
|
+
|
9
|
+
def initialize(skip_cache = false)
|
10
|
+
return if skip_cache
|
11
|
+
enable_caching [:repeat]
|
12
|
+
enable_caching [:time_repeat], BasicCache::TimeCache.new(1)
|
13
|
+
end
|
14
|
+
|
15
|
+
def repeat(input)
|
16
|
+
input
|
17
|
+
end
|
18
|
+
|
19
|
+
def time_repeat(input)
|
20
|
+
input
|
21
|
+
end
|
22
|
+
|
23
|
+
def not_cached(input)
|
24
|
+
input
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe MethodCacher do
|
29
|
+
let(:test_object) { Example.new }
|
30
|
+
let(:uncached_object) { Example.new(skip_cache: true) }
|
31
|
+
|
32
|
+
describe '#enable_caching' do
|
33
|
+
it 'wraps methods with the cache' do
|
34
|
+
expect(test_object.repeat 2).to eql 2
|
35
|
+
expect(test_object.repeat 3).to eql 2
|
36
|
+
end
|
37
|
+
it "doesn't mess with other instances" do
|
38
|
+
expect(uncached_object.repeat 5).to eql 5
|
39
|
+
expect(uncached_object.repeat 6).to eql 6
|
40
|
+
end
|
41
|
+
it 'allows a user-supplied cache object' do
|
42
|
+
expect(test_object.time_repeat 2).to eql 2
|
43
|
+
expect(test_object.time_repeat 3).to eql 2
|
44
|
+
sleep 2
|
45
|
+
expect(test_object.time_repeat 4).to eql 4
|
46
|
+
end
|
47
|
+
it 'does not override other methods' do
|
48
|
+
expect(test_object.not_cached 7).to eql 7
|
49
|
+
expect(test_object.not_cached 8).to eql 8
|
50
|
+
end
|
51
|
+
it 'aliases the uncached methods' do
|
52
|
+
expect(test_object.repeat_uncached 5).to eql 5
|
53
|
+
expect(test_object.repeat_uncached 4).to eql 4
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: basiccache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -127,10 +127,11 @@ files:
|
|
127
127
|
- lib/basiccache.rb
|
128
128
|
- lib/caches/cache.rb
|
129
129
|
- lib/caches/timecache.rb
|
130
|
-
- lib/
|
130
|
+
- lib/methodcacher.rb
|
131
131
|
- spec/basiccache_spec.rb
|
132
132
|
- spec/caches/cache_spec.rb
|
133
133
|
- spec/caches/timecache_spec.rb
|
134
|
+
- spec/methodcacher_spec.rb
|
134
135
|
- spec/spec_helper.rb
|
135
136
|
- vendor/cache/ast-1.1.0.gem
|
136
137
|
- vendor/cache/coveralls-0.7.0.gem
|
@@ -187,4 +188,5 @@ test_files:
|
|
187
188
|
- spec/basiccache_spec.rb
|
188
189
|
- spec/caches/cache_spec.rb
|
189
190
|
- spec/caches/timecache_spec.rb
|
191
|
+
- spec/methodcacher_spec.rb
|
190
192
|
- spec/spec_helper.rb
|