Module: KPI::Memoizable

Included in:
Report
Defined in:
lib/kpi/memoizable.rb

Defined Under Namespace

Modules: InstanceMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.memoized_ivar_for(symbol) ⇒ Object



6
7
8
# File 'lib/kpi/memoizable.rb', line 6

def self.memoized_ivar_for(symbol)
  "@_memoized_#{symbol.to_s.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}".to_sym
end

Instance Method Details

#memoize(*symbols) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/kpi/memoizable.rb', line 59

def memoize(*symbols)
  symbols.each do |symbol|
    original_method = :"_unmemoized_#{symbol}"
    memoized_ivar = KPI::Memoizable.memoized_ivar_for(symbol)

    class_eval "include InstanceMethods                                                  # include InstanceMethods\n#\nif method_defined?(:\#{original_method})                                  # if method_defined?(:_unmemoized_mime_type)\nraise \"Already memoized \#{symbol}\"                                     #   raise \"Already memoized mime_type\"\nend                                                                      # end\nalias \#{original_method} \#{symbol}                                       # alias _unmemoized_mime_type mime_type\n#\nif instance_method(:\#{symbol}).arity == 0                                # if instance_method(:mime_type).arity == 0\ndef \#{symbol}(reload = false)                                          #   def mime_type(reload = false)\nif reload || !defined?(\#{memoized_ivar}) || \#{memoized_ivar}.empty?  #     if reload || !defined?(@_memoized_mime_type) || @_memoized_mime_type.empty?\n\#{memoized_ivar} = [\#{original_method}]                            #       @_memoized_mime_type = [_unmemoized_mime_type]\nend                                                                  #     end\n\#{memoized_ivar}[0]                                                  #     @_memoized_mime_type[0]\nend                                                                    #   end\nelse                                                                     # else\ndef \#{symbol}(*args)                                                   #   def mime_type(*args)\n\#{memoized_ivar} ||= {} unless frozen?                               #     @_memoized_mime_type ||= {} unless frozen?\nargs_length = method(:\#{original_method}).arity                      #     args_length = method(:_unmemoized_mime_type).arity\nif args.length == args_length + 1 &&                                 #     if args.length == args_length + 1 &&\n(args.last == true || args.last == :reload)                        #       (args.last == true || args.last == :reload)\nreload = args.pop                                                  #       reload = args.pop\nend                                                                  #     end\n#\nif defined?(\#{memoized_ivar}) && \#{memoized_ivar}                    #     if defined?(@_memoized_mime_type) && @_memoized_mime_type\nif !reload && \#{memoized_ivar}.has_key?(args)                      #       if !reload && @_memoized_mime_type.has_key?(args)\n\#{memoized_ivar}[args]                                           #         @_memoized_mime_type[args]\nelsif \#{memoized_ivar}                                             #       elsif @_memoized_mime_type\n\#{memoized_ivar}[args] = \#{original_method}(*args)               #         @_memoized_mime_type[args] = _unmemoized_mime_type(*args)\nend                                                                #       end\nelse                                                                 #     else\n\#{original_method}(*args)                                          #       _unmemoized_mime_type(*args)\nend                                                                  #     end\nend                                                                    #   end\nend                                                                      # end\n#\nif private_method_defined?(\#{original_method.inspect})                   # if private_method_defined?(:_unmemoized_mime_type)\nprivate \#{symbol.inspect}                                              #   private :mime_type\nelsif protected_method_defined?(\#{original_method.inspect})              # elsif protected_method_defined?(:_unmemoized_mime_type)\nprotected \#{symbol.inspect}                                            #   protected :mime_type\nend                                                                      # end\n", __FILE__, __LINE__ + 1
  end
end