| Class | LazyMethods::Proxy |
| In: |
lib/lazy_methods.rb
|
| Parent: | Object |
The proxy object does all the heavy lifting.
| PROTECTED_METHODS | = | %w(initialize __proxy_result__ __proxy_loaded__ method_missing) | These methods we don‘t want to override. All other existing methods will be redefined. |
# File lib/lazy_methods.rb, line 52
52: def initialize (obj, method, args = nil, &block)
53: @object = obj
54: @method = method
55: @args = args || []
56: @block = block
57:
58: # Override already defined methods on Object to proxy them to the result object
59: methods.each do |m|
60: eval "def self.#{m} (*args, &block); __proxy_result__.send(:#{m}, *args, &block); end" unless PROTECTED_METHODS.include?(m)
61: end
62: end
Helper method that indicates if the proxy has loaded the original method results yet.
# File lib/lazy_methods.rb, line 71
71: def __proxy_loaded__
72: !!defined?(@proxy_result)
73: end
Get the result of the original method call. The original method will only be called once.
# File lib/lazy_methods.rb, line 65
65: def __proxy_result__
66: @proxy_result = @object.send(@method, *@args, &@block) unless defined?(@proxy_result)
67: @proxy_result
68: end