From c70fd5df7fd8af3a50539d6edf9c3453d2f892e8 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Tue, 11 Sep 2007 21:49:35 +0000 Subject: Remove unused HashCaching git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7467 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activesupport/lib/active_support/caching_tools.rb | 62 ------------------ activesupport/test/caching_tools_test.rb | 79 ----------------------- 2 files changed, 141 deletions(-) delete mode 100644 activesupport/lib/active_support/caching_tools.rb delete mode 100644 activesupport/test/caching_tools_test.rb diff --git a/activesupport/lib/active_support/caching_tools.rb b/activesupport/lib/active_support/caching_tools.rb deleted file mode 100644 index c889c148b4..0000000000 --- a/activesupport/lib/active_support/caching_tools.rb +++ /dev/null @@ -1,62 +0,0 @@ -module ActiveSupport - module CachingTools #:nodoc: - - # Provide shortcuts to simply the creation of nested default hashes. This - # pattern is useful, common practice, and unsightly when done manually. - module HashCaching - # Dynamically create a nested hash structure used to cache calls to +method_name+ - # The cache method is named +#{method_name}_cache+ unless :as => :alternate_name - # is given. - # - # The hash structure is created using nested Hash.new. For example: - # - # def slow_method(a, b) a ** b end - # - # can be cached using hash_cache :slow_method, which will define the method - # slow_method_cache. We can then find the result of a ** b using: - # - # slow_method_cache[a][b] - # - # The hash structure returned by slow_method_cache would look like this: - # - # Hash.new do |as, a| - # as[a] = Hash.new do |bs, b| - # bs[b] = slow_method(a, b) - # end - # end - # - # The generated code is actually compressed onto a single line to maintain - # sensible backtrace signatures. - # - def hash_cache(method_name, options = {}) - selector = options[:as] || "#{method_name}_cache" - method = self.instance_method(method_name) - - args = [] - code = "def #{selector}(); @#{selector} ||= " - - (1..method.arity).each do |n| - args << "v#{n}" - code << "Hash.new {|h#{n}, v#{n}| h#{n}[v#{n}] = " - end - - # Add the method call with arguments, followed by closing braces and end. - code << "#{method_name}(#{args * ', '}) #{'}' * method.arity} end" - - # Extract the line number information from the caller. Exceptions arising - # in the generated code should point to the +hash_cache :...+ line. - if caller[0] && /^(.*):(\d+)$/ =~ caller[0] - file, line_number = $1, $2.to_i - else # We can't give good trackback info; fallback to this line: - file, line_number = __FILE__, __LINE__ - end - - # We use eval rather than building proc's because it allows us to avoid - # linking the Hash's to this method's binding. Experience has shown that - # doing so can cause obtuse memory leaks. - class_eval code, file, line_number - end - end - - end -end diff --git a/activesupport/test/caching_tools_test.rb b/activesupport/test/caching_tools_test.rb deleted file mode 100644 index e1cd4e433c..0000000000 --- a/activesupport/test/caching_tools_test.rb +++ /dev/null @@ -1,79 +0,0 @@ -require File.dirname(__FILE__) + '/abstract_unit' -require File.join(File.dirname(File.dirname(__FILE__)), 'lib/active_support/caching_tools.rb') - -class HashCachingTests < Test::Unit::TestCase - def cached(&proc) - return @cached if defined?(@cached) - - @cached_class = Class.new(&proc) - @cached_class.class_eval do - extend ActiveSupport::CachingTools::HashCaching - hash_cache :slow_method - end - @cached = @cached_class.new - end - - def test_cache_access_should_call_method - cached do - def slow_method(a) raise "I should be here: #{a}"; end - end - assert_raises(RuntimeError) { cached.slow_method_cache[1] } - end - - def test_cache_access_should_actually_cache - cached do - def slow_method(a) - (@x ||= []) - if @x.include?(a) then raise "Called twice for #{a}!" - else - @x << a - a + 1 - end - end - end - assert_equal 11, cached.slow_method_cache[10] - assert_equal 12, cached.slow_method_cache[11] - assert_equal 11, cached.slow_method_cache[10] - assert_equal 12, cached.slow_method_cache[11] - end - - def test_cache_should_be_clearable - cached do - def slow_method(a) - @x ||= 0 - @x += 1 - end - end - assert_equal 1, cached.slow_method_cache[:a] - assert_equal 2, cached.slow_method_cache[:b] - assert_equal 3, cached.slow_method_cache[:c] - - assert_equal 1, cached.slow_method_cache[:a] - assert_equal 2, cached.slow_method_cache[:b] - assert_equal 3, cached.slow_method_cache[:c] - - cached.slow_method_cache.clear - - assert_equal 4, cached.slow_method_cache[:a] - assert_equal 5, cached.slow_method_cache[:b] - assert_equal 6, cached.slow_method_cache[:c] - end - - def test_deep_caches_should_work_too - cached do - def slow_method(a, b, c) - a + b + c - end - end - assert_equal 3, cached.slow_method_cache[1][1][1] - assert_equal 7, cached.slow_method_cache[1][2][4] - assert_equal 7, cached.slow_method_cache[1][2][4] - assert_equal 7, cached.slow_method_cache[4][2][1] - - assert_equal({ - 1 => {1 => {1 => 3}, 2 => {4 => 7}}, - 4 => {2 => {1 => 7}}}, - cached.slow_method_cache - ) - end -end -- cgit v1.2.3