merb-cache 0.9.3 → 0.9.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.
data/README CHANGED
@@ -89,7 +89,7 @@ Implemented cache stores:
89
89
  #:store => "memcache",
90
90
  #:host => "127.0.0.1:11211",
91
91
  #:namespace => "merb_cache",
92
- #:no_tracking => "false",
92
+ #:no_tracking => false,
93
93
 
94
94
  #:store => "memory",
95
95
  # store could be: file, memcache, memory, database, dummy, ...
data/Rakefile CHANGED
@@ -1,80 +1,58 @@
1
1
  require 'rubygems'
2
- require "rake/rdoctask"
3
2
  require 'rake/gempackagetask'
4
- require "spec/rake/spectask"
3
+ require "extlib"
4
+ require 'merb-core/tasks/merb_rake_helper'
5
5
 
6
- PLUGIN = "merb-cache"
7
- NAME = "merb-cache"
8
- MERB_CACHE_VERSION = Merb::MORE_VERSION rescue "0.9.3"
9
- VERSION = "0.9.3"
10
- AUTHOR = "Alex Boussinet"
11
- EMAIL = "alex.boussinet@gmail.com"
12
- HOMEPAGE = "http://www.merbivore.com"
13
- SUMMARY = "Merb plugin that provides caching (page, action, fragment, object)"
6
+ ##############################################################################
7
+ # Package && release
8
+ ##############################################################################
9
+ RUBY_FORGE_PROJECT = "merb"
10
+ PROJECT_URL = "http://merbivore.com"
11
+ PROJECT_SUMMARY = "Merb plugin that provides caching (page, action, fragment, object)"
12
+ PROJECT_DESCRIPTION = PROJECT_SUMMARY
13
+
14
+ GEM_AUTHOR = "Alex Boussinet"
15
+ GEM_EMAIL = "alex.boussinet@gmail.com"
16
+
17
+ GEM_NAME = "merb-cache"
18
+ PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
19
+ GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.4") + PKG_BUILD
20
+
21
+ RELEASE_NAME = "REL #{GEM_VERSION}"
22
+
23
+ require "extlib/tasks/release"
14
24
 
15
25
  spec = Gem::Specification.new do |s|
16
- s.name = NAME
17
- s.version = MERB_CACHE_VERSION
26
+ s.rubyforge_project = RUBY_FORGE_PROJECT
27
+ s.name = GEM_NAME
28
+ s.version = GEM_VERSION
18
29
  s.platform = Gem::Platform::RUBY
19
30
  s.has_rdoc = true
20
31
  s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
21
- s.summary = SUMMARY
22
- s.description = s.summary
23
- s.author = AUTHOR
24
- s.email = EMAIL
25
- s.homepage = HOMEPAGE
26
- s.add_dependency('merb-core', '>= 0.9.3')
32
+ s.summary = PROJECT_SUMMARY
33
+ s.description = PROJECT_DESCRIPTION
34
+ s.author = GEM_AUTHOR
35
+ s.email = GEM_EMAIL
36
+ s.homepage = PROJECT_URL
37
+ s.add_dependency('merb-core', '>= 0.9.4')
27
38
  s.require_path = 'lib'
28
- s.autorequire = PLUGIN
29
39
  s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec}/**/*")
30
-
31
- # rdoc
32
- s.has_rdoc = true
33
- s.extra_rdoc_files = %w( README LICENSE TODO )
34
- end
35
-
36
- namespace :specs do
37
- ["file", "memory", "memcache", "sequel", "datamapper", "activerecord"].each do |store|
38
- desc "Run spec with the \"#{store}\" cache store"
39
- task "#{store}" do
40
- cwd = Dir.getwd
41
- Dir.chdir(File.dirname(__FILE__) + "/spec")
42
- ENV["STORE"] = store
43
- system("spec --format specdoc --colour merb-cache_spec.rb")
44
- Dir.chdir(cwd)
45
- end
46
- end
47
- end
48
-
49
- namespace :doc do
50
- Rake::RDocTask.new do |rdoc|
51
- files = ["README", "LICENSE", "lib/**/*.rb"]
52
- rdoc.rdoc_files.add(files)
53
- rdoc.main = "README"
54
- rdoc.title = "merb-cache docs"
55
- if File.file?("../../merb-core/tools/allison-2.0.2/lib/allison.rb")
56
- rdoc.template = "../../merb-core/tools/allison-2.0.2/lib/allison.rb"
57
- end
58
- rdoc.rdoc_dir = "doc/rdoc"
59
- rdoc.options << "--line-numbers" << "--inline-source"
60
- end
61
40
  end
62
41
 
63
42
  Rake::GemPackageTask.new(spec) do |pkg|
64
43
  pkg.gem_spec = spec
65
44
  end
66
45
 
67
- install_home = ENV['GEM_HOME'] ? "-i #{ENV['GEM_HOME']}" : ""
68
-
46
+ desc "Install the gem"
69
47
  task :install => [:package] do
70
- sh %{sudo gem install #{install_home} pkg/#{NAME}-#{MERB_CACHE_VERSION} --no-update-sources}
48
+ sh %{#{sudo} gem install #{install_home} pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}
71
49
  end
72
50
 
73
51
  namespace :jruby do
74
52
 
75
53
  desc "Run :package and install the resulting .gem with jruby"
76
54
  task :install => :package do
77
- sh %{#{SUDO} jruby -S gem install #{install_home} pkg/#{NAME}-#{Merb::VERSION}.gem --no-rdoc --no-ri}
55
+ sh %{#{sudo} jruby -S gem install #{install_home} pkg/#{GEM_NAME}-#{GEM_VERSION}.gem --no-rdoc --no-ri}
78
56
  end
79
-
57
+
80
58
  end
@@ -4,35 +4,47 @@ class Merb::Cache
4
4
  end
5
5
 
6
6
  module Merb::Cache::ControllerClassMethods
7
- # Mixed in Merb::Controller. Provides methods related to action caching
7
+ # Mixed in Merb::Controller. Provides methods related to action caching.
8
8
 
9
- # Register the action for action caching
9
+ # Registers an action for action caching via before and after filters.
10
10
  #
11
11
  # ==== Parameters
12
- # action<Symbol>:: The name of the action to register
13
- # from_now<~minutes>::
14
- # The number of minutes (from now) the cache should persist
12
+ # action<Symbol>:: The name of the action to register.
13
+ # from_now<~minutes>:: The number of minutes (from now) the cache should persist.
14
+ # opts<Hash>::
15
+ # Filter options (see <tt>Filter Options</tt> in <tt>Merb::AbstractController</tt>). The filters created apply :only
16
+ # to specified <tt>action</tt>.
15
17
  #
16
18
  # ==== Examples
17
19
  # cache_action :mostly_static
18
20
  # cache_action :barely_dynamic, 10
19
- def cache_action(action, from_now = nil)
20
- cache_actions([action, from_now])
21
+ # cache_action :list, :if => Proc.new { |controller| !controller.params[:id].empty? }
22
+ # cache_action :show, :unless => proc { |controller| !controller.params[:id].empty? }
23
+ def cache_action(action, from_now = nil, opts = {})
24
+ cache_actions([action, from_now, opts])
21
25
  end
22
26
 
23
- # Register actions for action caching (before and after filters)
27
+ # Register multiple actions for action caching via before and after filters.
24
28
  #
25
29
  # ==== Parameter
26
- # actions<Symbol,Array[Symbol,~minutes]>:: See #cache_action
30
+ # actions<Symbol,Array[Symbol,~minutes],Hash>:: See #cache_action.
27
31
  #
28
32
  # ==== Example
29
- # cache_actions :mostly_static, [:barely_dynamic, 10]
33
+ # cache_actions(
34
+ # :mostly_static,
35
+ # [:barely_dynamic, 10],
36
+ # [:conditional, { :if => proc { |controller| controller.params[:id].empty? } }]
37
+ # )
30
38
  def cache_actions(*actions)
31
- if actions.any? && !Merb::Cache.cached_actions.key?(controller_name)
32
- before(:cache_action_before)
33
- after(:cache_action_after)
34
- end
35
- actions.each do |action, from_now|
39
+ actions.each do |action, from_now, opts|
40
+ from_now, opts = nil, from_now if Hash === from_now
41
+ opts ||= {}
42
+
43
+ before("cache_#{action}_before", opts.merge(:only => action))
44
+ after("cache_#{action}_after", opts.merge(:only => action))
45
+ alias_method "cache_#{action}_before", :cache_action_before
46
+ alias_method "cache_#{action}_after", :cache_action_after
47
+
36
48
  _actions = Merb::Cache.cached_actions[controller_name] ||= {}
37
49
  _actions[action] = from_now
38
50
  end
@@ -33,7 +33,7 @@ module Merb::Cache::ControllerClassMethods
33
33
  before(:cache_page_before)
34
34
  after(:cache_page_after)
35
35
  end
36
- pages.each do |action, from_now|
36
+ pages.each do |action, from_now|
37
37
  _pages = Merb::Cache.cached_pages[controller_name] ||= {}
38
38
  _pages[action] = [from_now, 0]
39
39
  end
@@ -68,9 +68,17 @@ module Merb::Cache::ControllerInstanceMethods
68
68
  # ==== Parameter
69
69
  # options<String,Hash>:: The options that will be passed to #expire_key_for
70
70
  #
71
- # ==== Examples
71
+ # ==== Examples (See Merb::Cache#expire_key_for for more options)
72
+ # # will expire path/to/page/cache/news/show/1.html
73
+ # expire_page(:key => url(:news,News.find(1)))
74
+ #
75
+ # # will expire path/to/page/cache/news/show.html
72
76
  # expire_page(:action => 'show', :controller => 'news')
77
+ #
78
+ # # will expire path/to/page/cache/news/show*
73
79
  # expire_page(:action => 'show', :match => true)
80
+ #
81
+ # # will expire path/to/page/cache/news/show.js
74
82
  # expire_page(:action => 'show', :extension => 'js')
75
83
  def expire_page(options)
76
84
  config_dir = Merb::Controller._cache.config[:cache_html_directory]
@@ -121,7 +129,8 @@ module Merb::Cache::ControllerInstanceMethods
121
129
  return unless pages && pages.key?(action)
122
130
  path = request.path.chomp("/")
123
131
  path = "index" if path.empty?
124
- ext = "." + (params[:format].empty? ? DEFAULT_PAGE_EXTENSION : params[:format])
132
+ no_format = params[:format].nil? || params[:format].empty?
133
+ ext = "." + (no_format ? DEFAULT_PAGE_EXTENSION : params[:format])
125
134
  ext = nil if File.extname(path) == ext
126
135
  cache_file = Merb::Controller._cache.config[:cache_html_directory] / "#{path}#{ext}"
127
136
  if data
@@ -136,7 +145,7 @@ module Merb::Cache::ControllerInstanceMethods
136
145
  if File.file?(cache_file)
137
146
  _data = cache_read_page(cache_file)
138
147
  _expire_in, _expire_at = pages[action]
139
- if _expire_in.nil? || Time.now < _expire_at
148
+ if _expire_in.nil? || Time.now.to_i < _expire_at.to_i
140
149
  Merb.logger.info("cache: hit (#{path})")
141
150
  throw(:halt, _data)
142
151
  end
@@ -2,11 +2,12 @@ module Merb::Cache::DatabaseStore::DataMapper
2
2
  # Module that provides DataMapper support for the database backend
3
3
 
4
4
  # The cache model
5
- class CacheModel < DataMapper::Base
6
- set_table_name Merb::Controller._cache.config[:table_name]
7
- property :ckey, :string, :length => 255, :lazy => false, :key => true
8
- property :data, :text, :lazy => false
9
- property :expire, :datetime, :default => nil
5
+ class CacheModel
6
+ include DataMapper::Resource
7
+ storage_names[:default] = Merb::Controller._cache.config[:table_name]
8
+ property :ckey, String, :length => 255, :lazy => false, :key => true
9
+ property :data, Text, :lazy => false
10
+ property :expire, DateTime, :default => nil
10
11
 
11
12
  # Fetch data from the database using the specified key
12
13
  # The entry is deleted if it has expired
@@ -18,9 +19,9 @@ module Merb::Cache::DatabaseStore::DataMapper
18
19
  # data<String, NilClass>::
19
20
  # nil is returned whether the entry expired or was not found
20
21
  def self.cache_get(key)
21
- if entry = self.first(key)
22
+ if entry = self.get(key)
22
23
  return entry.data if entry.expire.nil? || DateTime.now < entry.expire
23
- entry.destroy!
24
+ entry.destroy
24
25
  end
25
26
  nil
26
27
  end
@@ -38,9 +39,9 @@ module Merb::Cache::DatabaseStore::DataMapper
38
39
  # - when set to false, force creation of the cache entry
39
40
  def self.cache_set(key, data, expire = nil, get = true)
40
41
  attributes = {:ckey => key, :data => data,
41
- :expire => expire.nil? ? nil : expire.to_s_db }
42
+ :expire => expire }
42
43
  if get
43
- entry = self.first(key)
44
+ entry = self.get(key)
44
45
  entry.nil? ? self.create(attributes) : entry.update_attributes(attributes)
45
46
  else
46
47
  self.create(attributes)
@@ -53,8 +54,8 @@ module Merb::Cache::DatabaseStore::DataMapper
53
54
  # ==== Parameter
54
55
  # key<Sting>:: The key identifying the cache entry
55
56
  def self.expire(key)
56
- entry = self.first(key)
57
- entry.destroy! unless entry.nil?
57
+ entry = self.get(key)
58
+ entry.destroy unless entry.nil?
58
59
  end
59
60
 
60
61
  # Expire the cache entries matching the given key
@@ -62,18 +63,17 @@ module Merb::Cache::DatabaseStore::DataMapper
62
63
  # ==== Parameter
63
64
  # key<Sting>:: The key matching the cache entries
64
65
  def self.expire_match(key)
65
- #FIXME
66
- database.execute("DELETE FROM #{self.table.name} WHERE ckey LIKE '#{key}%'")
66
+ self.all(:ckey.like => "#{key}%").destroy!
67
67
  end
68
68
 
69
69
  # Expire all the cache entries
70
70
  def self.expire_all
71
- self.truncate!
71
+ self.all.destroy!
72
72
  end
73
73
 
74
74
  # Perform auto-migration in case the table is unknown in the database
75
75
  def self.check_table
76
- self.auto_migrate! unless self.table.exists?
76
+ self.auto_upgrade!
77
77
  end
78
78
  end
79
79
  end
@@ -6,7 +6,7 @@ class Merb::Cache::DatabaseStore
6
6
  prepare
7
7
  end
8
8
 
9
- class OrmNotFound < Exception #:nodoc:
9
+ class OrmNotFound < Exception #
10
10
  def initialize
11
11
  super("No valid ORM found (did you specify use_orm in init.rb?)")
12
12
  end
@@ -1,3 +1,4 @@
1
+ require 'fileutils'
1
2
  class Merb::Cache::FileStore
2
3
  # Provides the file cache store for merb-cache
3
4
 
@@ -8,7 +9,7 @@ class Merb::Cache::FileStore
8
9
  prepare
9
10
  end
10
11
 
11
- class NotAccessible < Exception #:nodoc:
12
+ class NotAccessible < Exception #
12
13
  def initialize(message)
13
14
  super("Cache directories are not readable/writeable (#{message})")
14
15
  end
@@ -17,6 +18,7 @@ class Merb::Cache::FileStore
17
18
  # This method is there to ensure minimal requirements are met
18
19
  # (directories are accessible, table exists, connected to server, ...)
19
20
  def prepare
21
+ FileUtils.mkdir_p @config[:cache_directory]
20
22
  unless File.readable?(@config[:cache_directory]) &&
21
23
  File.writable?(@config[:cache_directory])
22
24
  raise NotAccessible, @config[:cache_directory]
@@ -6,13 +6,13 @@ class Merb::Cache::MemcacheStore
6
6
  prepare
7
7
  end
8
8
 
9
- class NotReady < Exception #:nodoc:
9
+ class NotReady < Exception
10
10
  def initialize
11
11
  super("Memcache server is not ready")
12
12
  end
13
13
  end
14
14
 
15
- class NotDefined < Exception #:nodoc:
15
+ class NotDefined < Exception
16
16
  def initialize
17
17
  super("Memcache is not defined (require it in init.rb)")
18
18
  end
@@ -24,7 +24,7 @@ class Merb::Cache::MemcacheStore
24
24
  namespace = @config[:namespace] || 'merb-cache'
25
25
  host = @config[:host] || '127.0.0.1:11211'
26
26
  @memcache = MemCache.new(host, {:namespace => namespace})
27
- @tracking_key = "_#{namespace}_keys" unless @config[:no_tracking]
27
+ @tracking_key = "_#{namespace}_keys" unless @config[:no_tracking] == true
28
28
  raise NotReady unless @memcache.active?
29
29
  true
30
30
  rescue NameError
@@ -39,7 +39,7 @@ class Merb::Cache::MemcacheStore
39
39
  # ==== Returns
40
40
  # true if the cache entry exists, false otherwise
41
41
  def cached?(key)
42
- not @memcache.get(key).nil?
42
+ not cache_get(key).nil?
43
43
  end
44
44
 
45
45
  # Capture or restore the data in cache.
@@ -62,11 +62,10 @@ class Merb::Cache::MemcacheStore
62
62
  # It uses the capture_#{engine} and concat_#{engine} methods to do so.
63
63
  # The captured data are then marshalled and stored.
64
64
  def cache(_controller, key, from_now = nil, &block)
65
- _data = @memcache.get(key)
65
+ _data = cache_get(key)
66
66
  if _data.nil?
67
- _expire = from_now ? from_now.minutes.from_now.to_i : 0
68
67
  _data = _controller.send(:capture, &block)
69
- @memcache.set(key, _data, _expire)
68
+ cache_set(key, _data, from_now)
70
69
  end
71
70
  _controller.send(:concat, _data, block.binding)
72
71
  true
@@ -83,7 +82,7 @@ class Merb::Cache::MemcacheStore
83
82
  _expire = from_now ? from_now.minutes.from_now.to_i : 0
84
83
  @memcache.set(key, data, _expire)
85
84
  cache_start_tracking(key)
86
- Merb.logger.info("cache: set (#{key})")
85
+ Merb.logger.info!("cache: set (#{key})")
87
86
  true
88
87
  end
89
88
 
@@ -98,7 +97,11 @@ class Merb::Cache::MemcacheStore
98
97
  # nil is returned whether the entry expired or was not found
99
98
  def cache_get(key)
100
99
  data = @memcache.get(key)
101
- Merb.logger.info("cache: #{data.nil? ? "miss" : "hit"} (#{key})")
100
+ if data.nil?
101
+ Merb.logger.info!("cache: miss (#{key})")
102
+ else
103
+ Merb.logger.debug!("cache: hit (#{key})")
104
+ end
102
105
  data
103
106
  end
104
107
 
@@ -109,7 +112,7 @@ class Merb::Cache::MemcacheStore
109
112
  def expire(key)
110
113
  @memcache.delete(key)
111
114
  cache_stop_tracking(key)
112
- Merb.logger.info("cache: expired (#{key})")
115
+ Merb.logger.info!("cache: expired (#{key})")
113
116
  true
114
117
  end
115
118
 
@@ -122,6 +125,7 @@ class Merb::Cache::MemcacheStore
122
125
  # In memcache this requires to keep track of all keys (on by default).
123
126
  # If you don't need this, set :no_tracking => true in the config.
124
127
  def expire_match(key)
128
+ Merb.logger.debug!("cache: attempting to expire #{key}")
125
129
  if @tracking_key
126
130
  for _key in get_tracked_keys
127
131
  expire(_key) if /#{key}/ =~ _key
@@ -5,7 +5,7 @@ require "merb-cache/cache-fragment"
5
5
  class Merb::Cache
6
6
  attr_reader :config, :store
7
7
 
8
- class StoreNotFound < Exception #:nodoc:
8
+ class StoreNotFound < Exception
9
9
  def initialize(cache_store)
10
10
  super("cache_store (#{cache_store}) not found (not implemented?)")
11
11
  end
@@ -39,7 +39,7 @@ class Merb::Cache
39
39
  # If the cache_store mentionned in the config is unknown
40
40
  def start
41
41
  @config = DEFAULT_CONFIG.merge(Merb::Plugins.config[:merb_cache] || {})
42
- if @config[:disable] == true || Merb.environment == @config[:disable]
42
+ if @config[:disable] == true || Merb.environment.to_s == @config[:disable].to_s
43
43
  config[:disable_page_caching] = true
44
44
  config[:store] = "dummy"
45
45
  end
@@ -146,13 +146,13 @@ class Merb::Cache
146
146
  end
147
147
  end
148
148
 
149
- module Merb #:nodoc:
150
- class Controller #:nodoc:
149
+ module Merb
150
+ class Controller
151
151
  cattr_reader :_cache
152
152
  @@_cache = Merb::Cache.new
153
153
  # extends Merb::Controller with new instance methods
154
154
  include Merb::Cache::ControllerInstanceMethods
155
- class << self #:nodoc:
155
+ class << self
156
156
  # extends Merb::Controller with new class methods
157
157
  include Merb::Cache::ControllerClassMethods
158
158
  end
data/lib/merb-cache.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  if defined?(Merb::Plugins)
2
2
  Merb::Plugins.add_rakefiles "merb-cache/merbtasks"
3
3
  unless 1.respond_to? :minutes
4
- class Numeric #:nodoc:
4
+ class Numeric
5
5
  def minutes; self * 60; end
6
6
  def from_now(now = Time.now); now + self; end
7
7
  end
data/spec/controller.rb CHANGED
@@ -3,13 +3,19 @@ class CacheController < Merb::Controller
3
3
 
4
4
  cache_action :action3
5
5
  cache_action :action4, 0.05
6
- # or cache_actions :action3, [:action4, 0.05]
7
6
 
8
7
  cache_page :action5
9
8
  cache_page :action6, 0.05
10
9
  # or cache_pages :action5, [:action6, 0.05]
11
10
  cache_page :action7
12
11
 
12
+ cache_action :action8, 0.05, :if => proc {|controller| !controller.params[:id].empty?}
13
+ cache_action :action9, 0.05, :unless => proc {|controller| controller.params[:id].empty?}
14
+ cache_action :action10, :if => :non_empty_id?
15
+ cache_action :action11, :unless => :empty_id?
16
+
17
+ cache_actions :cache_actions_1, [:cache_actions_2, 0.05], [:cache_actions_3, { :if => :empty_id? }]
18
+
13
19
  def action1
14
20
  render
15
21
  end
@@ -52,7 +58,44 @@ class CacheController < Merb::Controller
52
58
  end
53
59
  end
54
60
 
61
+ def action8
62
+ "test action8"
63
+ end
64
+
65
+ def action9
66
+ "test action9"
67
+ end
68
+
69
+ def action10
70
+ "test action10"
71
+ end
72
+
73
+ def action11
74
+ "test action11"
75
+ end
76
+
77
+ def cache_actions_1
78
+ 'test cache_actions_1'
79
+ end
80
+
81
+ def cache_actions_2
82
+ 'test cache_actions_2'
83
+ end
84
+
85
+ def cache_actions_3
86
+ 'test cache_actions_3'
87
+ end
88
+
55
89
  def index
56
90
  "test index"
57
91
  end
92
+
93
+ private
94
+ def empty_id?
95
+ params[:id].empty?
96
+ end
97
+
98
+ def non_empty_id?
99
+ !empty_id?
100
+ end
58
101
  end
@@ -0,0 +1,433 @@
1
+ Mon, 21 Jul 2008 23:29:20 GMT ~ info ~ Logfile created
2
+ ~ Using memcache cache
3
+ ~ Not Using Sessions
4
+ ~ Using memory cache
5
+ ~ Not Using Sessions
6
+ ~ cache: expired all
7
+ ~ {:after_filters_time=>2.0e-05, :before_filters_time=>4.0e-05, :action_time=>0.000221}
8
+ ~ {:after_filters_time=>4.0e-05, :before_filters_time=>2.5e-05, :action_time=>0.000792}
9
+ ~ cache: hit (key1)
10
+ ~ {:after_filters_time=>2.2e-05, :before_filters_time=>2.5e-05, :action_time=>0.000636}
11
+ ~ cache: hit (key11)
12
+ ~ {:after_filters_time=>4.5e-05, :before_filters_time=>9.4e-05, :action_time=>0.001524}
13
+ ~ cache: hit (key11)
14
+ ~ cache: expired (key11)
15
+ ~ cache: miss (key11)
16
+ ~ {:after_filters_time=>3.8e-05, :before_filters_time=>8.8e-05, :action_time=>0.001444}
17
+ ~ cache: expired (key1)
18
+ ~ cache: miss (key1)
19
+ ~ {:after_filters_time=>3.1e-05, :before_filters_time=>4.0e-05, :action_time=>0.00092}
20
+ ~ cache: miss (unknown_key)
21
+ ~ cache: set (test1)
22
+ ~ cache: hit (test1)
23
+ ~ cache: set (test2)
24
+ ~ cache: hit (test2)
25
+ ~ cache: set (test3)
26
+ ~ cache: hit (test3)
27
+ ~ cache: expired matching (test)
28
+ ~ cache: miss (test1)
29
+ ~ cache: miss (test2)
30
+ ~ cache: miss (test3)
31
+ ~ cache: set (timed_key)
32
+ ~ cache: hit (timed_key)
33
+ ~ cache: miss (timed_key)
34
+ ~ cache: set (test1)
35
+ ~ cache: expired (test1)
36
+ ~ cache: miss (test1)
37
+ ~ cache: set (test2/id1)
38
+ ~ cache: expired (test2/id1)
39
+ ~ cache: miss (test2/id1)
40
+ ~ cache: set (test3)
41
+ ~ cache: expired (test3)
42
+ ~ cache: miss (test3)
43
+ ~ cache: set (test4/id1)
44
+ ~ cache: expired matching (test4/id1)
45
+ ~ cache: miss (test4/id1/id2)
46
+ ~ cache: expired all
47
+ ~ cache: miss (key1)
48
+ ~ cache: set (key1)
49
+ ~ cache: hit (key1)
50
+ ~ cache: miss (/cache_controller/action3)
51
+ ~ cache: set (/cache_controller/action3)
52
+ ~ {:after_filters_time=>7.9e-05, :before_filters_time=>0.000111, :action_time=>0.000218}
53
+ ~ cache: hit (/cache_controller/action3)
54
+ ~ cache: expired (/cache_controller/action3)
55
+ ~ cache: miss (/cache_controller/action3)
56
+ ~ cache: miss (/cache_controller/action3/abc/456/ghi)
57
+ ~ cache: set (/cache_controller/action3/abc/456/ghi)
58
+ ~ {:after_filters_time=>6.9e-05, :before_filters_time=>7.9e-05, :action_time=>0.000163}
59
+ ~ cache: hit (/cache_controller/action3/abc/456/ghi)
60
+ ~ cache: hit (/cache_controller/action3/abc/456/ghi)
61
+ ~ {:after_filters_time=>3.4e-05, :action_time=>0.00011}
62
+ ~ cache: expired (/cache_controller/action3/abc/456/ghi)
63
+ ~ cache: miss (/cache_controller/action3/abc/456/ghi)
64
+ ~ cache: miss (/cache_controller/action4)
65
+ ~ cache: set (/cache_controller/action4)
66
+ ~ {:after_filters_time=>7.6e-05, :before_filters_time=>7.9e-05, :action_time=>0.00017}
67
+ ~ cache: hit (/cache_controller/action4)
68
+ ~ cache: miss (/cache_controller/action4)
69
+ ~ cache: expired matching (/cache_controller/action4)
70
+ ~ cache: miss (/cache_controller/action4/path/to/nowhere)
71
+ ~ cache: set (/cache_controller/action4/path/to/nowhere)
72
+ ~ {:after_filters_time=>9.5e-05, :before_filters_time=>0.000108, :action_time=>0.000227}
73
+ ~ cache: miss (/cache_controller/action4/path/to/nowhere)
74
+ ~ cache: miss (/cache_controller/action4)
75
+ ~ cache: set (/cache_controller/action4)
76
+ ~ {:after_filters_time=>9.2e-05, :before_filters_time=>0.000112, :action_time=>0.000225}
77
+ ~ cache: expired (/cache_controller/action4)
78
+ ~ cache: miss (/cache_controller/action4)
79
+ ~ cache: set (/cache_controller/action4)
80
+ ~ {:after_filters_time=>8.1e-05, :before_filters_time=>8.8e-05, :action_time=>0.000184}
81
+ ~ cache: expired matching (/cache_control)
82
+ ~ cache: miss (/cache_controller/action4)
83
+ ~ cache: set (/cache_controller/action4)
84
+ ~ {:after_filters_time=>7.2e-05, :before_filters_time=>7.8e-05, :action_time=>0.000164}
85
+ ~ cache: expired (/cache_controller/action4)
86
+ ~ cache: miss (/cache_controller/action4/id1/id2)
87
+ ~ cache: set (/cache_controller/action4/id1/id2)
88
+ ~ {:after_filters_time=>7.3e-05, :before_filters_time=>7.8e-05, :action_time=>0.000164}
89
+ ~ cache: expired (/cache_controller/action4/id1/id2)
90
+ ~ cache: miss (/cache_controller/action4/id1/id2)
91
+ ~ cache: set (/cache_controller/action4/id1/id2)
92
+ ~ {:after_filters_time=>7.2e-05, :before_filters_time=>7.8e-05, :action_time=>0.000164}
93
+ ~ cache: expired matching (/cache_controller/action4)
94
+ ~ cache: miss (/cache_controller/action4)
95
+ ~ cache: set (/cache_controller/action4)
96
+ ~ {:after_filters_time=>7.3e-05, :before_filters_time=>7.7e-05, :action_time=>0.000164}
97
+ ~ cache: expired (/cache_controller/action4)
98
+ ~ cache: miss (/cache_controller/action4/id1/id2)
99
+ ~ cache: set (/cache_controller/action4/id1/id2)
100
+ ~ {:after_filters_time=>7.2e-05, :before_filters_time=>7.7e-05, :action_time=>0.000163}
101
+ ~ cache: expired matching (/cache_controller/action4/id1)
102
+ ~ cache: miss (/cache_controller/action4/id1/id2)
103
+ ~ cache: set (/cache_controller/action4/id1/id2)
104
+ ~ {:after_filters_time=>7.3e-05, :before_filters_time=>9.1e-05, :action_time=>0.000178}
105
+ ~ cache: expired matching (/cache_controller/action4)
106
+ ~ cache: miss (/cache_controller/action4/id1/id2)
107
+ ~ cache: set (/cache_controller/action4/id1/id2)
108
+ ~ {:after_filters_time=>7.1e-05, :before_filters_time=>7.7e-05, :action_time=>0.000164}
109
+ ~ cache: expired matching (/cache_controller/action4/id1)
110
+ ~ cache: miss (/cache_controller/action4/id1/id2)
111
+ ~ cache: set (/cache_controller/action4/id1/id2)
112
+ ~ {:after_filters_time=>7.3e-05, :before_filters_time=>9.1e-05, :action_time=>0.000178}
113
+ ~ cache: expired (/cache_controller/action4/id1/id2)
114
+ ~ cache: miss (/cache_controller/action4)
115
+ ~ cache: set (/cache_controller/action4)
116
+ ~ {:after_filters_time=>7.2e-05, :before_filters_time=>9.1e-05, :action_time=>0.000177}
117
+ ~ cache: expired (/cache_controller/action4)
118
+ ~ cache: miss (/cache_controller/action4/id1/id2)
119
+ ~ cache: set (/cache_controller/action4/id1/id2)
120
+ ~ {:after_filters_time=>6.5e-05, :before_filters_time=>8.3e-05, :action_time=>0.000161}
121
+ ~ cache: expired (/cache_controller/action4/id1/id2)
122
+ ~ cache: miss (/cache_controller/action4/id1/id2)
123
+ ~ cache: set (/cache_controller/action4/id1/id2)
124
+ ~ {:after_filters_time=>6.5e-05, :before_filters_time=>8.2e-05, :action_time=>0.00016}
125
+ ~ cache: expired matching (/cache_controller/action4/id1)
126
+ ~ cache: miss (/cache_controller/action4/id1/id2)
127
+ ~ cache: set (/cache_controller/action4/id1/id2)
128
+ ~ {:after_filters_time=>5.0e-05, :before_filters_time=>5.8e-05, :action_time=>0.000119}
129
+ ~ cache: expired matching (/cache_controller/action4/id1)
130
+ ~ {:after_filters_time=>2.6e-05, :before_filters_time=>0.000175, :action_time=>0.000213}
131
+ ~ cache: miss (/cache_controller/action8/cache)
132
+ ~ cache: set (/cache_controller/action8/cache)
133
+ ~ {:after_filters_time=>5.5e-05, :before_filters_time=>0.000142, :action_time=>0.000208}
134
+ ~ {:after_filters_time=>2.6e-05, :before_filters_time=>0.000104, :action_time=>0.000141}
135
+ ~ cache: miss (/cache_controller/action9/cache)
136
+ ~ cache: set (/cache_controller/action9/cache)
137
+ ~ {:after_filters_time=>5.6e-05, :before_filters_time=>0.000129, :action_time=>0.000194}
138
+ ~ {:after_filters_time=>2.4e-05, :before_filters_time=>0.000106, :action_time=>0.000139}
139
+ ~ cache: miss (/cache_controller/action10/cache)
140
+ ~ cache: set (/cache_controller/action10/cache)
141
+ ~ {:after_filters_time=>5.2e-05, :before_filters_time=>0.000126, :action_time=>0.000187}
142
+ ~ {:after_filters_time=>2.4e-05, :before_filters_time=>0.000103, :action_time=>0.000136}
143
+ ~ cache: miss (/cache_controller/action11/cache)
144
+ ~ cache: set (/cache_controller/action11/cache)
145
+ ~ {:after_filters_time=>5.1e-05, :before_filters_time=>0.000134, :action_time=>0.000195}
146
+ ~ cache: set (/cache_controller/action5)
147
+ ~ {:after_filters_time=>0.000414, :before_filters_time=>0.000163, :action_time=>0.000596}
148
+ ~ cache: set (/cache_controller/action5/this/is/a/test)
149
+ ~ {:after_filters_time=>0.001305, :before_filters_time=>0.000296, :action_time=>0.001627}
150
+ ~ cache: set (/cache_controller/action6)
151
+ ~ {:after_filters_time=>0.000582, :before_filters_time=>0.000236, :action_time=>0.000858}
152
+ ~ cache: hit (/cache_controller/action6)
153
+ ~ {:after_filters_time=>2.4e-05, :action_time=>0.000346}
154
+ ~ cache: set (/cache_controller/action6)
155
+ ~ {:after_filters_time=>0.000622, :before_filters_time=>0.0008, :action_time=>0.001475}
156
+ ~ cache: set (/cache_controller/action6/path/to/nowhere)
157
+ ~ {:after_filters_time=>0.001422, :before_filters_time=>0.000258, :action_time=>0.001737}
158
+ ~ cache: hit (/cache_controller/action6/path/to/nowhere)
159
+ ~ {:after_filters_time=>3.8e-05, :action_time=>0.000656}
160
+ ~ cache: set (/cache_controller/action6/path/to/nowhere)
161
+ ~ {:after_filters_time=>0.000387, :before_filters_time=>0.000445, :action_time=>0.000869}
162
+ ~ cache: set (/cache_controller/action6)
163
+ ~ {:after_filters_time=>0.000341, :before_filters_time=>0.000178, :action_time=>0.000543}
164
+ ~ cache: set (/cache_controller/action6)
165
+ ~ {:after_filters_time=>0.000574, :before_filters_time=>0.000164, :action_time=>0.000771}
166
+ ~ cache: set (/cache_controller/action6)
167
+ ~ {:after_filters_time=>0.000375, :before_filters_time=>0.000167, :action_time=>0.000575}
168
+ ~ cache: set (/cache_controller/action6/id1/id2)
169
+ ~ {:after_filters_time=>0.00086, :before_filters_time=>0.000183, :action_time=>0.001069}
170
+ ~ cache: set (/cache_controller/action6/id1/id2)
171
+ ~ {:after_filters_time=>0.000349, :before_filters_time=>0.00016, :action_time=>0.000536}
172
+ ~ cache: set (/cache_controller/action6)
173
+ ~ {:after_filters_time=>0.000367, :before_filters_time=>0.000149, :action_time=>0.000543}
174
+ ~ cache: set (/cache_controller/action6/id1/id2)
175
+ ~ {:after_filters_time=>0.000718, :before_filters_time=>0.000163, :action_time=>0.000908}
176
+ ~ cache: set (/cache_controller/action6/id1/id2)
177
+ ~ {:after_filters_time=>0.000332, :before_filters_time=>0.000141, :action_time=>0.000502}
178
+ ~ cache: set (/cache_controller/action6/id1/id2)
179
+ ~ {:after_filters_time=>0.000696, :before_filters_time=>0.000155, :action_time=>0.000877}
180
+ ~ cache: set (/cache_controller/action6/id1/id2)
181
+ ~ {:after_filters_time=>0.000397, :before_filters_time=>0.000154, :action_time=>0.000578}
182
+ ~ cache: set (/cache_controller/action6)
183
+ ~ {:after_filters_time=>0.000371, :before_filters_time=>0.00018, :action_time=>0.000577}
184
+ ~ cache: set (/cache_controller/action6/id1/id2)
185
+ ~ {:after_filters_time=>0.000358, :before_filters_time=>0.000172, :action_time=>0.000555}
186
+ ~ cache: set (/cache_controller/action6/id1/id2)
187
+ ~ {:after_filters_time=>0.000353, :before_filters_time=>0.000156, :action_time=>0.000544}
188
+ ~ cache: set (/cache_controller/action6/id1/id2)
189
+ ~ {:after_filters_time=>0.000337, :before_filters_time=>0.000151, :action_time=>0.000515}
190
+ ~ cache: set (/cache_controller/action7.css)
191
+ ~ {:after_filters_time=>0.000535, :before_filters_time=>0.000459, :action_time=>0.001035}
192
+ ~ cache: hit (/cache_controller/action7.css)
193
+ ~ {:after_filters_time=>2.7e-05, :action_time=>0.000552}
194
+ ~ cache: set (/cache_controller/action7.js)
195
+ ~ {:after_filters_time=>0.000539, :before_filters_time=>0.000381, :action_time=>0.000956}
196
+ ~ cache: hit (/cache_controller/action7.js)
197
+ ~ {:after_filters_time=>2.2e-05, :action_time=>0.0003}
198
+ ~ cache: set (/cache_controller/action7.xml)
199
+ ~ {:after_filters_time=>0.000405, :before_filters_time=>0.000169, :action_time=>0.000599}
200
+ ~ cache: hit (/cache_controller/action7.xml)
201
+ ~ {:after_filters_time=>2.1e-05, :action_time=>0.000263}
202
+ ~ cache: set (/cache_controller/action7.jpg)
203
+ ~ {:after_filters_time=>0.000331, :before_filters_time=>0.000173, :action_time=>0.000528}
204
+ ~ cache: hit (/cache_controller/action7.jpg)
205
+ ~ {:after_filters_time=>1.9e-05, :action_time=>0.000259}
206
+ ~ cache: set (/cache_controller/action7.html)
207
+ ~ {:after_filters_time=>0.000308, :before_filters_time=>0.00017, :action_time=>0.0005}
208
+ ~ cache: hit (/cache_controller/action7.html)
209
+ ~ {:after_filters_time=>2.2e-05, :action_time=>0.000288}
210
+ ~ Using memcache cache
211
+ ~ Not Using Sessions
212
+ ~ cache: expired all
213
+ ~ {:after_filters_time=>1.9e-05, :before_filters_time=>4.1e-05, :action_time=>0.000244}
214
+ ~ cache: miss (key1)
215
+ ~ cache: set (key1)
216
+ ~ {:after_filters_time=>2.8e-05, :before_filters_time=>2.4e-05, :action_time=>0.00422}
217
+ ~ cache: miss (key11)
218
+ ~ cache: set (key11)
219
+ ~ {:after_filters_time=>2.4e-05, :before_filters_time=>3.4e-05, :action_time=>0.001341}
220
+ ~ {:after_filters_time=>2.7e-05, :before_filters_time=>4.9e-05, :action_time=>0.001105}
221
+ ~ cache: expired (key11)
222
+ ~ cache: miss (key11)
223
+ ~ {:after_filters_time=>3.9e-05, :before_filters_time=>9.3e-05, :action_time=>0.001921}
224
+ ~ cache: expired (key1)
225
+ ~ cache: miss (key1)
226
+ ~ cache: miss (key1)
227
+ ~ cache: set (key1)
228
+ ~ {:after_filters_time=>3.1e-05, :before_filters_time=>4.2e-05, :action_time=>0.001765}
229
+ ~ cache: miss (unknown_key)
230
+ ~ cache: set (test1)
231
+ ~ cache: set (test2)
232
+ ~ cache: set (test3)
233
+ ~ cache: expired (test1)
234
+ ~ cache: expired (test2)
235
+ ~ cache: expired (test3)
236
+ ~ cache: miss (test1)
237
+ ~ cache: miss (test2)
238
+ ~ cache: miss (test3)
239
+ ~ cache: set (timed_key)
240
+ ~ cache: miss (timed_key)
241
+ ~ cache: set (test1)
242
+ ~ cache: expired (test1)
243
+ ~ cache: miss (test1)
244
+ ~ cache: set (test2/id1)
245
+ ~ cache: expired (test2/id1)
246
+ ~ cache: miss (test2/id1)
247
+ ~ cache: set (test3)
248
+ ~ cache: expired (test3)
249
+ ~ cache: miss (test3)
250
+ ~ cache: set (test4/id1)
251
+ ~ cache: expired (test4/id1)
252
+ ~ cache: miss (test4/id1/id2)
253
+ ~ cache: expired all
254
+ ~ cache: miss (key1)
255
+ ~ cache: set (key1)
256
+ ~ cache: miss (/cache_controller/action3)
257
+ ~ cache: set (/cache_controller/action3)
258
+ ~ {:after_filters_time=>0.000491, :before_filters_time=>0.000238, :action_time=>0.000753}
259
+ ~ cache: expired (/cache_controller/action3)
260
+ ~ cache: miss (/cache_controller/action3)
261
+ ~ cache: miss (/cache_controller/action3/abc/456/ghi)
262
+ ~ cache: set (/cache_controller/action3/abc/456/ghi)
263
+ ~ {:after_filters_time=>0.000458, :before_filters_time=>0.000186, :action_time=>0.000689}
264
+ ~ {:after_filters_time=>2.3e-05, :action_time=>0.000186}
265
+ ~ cache: expired (/cache_controller/action3/abc/456/ghi)
266
+ ~ cache: miss (/cache_controller/action3/abc/456/ghi)
267
+ ~ cache: miss (/cache_controller/action4)
268
+ ~ cache: set (/cache_controller/action4)
269
+ ~ {:after_filters_time=>0.000462, :before_filters_time=>0.000182, :action_time=>0.000656}
270
+ ~ cache: miss (/cache_controller/action4)
271
+ ~ cache: miss (/cache_controller/action4)
272
+ ~ cache: expired (/cache_controller/action4)
273
+ ~ cache: miss (/cache_controller/action4/path/to/nowhere)
274
+ ~ cache: miss (/cache_controller/action4/path/to/nowhere)
275
+ ~ cache: set (/cache_controller/action4/path/to/nowhere)
276
+ ~ {:after_filters_time=>0.000713, :before_filters_time=>0.000315, :action_time=>0.00105}
277
+ ~ cache: miss (/cache_controller/action4/path/to/nowhere)
278
+ ~ cache: miss (/cache_controller/action4/path/to/nowhere)
279
+ ~ cache: miss (/cache_controller/action4)
280
+ ~ cache: set (/cache_controller/action4)
281
+ ~ {:after_filters_time=>0.002476, :before_filters_time=>0.000364, :action_time=>0.002862}
282
+ ~ cache: expired (/cache_controller/action4)
283
+ ~ cache: miss (/cache_controller/action4)
284
+ ~ cache: miss (/cache_controller/action4)
285
+ ~ cache: set (/cache_controller/action4)
286
+ ~ {:after_filters_time=>0.000716, :before_filters_time=>0.000307, :action_time=>0.00104}
287
+ ~ cache: expired (/cache_controller/action4/path/to/nowhere)
288
+ ~ cache: expired (/cache_controller/action4)
289
+ ~ cache: miss (/cache_controller/action4)
290
+ ~ cache: miss (/cache_controller/action4)
291
+ ~ cache: set (/cache_controller/action4)
292
+ ~ {:after_filters_time=>0.000476, :before_filters_time=>0.000189, :action_time=>0.000675}
293
+ ~ cache: expired (/cache_controller/action4)
294
+ ~ cache: miss (/cache_controller/action4)
295
+ ~ cache: miss (/cache_controller/action4/id1/id2)
296
+ ~ cache: set (/cache_controller/action4/id1/id2)
297
+ ~ {:after_filters_time=>0.000473, :before_filters_time=>0.000189, :action_time=>0.000671}
298
+ ~ cache: expired (/cache_controller/action4/id1/id2)
299
+ ~ cache: miss (/cache_controller/action4/id1/id2)
300
+ ~ cache: miss (/cache_controller/action4/id1/id2)
301
+ ~ cache: set (/cache_controller/action4/id1/id2)
302
+ ~ {:after_filters_time=>0.000486, :before_filters_time=>0.000181, :action_time=>0.000678}
303
+ ~ cache: expired (/cache_controller/action4/id1/id2)
304
+ ~ cache: miss (/cache_controller/action4/id1/id2)
305
+ ~ cache: miss (/cache_controller/action4)
306
+ ~ cache: set (/cache_controller/action4)
307
+ ~ {:after_filters_time=>0.000484, :before_filters_time=>0.00019, :action_time=>0.000683}
308
+ ~ cache: expired (/cache_controller/action4)
309
+ ~ cache: miss (/cache_controller/action4)
310
+ ~ cache: miss (/cache_controller/action4/id1/id2)
311
+ ~ cache: set (/cache_controller/action4/id1/id2)
312
+ ~ {:after_filters_time=>0.000487, :before_filters_time=>0.000182, :action_time=>0.000679}
313
+ ~ cache: expired (/cache_controller/action4/id1/id2)
314
+ ~ cache: miss (/cache_controller/action4/id1/id2)
315
+ ~ cache: miss (/cache_controller/action4/id1/id2)
316
+ ~ cache: set (/cache_controller/action4/id1/id2)
317
+ ~ {:after_filters_time=>0.000471, :before_filters_time=>0.000187, :action_time=>0.000668}
318
+ ~ cache: expired (/cache_controller/action4/id1/id2)
319
+ ~ cache: miss (/cache_controller/action4/id1/id2)
320
+ ~ cache: miss (/cache_controller/action4/id1/id2)
321
+ ~ cache: set (/cache_controller/action4/id1/id2)
322
+ ~ {:after_filters_time=>0.000475, :before_filters_time=>0.000195, :action_time=>0.00068}
323
+ ~ cache: expired (/cache_controller/action4/id1/id2)
324
+ ~ cache: miss (/cache_controller/action4/id1/id2)
325
+ ~ cache: miss (/cache_controller/action4/id1/id2)
326
+ ~ cache: set (/cache_controller/action4/id1/id2)
327
+ ~ {:after_filters_time=>0.000489, :before_filters_time=>0.000174, :action_time=>0.000671}
328
+ ~ cache: expired (/cache_controller/action4/id1/id2)
329
+ ~ cache: miss (/cache_controller/action4/id1/id2)
330
+ ~ cache: miss (/cache_controller/action4)
331
+ ~ cache: set (/cache_controller/action4)
332
+ ~ {:after_filters_time=>0.000485, :before_filters_time=>0.000199, :action_time=>0.000694}
333
+ ~ cache: expired (/cache_controller/action4)
334
+ ~ cache: miss (/cache_controller/action4)
335
+ ~ cache: miss (/cache_controller/action4/id1/id2)
336
+ ~ cache: set (/cache_controller/action4/id1/id2)
337
+ ~ {:after_filters_time=>0.000474, :before_filters_time=>0.000189, :action_time=>0.000673}
338
+ ~ cache: expired (/cache_controller/action4/id1/id2)
339
+ ~ cache: miss (/cache_controller/action4/id1/id2)
340
+ ~ cache: miss (/cache_controller/action4/id1/id2)
341
+ ~ cache: set (/cache_controller/action4/id1/id2)
342
+ ~ {:after_filters_time=>0.000471, :before_filters_time=>0.000186, :action_time=>0.000667}
343
+ ~ cache: expired (/cache_controller/action4/id1/id2)
344
+ ~ cache: miss (/cache_controller/action4/id1/id2)
345
+ ~ cache: miss (/cache_controller/action4/id1/id2)
346
+ ~ cache: set (/cache_controller/action4/id1/id2)
347
+ ~ {:after_filters_time=>0.000486, :before_filters_time=>0.00019, :action_time=>0.000686}
348
+ ~ cache: expired (/cache_controller/action4/id1/id2)
349
+ ~ cache: miss (/cache_controller/action4/id1/id2)
350
+ ~ {:after_filters_time=>2.6e-05, :before_filters_time=>0.000162, :action_time=>0.000202}
351
+ ~ cache: miss (/cache_controller/action8)
352
+ ~ cache: miss (/cache_controller/action8/cache)
353
+ ~ cache: set (/cache_controller/action8/cache)
354
+ ~ {:after_filters_time=>0.000484, :before_filters_time=>0.000266, :action_time=>0.000759}
355
+ ~ {:after_filters_time=>2.6e-05, :before_filters_time=>0.000107, :action_time=>0.000143}
356
+ ~ cache: miss (/cache_controller/action9)
357
+ ~ cache: miss (/cache_controller/action9/cache)
358
+ ~ cache: set (/cache_controller/action9/cache)
359
+ ~ {:after_filters_time=>0.000502, :before_filters_time=>0.000276, :action_time=>0.000788}
360
+ ~ {:after_filters_time=>2.5e-05, :before_filters_time=>0.000147, :action_time=>0.000182}
361
+ ~ cache: miss (/cache_controller/action10)
362
+ ~ cache: miss (/cache_controller/action10/cache)
363
+ ~ cache: set (/cache_controller/action10/cache)
364
+ ~ {:after_filters_time=>0.003832, :before_filters_time=>0.000274, :action_time=>0.004122}
365
+ ~ {:after_filters_time=>3.2e-05, :before_filters_time=>0.000154, :action_time=>0.000203}
366
+ ~ cache: miss (/cache_controller/action11)
367
+ ~ cache: miss (/cache_controller/action11/cache)
368
+ ~ cache: set (/cache_controller/action11/cache)
369
+ ~ {:after_filters_time=>0.000503, :before_filters_time=>0.000397, :action_time=>0.000915}
370
+ ~ cache: set (/cache_controller/action5)
371
+ ~ {:after_filters_time=>0.000436, :before_filters_time=>0.000189, :action_time=>0.000647}
372
+ ~ cache: set (/cache_controller/action5/this/is/a/test)
373
+ ~ {:after_filters_time=>0.001277, :before_filters_time=>0.000256, :action_time=>0.001557}
374
+ ~ cache: set (/cache_controller/action6)
375
+ ~ {:after_filters_time=>0.000479, :before_filters_time=>0.000253, :action_time=>0.00077}
376
+ ~ cache: hit (/cache_controller/action6)
377
+ ~ {:after_filters_time=>3.8e-05, :action_time=>0.000645}
378
+ ~ cache: set (/cache_controller/action6)
379
+ ~ {:after_filters_time=>0.00062, :before_filters_time=>0.000919, :action_time=>0.001593}
380
+ ~ cache: set (/cache_controller/action6/path/to/nowhere)
381
+ ~ {:after_filters_time=>0.001441, :before_filters_time=>0.000285, :action_time=>0.001775}
382
+ ~ cache: hit (/cache_controller/action6/path/to/nowhere)
383
+ ~ {:after_filters_time=>3.8e-05, :action_time=>0.000643}
384
+ ~ cache: set (/cache_controller/action6/path/to/nowhere)
385
+ ~ {:after_filters_time=>0.000637, :before_filters_time=>0.000806, :action_time=>0.001497}
386
+ ~ cache: set (/cache_controller/action6)
387
+ ~ {:after_filters_time=>0.000548, :before_filters_time=>0.000235, :action_time=>0.000817}
388
+ ~ cache: set (/cache_controller/action6)
389
+ ~ {:after_filters_time=>0.00057, :before_filters_time=>0.000325, :action_time=>0.000951}
390
+ ~ cache: set (/cache_controller/action6)
391
+ ~ {:after_filters_time=>0.00043, :before_filters_time=>0.000217, :action_time=>0.000679}
392
+ ~ cache: set (/cache_controller/action6/id1/id2)
393
+ ~ {:after_filters_time=>0.001216, :before_filters_time=>0.000286, :action_time=>0.00153}
394
+ ~ cache: set (/cache_controller/action6/id1/id2)
395
+ ~ {:after_filters_time=>0.000472, :before_filters_time=>0.000228, :action_time=>0.000734}
396
+ ~ cache: set (/cache_controller/action6)
397
+ ~ {:after_filters_time=>0.000451, :before_filters_time=>0.000232, :action_time=>0.000713}
398
+ ~ cache: set (/cache_controller/action6/id1/id2)
399
+ ~ {:after_filters_time=>0.000982, :before_filters_time=>0.000246, :action_time=>0.001256}
400
+ ~ cache: set (/cache_controller/action6/id1/id2)
401
+ ~ {:after_filters_time=>0.000375, :before_filters_time=>0.000203, :action_time=>0.000604}
402
+ ~ cache: set (/cache_controller/action6/id1/id2)
403
+ ~ {:after_filters_time=>0.000868, :before_filters_time=>0.000203, :action_time=>0.001096}
404
+ ~ cache: set (/cache_controller/action6/id1/id2)
405
+ ~ {:after_filters_time=>0.000316, :before_filters_time=>0.000188, :action_time=>0.000527}
406
+ ~ cache: set (/cache_controller/action6)
407
+ ~ {:after_filters_time=>0.000301, :before_filters_time=>0.000264, :action_time=>0.000584}
408
+ ~ cache: set (/cache_controller/action6/id1/id2)
409
+ ~ {:after_filters_time=>0.000284, :before_filters_time=>0.000184, :action_time=>0.000487}
410
+ ~ cache: set (/cache_controller/action6/id1/id2)
411
+ ~ {:after_filters_time=>0.000294, :before_filters_time=>0.00013, :action_time=>0.000444}
412
+ ~ cache: set (/cache_controller/action6/id1/id2)
413
+ ~ {:after_filters_time=>0.000653, :before_filters_time=>0.000335, :action_time=>0.001034}
414
+ ~ cache: set (/cache_controller/action7.css)
415
+ ~ {:after_filters_time=>0.000679, :before_filters_time=>0.000226, :action_time=>0.000941}
416
+ ~ cache: hit (/cache_controller/action7.css)
417
+ ~ {:after_filters_time=>2.5e-05, :action_time=>0.000364}
418
+ ~ cache: set (/cache_controller/action7.js)
419
+ ~ {:after_filters_time=>0.000474, :before_filters_time=>0.000188, :action_time=>0.000696}
420
+ ~ cache: hit (/cache_controller/action7.js)
421
+ ~ {:after_filters_time=>2.0e-05, :action_time=>0.000274}
422
+ ~ cache: set (/cache_controller/action7.xml)
423
+ ~ {:after_filters_time=>0.000548, :before_filters_time=>0.000168, :action_time=>0.000902}
424
+ ~ cache: hit (/cache_controller/action7.xml)
425
+ ~ {:after_filters_time=>2.1e-05, :action_time=>0.000298}
426
+ ~ cache: set (/cache_controller/action7.jpg)
427
+ ~ {:after_filters_time=>0.000318, :before_filters_time=>0.000162, :action_time=>0.000504}
428
+ ~ cache: hit (/cache_controller/action7.jpg)
429
+ ~ {:after_filters_time=>1.9e-05, :action_time=>0.000241}
430
+ ~ cache: set (/cache_controller/action7.html)
431
+ ~ {:after_filters_time=>0.000294, :before_filters_time=>0.000153, :action_time=>0.000467}
432
+ ~ cache: hit (/cache_controller/action7.html)
433
+ ~ {:after_filters_time=>2.0e-05, :action_time=>0.000239}
@@ -103,4 +103,60 @@ describe "merb-cache-action" do
103
103
  CACHE.cached_action?(:key => "/cache_controller/action4/id1/id2").should be_false
104
104
  end
105
105
 
106
+ it "should allow :if conditions with procs" do
107
+ c = get("/cache_controller/action8")
108
+ CACHE.cached_action?(:key => "/cache_controller/action8").should be_false
109
+
110
+ c = get("/cache_controller/action8/cache")
111
+ CACHE.cached_action?(:key => "/cache_controller/action8/cache").should be_true
112
+ end
113
+
114
+ it "should allow :unless conditions with procs" do
115
+ c = get("/cache_controller/action9")
116
+ CACHE.cached_action?(:key => "/cache_controller/action9").should be_false
117
+
118
+ c = get("/cache_controller/action9/cache")
119
+ CACHE.cached_action?(:key => "/cache_controller/action9/cache").should be_true
120
+ end
121
+
122
+ it "should allow :if conditions with symbols" do
123
+ c = get("/cache_controller/action10")
124
+ CACHE.cached_action?(:key => "/cache_controller/action10").should be_false
125
+
126
+ c = get("/cache_controller/action10/cache")
127
+ CACHE.cached_action?(:key => "/cache_controller/action10/cache").should be_true
128
+ end
129
+
130
+ it "should allow :unless conditions with symbols" do
131
+ c = get("/cache_controller/action11")
132
+ CACHE.cached_action?(:key => "/cache_controller/action11").should be_false
133
+
134
+ c = get("/cache_controller/action11/cache")
135
+ CACHE.cached_action?(:key => "/cache_controller/action11/cache").should be_true
136
+ end
106
137
  end
138
+
139
+ describe "merb-cache-actions" do
140
+ it "should cache multiple actions passed as arguments to it (cache_actions_1, cache_actions_2, cache_actions_3)" do
141
+ c = get("/cache_controller/cache_actions_1")
142
+ c.body.strip.should == "test cache_actions_1"
143
+ c.cached?("/cache_controller/cache_actions_1").should be_true
144
+ c.cached_action?("cache_actions_1").should be_true
145
+ c.cache_get("/cache_controller/cache_actions_1").should == "test cache_actions_1"
146
+
147
+ c = get("/cache_controller/cache_actions_2")
148
+ c.body.strip.should == "test cache_actions_2"
149
+ c.cached?("/cache_controller/cache_actions_2").should be_true
150
+ c.cached_action?("cache_actions_2").should be_true
151
+ c.cache_get("/cache_controller/cache_actions_2").should == "test cache_actions_2"
152
+ sleep 4
153
+ c.cache_get("/cache_controller/cache_actions_2").should be_nil
154
+ c.cached_action?(:action => "cache_actions_2").should be_false
155
+
156
+ c = get("/cache_controller/cache_actions_3")
157
+ CACHE.cached_action?(:key => "/cache_controller/cache_actions_3").should be_true
158
+
159
+ c = get("/cache_controller/cache_actions_3/cache")
160
+ CACHE.cached_action?(:key => "/cache_controller/cache_actions_3/cache").should be_false
161
+ end
162
+ end
data/spec/spec_helper.rb CHANGED
@@ -20,6 +20,7 @@ def use_cache_store(store, orm = nil)
20
20
  :store => store,
21
21
  :cache_directory => File.dirname(__FILE__) / "tmp/cache",
22
22
  :cache_html_directory => File.dirname(__FILE__) / "tmp/html",
23
+ :no_tracking => false
23
24
  }
24
25
  FileUtils.rm_rf(Dir.glob(File.dirname(__FILE__) / "/tmp"))
25
26
  case store
metadata CHANGED
@@ -1,25 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merb-cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Boussinet
8
- autorequire: merb-cache
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-04 00:00:00 -05:00
12
+ date: 2008-08-13 00:00:00 +03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: merb-core
17
+ type: :runtime
17
18
  version_requirement:
18
19
  version_requirements: !ruby/object:Gem::Requirement
19
20
  requirements:
20
21
  - - ">="
21
22
  - !ruby/object:Gem::Version
22
- version: 0.9.3
23
+ version: 0.9.4
23
24
  version:
24
25
  description: Merb plugin that provides caching (page, action, fragment, object)
25
26
  email: alex.boussinet@gmail.com
@@ -55,6 +56,8 @@ files:
55
56
  - spec/config
56
57
  - spec/config/database.yml
57
58
  - spec/controller.rb
59
+ - spec/log
60
+ - spec/log/merb_test.log
58
61
  - spec/merb-cache-action_spec.rb
59
62
  - spec/merb-cache-fragment_spec.rb
60
63
  - spec/merb-cache-page_spec.rb
@@ -65,7 +68,7 @@ files:
65
68
  - spec/views/cache_controller/action1.html.erb
66
69
  - spec/views/cache_controller/action2.html.haml
67
70
  has_rdoc: true
68
- homepage: http://www.merbivore.com
71
+ homepage: http://merbivore.com
69
72
  post_install_message:
70
73
  rdoc_options: []
71
74
 
@@ -85,8 +88,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
88
  version:
86
89
  requirements: []
87
90
 
88
- rubyforge_project:
89
- rubygems_version: 1.0.1
91
+ rubyforge_project: merb
92
+ rubygems_version: 1.2.0
90
93
  signing_key:
91
94
  specification_version: 2
92
95
  summary: Merb plugin that provides caching (page, action, fragment, object)