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