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