model-cache 0.2.2 → 0.2.4

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.
Files changed (3) hide show
  1. data/lib/model-cache.rb +99 -1
  2. metadata +12 -6
  3. data/lib/model_cache.rb +0 -83
@@ -1 +1,99 @@
1
- require File.dirname(__FILE__) + '/../init.rb'
1
+ module ModelCache
2
+
3
+ DEFAULT_TIME = 12.hours unless const_defined?(:DEFAULT_TIME)
4
+ NIL_OBJECT = :__i_have_no_idea_how_to_do_this_without_an_ugly_symbol unless const_defined?(:NIL_OBJECT)
5
+
6
+ def self.included(klass)
7
+ klass.extend ClassMethods
8
+ end
9
+
10
+ def cache(key, time = DEFAULT_TIME, &block)
11
+ ModelCache::cache([self.cache_key, key], time, &block)
12
+ end
13
+
14
+ def self.cache(ckey, time = DEFAULT_TIME, &block)
15
+ cache_hit = false
16
+ if CACHE.class.name == 'Memcached'
17
+ begin
18
+ result = CACHE.get(ckey.hash.to_s)
19
+ cache_hit = true
20
+ rescue Memcached::NotFound => e
21
+ end
22
+ elsif CACHE.class.name == 'MemCache'
23
+ result = CACHE.get(ckey.hash.to_s)
24
+ if result
25
+ cache_hit = true
26
+ end
27
+ if result == NIL_OBJECT
28
+ result = nil
29
+ end
30
+ else
31
+ raise "CACHE object not configured #{CACHE.inspect}!"
32
+ end
33
+ unless cache_hit
34
+ result = block.call
35
+ if CACHE.class.name == 'MemCache'
36
+ if result
37
+ CACHE.set(ckey.hash.to_s, result, time)
38
+ else
39
+ CACHE.set(ckey.hash.to_s, NIL_OBJECT, time)
40
+ end
41
+ elsif CACHE.class.name == 'Memcached'
42
+ CACHE.set(ckey.hash.to_s, result, time)
43
+ else
44
+ raise "CACHE object not configured #{CACHE.inspect}!"
45
+ end
46
+ result
47
+ end
48
+ result
49
+ end
50
+
51
+
52
+ module ClassMethods
53
+ def cache_method(*args)
54
+ opts = args.extract_options!
55
+ args.each do |sym|
56
+ cache_method_for_time(sym, (opts[:time] || DEFAULT_TIME))
57
+ end
58
+ end
59
+
60
+ def cache_method_for_time(sym, time)
61
+ alias_method :"__noncached_#{sym}", sym
62
+ define_method sym do |*args|
63
+ ckey = [self.cache_key, sym, *args]
64
+ ModelCache.cache(ckey, time) do
65
+ self.send(:"__noncached_#{sym}", *args)
66
+ end
67
+ end
68
+ define_method :"__is_cached_#{sym}?" do |*args|
69
+ ckey = [self.cache_key, sym, *args]
70
+ if CACHE.class.name == 'Memcached'
71
+ begin
72
+ result = CACHE.get(ckey.hash.to_s)
73
+ cache_hit = true
74
+ rescue Memcached::NotFound => e
75
+ end
76
+ elsif CACHE.class.name == 'MemCache'
77
+ result = CACHE.get(ckey.hash.to_s)
78
+ if result
79
+ cache_hit = true
80
+ end
81
+ if result == NIL_OBJECT
82
+ result = nil
83
+ end
84
+ else
85
+ raise "CACHE object not configured #{CACHE.inspect}!"
86
+ end
87
+ cache_hit
88
+ end
89
+ define_method :"__flush_#{sym}" do |*args|
90
+ ckey = [self.cache_key, sym, *args]
91
+ CACHE.delete(ckey)
92
+ end
93
+ end
94
+ end
95
+
96
+ end
97
+
98
+ # include the library
99
+ ActiveRecord::Base.send(:include, ModelCache)
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: model-cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 4
9
+ version: 0.2.4
5
10
  platform: ruby
6
11
  authors:
7
12
  - Frantisek Havluj
@@ -9,7 +14,7 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-03 00:00:00 +01:00
17
+ date: 2010-06-11 00:00:00 +02:00
13
18
  default_executable:
14
19
  dependencies: []
15
20
 
@@ -23,7 +28,6 @@ extra_rdoc_files: []
23
28
 
24
29
  files:
25
30
  - lib/model-cache.rb
26
- - lib/model_cache.rb
27
31
  - init.rb
28
32
  - README.textile
29
33
  - MIT-LICENSE
@@ -41,18 +45,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
41
45
  requirements:
42
46
  - - ">="
43
47
  - !ruby/object:Gem::Version
48
+ segments:
49
+ - 0
44
50
  version: "0"
45
- version:
46
51
  required_rubygems_version: !ruby/object:Gem::Requirement
47
52
  requirements:
48
53
  - - ">="
49
54
  - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
50
57
  version: "0"
51
- version:
52
58
  requirements: []
53
59
 
54
60
  rubyforge_project:
55
- rubygems_version: 1.3.5
61
+ rubygems_version: 1.3.6
56
62
  signing_key:
57
63
  specification_version: 3
58
64
  summary: Rails plugin for caching in models.
@@ -1,83 +0,0 @@
1
- module ModelCache
2
-
3
- DEFAULT_TIME = 12.hours unless const_defined?(:DEFAULT_TIME)
4
- NIL_OBJECT = :__i_have_no_idea_how_to_do_this_without_an_ugly_symbol unless const_defined?(:NIL_OBJECT)
5
-
6
- def self.included(klass)
7
- klass.extend ClassMethods
8
- end
9
-
10
- def cache(key, time = DEFAULT_TIME, &block)
11
- ModelCache::cache([self.cache_key, key], time, &block)
12
- end
13
-
14
- def self.cache(ckey, time = DEFAULT_TIME, &block)
15
- cache_hit = false
16
- if Rails.configuration.action_controller.perform_caching
17
- if CACHE.class.name == 'Memcached'
18
- begin
19
- result = CACHE.get(ckey.hash.to_s)
20
- cache_hit = true
21
- rescue Memcached::NotFound => e
22
- end
23
- elsif CACHE.class.name == 'MemCache'
24
- result = CACHE.get(ckey.hash.to_s)
25
- if result
26
- cache_hit = true
27
- end
28
- if result == NIL_OBJECT
29
- result = nil
30
- end
31
- else
32
- raise "CACHE object not configured #{CACHE.inspect}!"
33
- end
34
- end
35
- unless cache_hit
36
- result = block.call
37
- if Rails.configuration.action_controller.perform_caching
38
- if CACHE.class.name == 'MemCache'
39
- if result
40
- CACHE.set(ckey.hash.to_s, result, time)
41
- else
42
- CACHE.set(ckey.hash.to_s, NIL_OBJECT, time)
43
- end
44
- elsif CACHE.class.name == 'Memcached'
45
- CACHE.set(ckey.hash.to_s, result, time)
46
- else
47
- raise "CACHE object not configured #{CACHE.inspect}!"
48
- end
49
- end
50
- result
51
- end
52
- result
53
- end
54
-
55
-
56
- module ClassMethods
57
- def cache_method(*args)
58
- opts = args.extract_options!
59
- args.each do |sym|
60
- cache_method_for_time(sym, (opts[:time] || DEFAULT_TIME))
61
- end
62
- end
63
-
64
- def cache_method_for_time(sym, time)
65
- alias_method :"__noncached_#{sym}", sym
66
- define_method sym do |*args|
67
- ckey = [self.cache_key, sym, *args]
68
- ModelCache.cache(ckey, time) do
69
- self.send(:"__noncached_#{sym}", *args)
70
- end
71
- end
72
- define_method :"__is_cached_#{sym}?" do |*args|
73
- ckey = [self.cache_key, sym, *args]
74
- !!( Rails.configuration.action_controller.perform_caching && CACHE.get(ckey) )
75
- end
76
- define_method :"__flush_#{sym}" do |*args|
77
- ckey = [self.cache_key, sym, *args]
78
- CACHE.delete(ckey)
79
- end
80
- end
81
- end
82
-
83
- end