class Lolita::LazyLoader
Public Class Methods
lazy_load(instance_name,var_name,lazy_class,*args,&block)
click to toggle source
attr_reader :lazy_class,:eval_block,:class_instance
# File lib/lolita/lazy_loader.rb, line 6 def self.lazy_load(instance_name,var_name,lazy_class,*args,&block) temp_var = instance_name.instance_variable_get(var_name) is_loader = temp_var.to_s =~ /Lolita::LazyLoader/ if !temp_var || ((args && args.any? && is_loader && temp_var.__is_args_diff__(args)) || block_given?) temp_var = instance_name.instance_variable_set(var_name,self.new(lazy_class,*args,&block)) end if temp_var.to_s =~ /Lolita::LazyLoader/ temp_var = instance_name.instance_variable_set(var_name,temp_var.class_instance) end temp_var end
new(lazy_class,*args,&block)
click to toggle source
# File lib/lolita/lazy_loader.rb, line 22 def initialize(lazy_class,*args,&block) @args = args || [] @lazy_class=lazy_class @eval_block=block end
Public Instance Methods
__is_args_diff__(args)
click to toggle source
# File lib/lolita/lazy_loader.rb, line 18 def __is_args_diff__(args) @args != args end
class_instance()
click to toggle source
# File lib/lolita/lazy_loader.rb, line 28 def class_instance @class_instance || self end
method_missing(method_name,*args,&block)
click to toggle source
# File lib/lolita/lazy_loader.rb, line 32 def method_missing(method_name,*args,&block) unless @class_instance @args = @args.empty? && [nil] || @args arity=@lazy_class.instance_method(:initialize).arity if arity==-1 # when expectign *args @class_instance=@lazy_class.new(*@args,&@eval_block) elsif arity.abs>0 # when expecting specific number of arguments without any *args @class_instance=@lazy_class.new(*@args.slice(0..arity.abs-1),&@eval_block) else @class_instance=@lazy_class.new(&@eval_block) end end if @class_instance.respond_to?(:after_initialize,true) @class_instance.__send__(:after_initialize) end @class_instance.__send__(method_name,*args,&block) end