aub-cache_advance 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  Gem::Specification.new do |s|
2
- s.version = '1.0.1'
2
+ s.version = '1.0.2'
3
3
  s.date = %q{2009-01-08}
4
4
 
5
5
  s.name = %q{cache_advance}
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.authors = ['Aubrey Holland']
8
8
  s.description = %q{A system for spiffy declarative caching}
9
9
  s.email = %q{aubrey@patch.com}
10
- s.files = %w(cache_advance.gemspec lib/cache_advance/active_record_sweeper.rb lib/cache_advance/cache_set.rb lib/cache_advance/mapper.rb lib/cache_advance/named_cache.rb lib/cache_advance/rails_cache.rb lib/cache_advance.rb rails/init.rb Rakefile README.textile test/active_record_sweeper_test.rb test/cache_set_test.rb test/mapper_test.rb test/named_cache_test.rb test/rails_cache_test.rb test/test_helper.rb TODO.textile)
10
+ s.files = %w(cache_advance.gemspec lib/cache_advance/active_record_sweeper.rb lib/cache_advance/cache_set.rb lib/cache_advance/mapper.rb lib/cache_advance/named_cache.rb lib/cache_advance/rails_cache.rb lib/cache_advance.rb rails/init.rb Rakefile README.textile test/active_record_sweeper_test.rb test/cache_mock.rb test/cache_set_test.rb test/mapper_test.rb test/named_cache_test.rb test/rails_cache_test.rb test/test_helper.rb TODO.textile)
11
11
  s.homepage = %q{http://github.com/aub/cache_advance}
12
12
  s.require_paths = ['lib']
13
13
  s.rubygems_version = %q{1.2.0}
@@ -3,7 +3,7 @@ module CacheAdvance
3
3
  attr_reader :named_caches
4
4
  attr_reader :qualifiers
5
5
  attr_reader :plugins
6
- attr_accessor :observer_type
6
+ attr_accessor :sweeper_type
7
7
  attr_accessor :cache
8
8
 
9
9
  def initialize
@@ -35,7 +35,7 @@ module CacheAdvance
35
35
  end
36
36
 
37
37
  def create_sweepers
38
- observer_type.initialize_observed(@named_caches.values.map { |c| c.expiration_types }.flatten.compact.uniq)
38
+ sweeper_type.initialize_observed(@named_caches.values.map { |c| c.expiration_types }.flatten.compact.uniq)
39
39
  end
40
40
 
41
41
  def expire_for_class(class_name)
@@ -2,10 +2,10 @@ module CacheAdvance
2
2
  class NamedCache
3
3
  STORED_KEY = 'STORED_CACHES'
4
4
 
5
- def initialize(name, params, configuration, cache)
5
+ def initialize(name, params, cache_set, cache)
6
6
  @name = name.to_s
7
7
  @params = params
8
- @configuration = configuration
8
+ @cache_set = cache_set
9
9
  @cache = cache
10
10
  end
11
11
 
@@ -14,7 +14,7 @@ module CacheAdvance
14
14
  key << suffix.to_s
15
15
 
16
16
  qualifiers.each do |q|
17
- if (qualifier = @configuration.qualifiers[q])
17
+ if (qualifier = @cache_set.qualifiers[q])
18
18
  this_one = qualifier.call(request)
19
19
  key << this_one.to_s unless this_one.nil?
20
20
  end
@@ -76,7 +76,7 @@ module CacheAdvance
76
76
  protected
77
77
 
78
78
  def call_plugins(method, key, request)
79
- @configuration.plugins.each { |p| p.send(method, @name, key, request) if p.respond_to?(method) }
79
+ @cache_set.plugins.each { |p| p.send(method, @name, key, request) if p.respond_to?(method) }
80
80
  end
81
81
 
82
82
  def add_to_cached_keys_list(key)
data/rails/init.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  require 'cache_advance'
2
- require 'cache_advance/active_record_observer'
2
+ require 'cache_advance/active_record_sweeper'
3
3
  require 'cache_advance/rails_cache'
4
4
  require 'config/caches'
5
5
  require 'dispatcher'
6
6
 
7
+ # This is the helper method that can be used in rails views/controllers/helpers.
7
8
  ActionController::Base.helper do
8
9
  def cache_it(cache, options={}, &block)
9
10
  CacheAdvance::Caches.apply(cache, request, options) do
@@ -12,13 +13,19 @@ ActionController::Base.helper do
12
13
  end
13
14
  end
14
15
 
16
+ # This will get called after the standard rails environment is initialized.
15
17
  config.after_initialize do
16
- CacheAdvance::Caches.observer_type = CacheAdvance::ActiveRecordObserver
18
+
19
+ # Setup the sweeper_type and cache as appropriate for Rails.
20
+ CacheAdvance::Caches.sweeper_type = CacheAdvance::ActiveRecordSweeper
17
21
  CacheAdvance::Caches.cache = CacheAdvance::RailsCache.new
18
22
 
23
+ # This hooks the sweepers into the observer system and adds it to the list.
19
24
  CacheAdvance::Caches.create_sweepers
20
- ActiveRecord::Base.observers << CacheAdvance::ActiveRecordObserver
25
+ ActiveRecord::Base.observers << CacheAdvance::ActiveRecordSweeper
21
26
 
27
+ # In development mode, the models we observe get reloaded with each request. Using
28
+ # this hook allows us to reload the observer relationships each time as well.
22
29
  ActionController::Dispatcher.to_prepare(:cache_advance_reload) do
23
30
  CacheAdvance::ActiveRecordSweeper.instance.reload_sweeper
24
31
  end
@@ -0,0 +1,15 @@
1
+ module CacheAdvance
2
+ class CacheMock
3
+ def read(key)
4
+ 'abc'
5
+ end
6
+
7
+ def write(key, value)
8
+
9
+ end
10
+
11
+ def delete(key)
12
+
13
+ end
14
+ end
15
+ end
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
3
  class Plugin; end
4
4
 
5
- require 'cache_advance/active_record_observer'
5
+ require 'cache_advance/active_record_sweeper'
6
6
 
7
7
  class CacheSetTest < Test::Unit::TestCase
8
8
  def setup
@@ -30,10 +30,10 @@ class CacheSetTest < Test::Unit::TestCase
30
30
  end
31
31
 
32
32
  def test_should_pass_expiration_types_to_the_sweeper
33
- @cache_set.observer_type = CacheAdvance::ActiveRecordObserver
33
+ @cache_set.sweeper_type = CacheAdvance::ActiveRecordSweeper
34
34
  @cache_set.add_named_cache(:kewl, { :expiration_types => [:publication, :article] })
35
35
  @cache_set.add_named_cache(:howza, { :expiration_types => [:publication] })
36
- CacheAdvance::ActiveRecordObserver.expects(:initialize_observed).with([:publication, :article])
36
+ CacheAdvance::ActiveRecordSweeper.expects(:initialize_observed).with([:publication, :article])
37
37
  @cache_set.create_sweepers
38
38
  end
39
39
  end
@@ -1,7 +1,126 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
3
  class NamedCacheTest < Test::Unit::TestCase
4
- def test_fake
5
- assert true
4
+
5
+ def setup
6
+ @request = mock
7
+ end
8
+
9
+ def test_key_for_in_basic_case
10
+ create_named_cache
11
+ assert_equal 'test_cache', @named_cache.key_for(@request)
12
+ assert_equal 'test_cachesuf', @named_cache.key_for(@request, 'suf')
13
+ end
14
+
15
+ def test_key_with_qualifiers
16
+
17
+ end
18
+
19
+ protected
20
+
21
+ def create_named_cache(options={})
22
+ @name = options[:name] || 'test_cache'
23
+ @params = {}
24
+ @cache_set = CacheAdvance::CacheSet.new
25
+ @cache = CacheAdvance::CacheMock.new
26
+ @named_cache = CacheAdvance::NamedCache.new(@name, @params, @cache_set, @cache)
6
27
  end
7
28
  end
29
+
30
+
31
+ # module CacheAdvance
32
+ # class NamedCache
33
+ # STORED_KEY = 'STORED_CACHES'
34
+ #
35
+ # def initialize(name, params, configuration, cache)
36
+ # @name = name.to_s
37
+ # @params = params
38
+ # @configuration = configuration
39
+ # @cache = cache
40
+ # end
41
+ #
42
+ # def key_for(request, suffix='')
43
+ # key = @name.dup
44
+ # key << suffix.to_s
45
+ #
46
+ # qualifiers.each do |q|
47
+ # if (qualifier = @configuration.qualifiers[q])
48
+ # this_one = qualifier.call(request)
49
+ # key << this_one.to_s unless this_one.nil?
50
+ # end
51
+ # end if qualifiers
52
+ # key
53
+ # end
54
+ #
55
+ # def value_for(request, options, &block)
56
+ # key = key_for(request, options[:key])
57
+ #
58
+ # if (cache = @cache.read(key))
59
+ # call_plugins('after_read', key, request)
60
+ # return cache
61
+ # end
62
+ #
63
+ # call_plugins('before_write', key, request)
64
+ # result = block.call
65
+ # @cache.write(key, result, rails_options)
66
+ # call_plugins('after_write', key, request)
67
+ #
68
+ # add_to_cached_keys_list(key)
69
+ #
70
+ # result
71
+ # end
72
+ #
73
+ # def rails_options
74
+ # options = {}
75
+ # options[:expires_in] = expiration_time if expiration_time
76
+ # options
77
+ # end
78
+ #
79
+ # def expire_for(type)
80
+ # if expiration_types.include?(type)
81
+ # expire_all
82
+ # end
83
+ # end
84
+ #
85
+ # def expire_all
86
+ # if (data = @cache.read(@name + STORED_KEY))
87
+ # data = Array(Marshal.load(data))
88
+ # data.each { |key| @cache.delete(key) }
89
+ # else
90
+ # @cache.delete(@name)
91
+ # end
92
+ # end
93
+ #
94
+ # def expiration_types
95
+ # Array(@params[:expiration_types])
96
+ # end
97
+ #
98
+ # def expiration_time
99
+ # @params[:expiration_time]
100
+ # end
101
+ #
102
+ # def qualifiers
103
+ # Array(@params[:qualifiers])
104
+ # end
105
+ #
106
+ # protected
107
+ #
108
+ # def call_plugins(method, key, request)
109
+ # @configuration.plugins.each { |p| p.send(method, @name, key, request) if p.respond_to?(method) }
110
+ # end
111
+ #
112
+ # def add_to_cached_keys_list(key)
113
+ # unless expiration_types.blank? || key == @name
114
+ # if (data = @cache.read(@name + STORED_KEY))
115
+ # data = Array(Marshal.load(data))
116
+ # else
117
+ # data = []
118
+ # end
119
+ # unless data.include?(key)
120
+ # @cache.write(@name + STORED_KEY, Marshal.dump(data << key))
121
+ # end
122
+ # end
123
+ # end
124
+ # end
125
+ # end
126
+
data/test/test_helper.rb CHANGED
@@ -7,3 +7,4 @@ require 'ruby-debug'
7
7
 
8
8
  require 'cache_advance'
9
9
  require 'mocha'
10
+ require 'cache_mock'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aub-cache_advance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aubrey Holland
@@ -33,6 +33,7 @@ files:
33
33
  - Rakefile
34
34
  - README.textile
35
35
  - test/active_record_sweeper_test.rb
36
+ - test/cache_mock.rb
36
37
  - test/cache_set_test.rb
37
38
  - test/mapper_test.rb
38
39
  - test/named_cache_test.rb