class GroupDelegatorKlasses
Attributes
__all_class_methods[RW]
__class_source_group[RW]
__concurrency_model[RW]
__objs_by_class[R]
Public Class Methods
__set_source_classes(classes_to_proxy, concurrency_model = :iterative)
click to toggle source
sets the classes that will be proxied
# File lib/group_delegator/group_delegator_klasses.rb, line 18 def __set_source_classes(classes_to_proxy, concurrency_model = :iterative) @__concurrency_model = concurrency_model sources_data = SourceHelper.set_sources_data(classes_to_proxy) @source_obj_methods = sources_data[:source_methods] @sources = sources_data[:source_objs] @__all_class_methods = @source_obj_methods.keys @__class_source_group = SourceGroup.new(@sources, concurrency_model) if @sources.size > 0 end
__source_classes()
click to toggle source
# File lib/group_delegator/group_delegator_klasses.rb, line 27 def __source_classes @sources end
method_missing(m, *args, &block)
click to toggle source
# File lib/group_delegator/group_delegator_klasses.rb, line 36 def self.method_missing(m, *args, &block) if self.__all_class_methods.include? m resp = self.__class_source_group.forward(m, *args, &block) else raise NoMethodError, "#{self.class} can't find the class method #{m} in any of its sources" end end
new(*args)
click to toggle source
# File lib/group_delegator/group_delegator_klasses.rb, line 46 def initialize(*args) #changed self to self.class concurrency_model = self.class.__concurrency_model raise "No Source Classes set" unless self.class.__source_classes.size > 0 @__objs_by_class = {} proxied_objs = [] self.class.__source_classes.each do |klass| @__objs_by_class[klass] ||= [] proxied_obj = klass.new(*args) @__objs_by_class[klass] << proxied_obj end proxied_objs = @__objs_by_class.values.flatten #p proxied_objs #proxied_objs = self.class.__source_classes.map {|klass| klass.new(*args) } sources_data = SourceHelper.set_sources_data(proxied_objs) @source_obj_methods = sources_data[:source_methods] @source_objects = sources_data[:source_objs] @instance_source_group = SourceGroup.new(@source_objects, concurrency_model) end
Public Instance Methods
method_missing(m, *args, &block)
click to toggle source
# File lib/group_delegator/group_delegator_klasses.rb, line 66 def method_missing(m, *args, &block) if @source_obj_methods.include? m resp = @instance_source_group.forward(m, *args, &block) else raise NoMethodError, "#{self.class} object can't find the method #{m} in any of its sources" end end