Module: AssetTrip::Memoizable

Included in:
Asset
Defined in:
lib/asset_trip/memoizable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.memoized_ivar_for(symbol) ⇒ Object



4
5
6
# File 'lib/asset_trip/memoizable.rb', line 4

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

Instance Method Details

#memoize(symbol) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/asset_trip/memoizable.rb', line 8

def memoize(symbol)
  original_method = :"_unmemoized_#{symbol}"
  memoized_ivar = AssetTrip::Memoizable.memoized_ivar_for(symbol)

  raise "Already memoized #{symbol}" if method_defined?(original_method)
  alias_method original_method, symbol

  class_eval "    def \#{symbol}(*args)                              # def mime_type(*args)\n      if !defined?(\#{memoized_ivar})                  #   if !defined?(@_memoized_mime_type)\n        \#{memoized_ivar} = \#{original_method}(*args)  #     @_memoized_mime_type = _unmemoized_mime_type(*args)\n      end                                             #   end\n      \#{memoized_ivar}                                #   @_memoized_mime_type\n    end                                               # end\n  EOS\n\n  private symbol if private_method_defined?(original_method)\nend\n", __FILE__, __LINE__