module Covercache::DefiningHelper
Defining Helper¶ ↑
Public Instance Methods
class_define_cached(method, *args, &block)
click to toggle source
# File lib/covercache.rb, line 152 def class_define_cached(method, *args, &block) options = args.extract_options! options[:is_class_method] = true args << options self.send :define_cached, method, *Array.wrap(args), &block end
define_cached(method, *args, &block)
click to toggle source
Define and wrap methods or blocks
# File lib/covercache.rb, line 141 def define_cached(method, *args, &block) options = args.extract_options! is_class_method = !!options.delete(:is_class_method) file, line = caller[is_class_method ? 1 : 0].split ':', 2 line = line.to_i covercache_method_arguments method, args, options, &block covercache_define_wrapper method, file, line, is_class_method end
Private Instance Methods
covercache_define_wrapper(original_method, file, line, is_class_method = false)
click to toggle source
# File lib/covercache.rb, line 160 def covercache_define_wrapper(original_method, file, line, is_class_method = false) method = "#{'self.' if is_class_method}cached_#{ original_method }" class_eval <<-EOT, __FILE__, __LINE__ - 2 def #{method}(*args, &block) # def cached_example(*args, &block) options = Array(#{method}_data[:args]) + extract_cache_key(*args) # options = Array(cached_example_data[:args]) + extract_cache_key(*args) covercache *options, #{method}_data[:opts] do # covercache *options, cached_example_data[:opts] do cache_block = #{method}_data[:block] # cache_block = cached_example_data[:block] if cache_block.present? # if cache_block.present? cache_block.(#{'self,' unless is_class_method} *args) # cache_block.(self, *args) else # else self.send :#{original_method}, *args, &block # self.send :example, *args, &block end # end end # end end # env EOT end
covercache_method_arguments(method, *args, &block)
click to toggle source
# File lib/covercache.rb, line 178 def covercache_method_arguments(method, *args, &block) class_attribute :"cached_#{method}_data" self.send :"cached_#{method}_data=", organize_cached_method_data(*args, &block) end
organize_cached_method_data(*args, &block)
click to toggle source
# File lib/covercache.rb, line 183 def organize_cached_method_data(*args, &block) x = Hash[%w{args opts block}.map { |key| [key, (args.shift || block)] }].to_options end