will_cache 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -8,9 +8,9 @@ WillCache provides simple API for caching ActiveRecord objects that uses ActiveS
8
8
 
9
9
  >> User.last.cached(:profile)
10
10
  User Load (0.000581) (1 Row) SELECT * FROM `users` ORDER BY users.id DESC LIMIT 1
11
- Cache miss: users:65:profile
11
+ Cache miss: User:65:profile
12
12
  Profile Load (0.000454) (1 Row) SELECT * FROM `profiles` WHERE (`profiles`.user_id = 65) LIMIT 1
13
- Cache write (will save 1.64ms): users:65:profile
13
+ Cache write (will save 1.64ms): User:65:profile
14
14
  => #<Profile id: 65, first_name: nil, last_name: nil, ...>
15
15
 
16
16
  Example shows [inline log in Rails console](http://rors.org/2011/07/17/inline-logging-in-rails-console.html).
@@ -1,20 +1,42 @@
1
1
  module WillCache
2
2
  module Cacheable
3
+
4
+ def cache
5
+ Rails.cache
6
+ end
7
+
3
8
  def expire_cache(method_name = nil, args = {})
4
9
  with = args[:with]
5
- Rails.cache.delete(method_cache_key(method_name, with))
10
+ cache.delete(method_cache_key(method_name, with))
11
+ true
6
12
  end
7
-
13
+ alias :clear_cache :expire_cache
14
+
8
15
  def cached(method_name, args = {})
9
16
  with = args[:with]
10
- Rails.cache.fetch(method_cache_key(method_name, with)) {
11
- do_send(method_name, with)
12
- }
17
+
18
+ # Rails.fetch is broken
19
+ # http://developingsimplicity.com/posts/rails-cache-fetch
20
+ key = method_cache_key(method_name, with)
21
+ if cache.exist?(key)
22
+ cache.read(key)
23
+ else
24
+ cache.write(key, do_send(method_name, with))
25
+ end
13
26
  end
27
+ alias :caches :cached
14
28
 
15
29
  def fetch_cache(method_name, args = {})
16
30
  with = args[:with]
17
- Rails.cache.read(method_cache_key(method_name, with))
31
+ cache.read(method_cache_key(method_name, with))
32
+ end
33
+
34
+ def write_cache(key, value, ttl = nil)
35
+ cache.write(key, value, :expires_in => ttl)
36
+ end
37
+
38
+ def read_cache(key)
39
+ cache.read(key)
18
40
  end
19
41
 
20
42
  def do_send(method_name, with)
@@ -34,7 +56,7 @@ module WillCache
34
56
  if with.blank?
35
57
  base
36
58
  else
37
- "#{base}(#{with.inspect})"
59
+ "#{base}:#{with})"
38
60
  end
39
61
  end
40
62
  end
data/lib/will_cache.rb CHANGED
@@ -7,6 +7,7 @@ module WillCache
7
7
 
8
8
  module ClassMethods
9
9
  include Cacheable
10
+
10
11
  def acts_as_cached
11
12
  send :include, InstanceMethods
12
13
  end
@@ -30,23 +30,34 @@ class WillCacheTest < Test::Unit::TestCase
30
30
  end
31
31
 
32
32
  def test_cached_on_class_method
33
- mock(Rails.cache).fetch("User:count") { 1 }
33
+ key = "User:count"
34
+ mock(Rails.cache).exist?(key) { false }
35
+ mock(Rails.cache).write(key, 1) { 1 }
34
36
  assert_equal 1, User.cached(:count)
35
37
  end
36
38
 
37
39
  def test_cached_on_instance_method
38
- mock(Rails.cache).fetch("User:1:articles") { @user.articles }
40
+ key = "User:1:articles"
41
+ mock(Rails.cache).exist?(key) { false }
42
+ mock(Rails.cache).write(key, @user.articles) { @user.articles }
43
+ assert_equal @user.articles, @user.cached(:articles)
44
+ end
45
+
46
+ def test_cached_on_instance_method_on_hit
47
+ key = "User:1:articles"
48
+ mock(Rails.cache).exist?(key) { true }
49
+ mock(Rails.cache).read(key) { @user.articles }
39
50
  assert_equal @user.articles, @user.cached(:articles)
40
51
  end
41
52
 
42
53
  def test_expire_cache
43
54
  mock(Rails.cache).delete("User:1:articles")
44
- @user.expire_cache(:articles)
55
+ assert @user.expire_cache(:articles)
45
56
  end
46
57
 
47
58
  def test_expire_cache2
48
59
  mock(Rails.cache).delete("User:1:random:2")
49
- @user.expire_cache('random:2')
60
+ assert @user.expire_cache('random:2')
50
61
  end
51
62
 
52
63
  def test_fetch_cache
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: will_cache
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dejan Simic
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-18 00:00:00 +02:00
18
+ date: 2011-07-19 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies: []
21
21