aboutsummaryrefslogtreecommitdiffstats
path: root/actionview
diff options
context:
space:
mode:
authorJeremy Daer <jeremydaer@gmail.com>2016-04-19 10:59:37 -0700
committerJeremy Daer <jeremydaer@gmail.com>2016-04-19 19:20:37 -0700
commit9918118a97c91742d94a0e677603f2e3301eebdc (patch)
tree838d318676a07205d3f83b52f69141258b736849 /actionview
parente86c5f09c4aaa533bd33c47bfe0bbf9303afeed8 (diff)
downloadrails-9918118a97c91742d94a0e677603f2e3301eebdc.tar.gz
rails-9918118a97c91742d94a0e677603f2e3301eebdc.tar.bz2
rails-9918118a97c91742d94a0e677603f2e3301eebdc.zip
Ensure Cache#inspect doesn't block concurrent cache writes
Object#inspect recursively inspects instance variables, exposing all internal state, including sensitive internal cache objects. Override Cache#inspect to give a high-level summary that never interferes with concurrent cache writes.
Diffstat (limited to 'actionview')
-rw-r--r--actionview/lib/action_view/template/resolver.rb4
-rw-r--r--actionview/test/template/resolver_cache_test.rb7
2 files changed, 11 insertions, 0 deletions
diff --git a/actionview/lib/action_view/template/resolver.rb b/actionview/lib/action_view/template/resolver.rb
index f33acc2103..c5e69b1833 100644
--- a/actionview/lib/action_view/template/resolver.rb
+++ b/actionview/lib/action_view/template/resolver.rb
@@ -55,6 +55,10 @@ module ActionView
@query_cache = SmallCache.new
end
+ def inspect
+ "#<#{self.class.name}:0x#{(object_id << 1).to_s(16)} keys=#{@data.size} queries=#{@query_cache.size}>"
+ end
+
# Cache the templates returned by the block
def cache(key, name, prefix, partial, locals)
if Resolver.caching?
diff --git a/actionview/test/template/resolver_cache_test.rb b/actionview/test/template/resolver_cache_test.rb
new file mode 100644
index 0000000000..1081c13db0
--- /dev/null
+++ b/actionview/test/template/resolver_cache_test.rb
@@ -0,0 +1,7 @@
+require 'abstract_unit'
+
+class ResolverCacheTest < ActiveSupport::TestCase
+ def test_inspect_shields_cache_internals
+ assert_match %r(#<ActionView::Resolver:0x[0-9a-f]+ @cache=#<ActionView::Resolver::Cache:0x[0-9a-f]+ keys=0 queries=0>>), ActionView::Resolver.new.inspect
+ end
+end