diff options
author | Jeremy Daer <jeremydaer@gmail.com> | 2016-04-19 10:59:37 -0700 |
---|---|---|
committer | Jeremy Daer <jeremydaer@gmail.com> | 2016-04-19 19:20:37 -0700 |
commit | 9918118a97c91742d94a0e677603f2e3301eebdc (patch) | |
tree | 838d318676a07205d3f83b52f69141258b736849 /actionview | |
parent | e86c5f09c4aaa533bd33c47bfe0bbf9303afeed8 (diff) | |
download | rails-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.rb | 4 | ||||
-rw-r--r-- | actionview/test/template/resolver_cache_test.rb | 7 |
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 |