module Sandthorn::BoundedContext::ClassMethods

Public Instance Methods

aggregate_types() click to toggle source
# File lib/sandthorn/bounded_context.rb, line 4
def aggregate_types
  @aggregate_list = p_aggregate_types(self)
end

Private Instance Methods

classes_in(namespace) click to toggle source
# File lib/sandthorn/bounded_context.rb, line 22
def classes_in(namespace)
  namespace.constants.map(&namespace.method(:const_get)).grep(Class)
end
modules_in(namespace, classes) click to toggle source
# File lib/sandthorn/bounded_context.rb, line 26
def modules_in(namespace, classes)
  namespace.constants.map(&namespace.method(:const_get)).grep(Module).delete_if do |m| 
    classes.include?(m) || m == Sandthorn::BoundedContext::ClassMethods
  end
end
p_aggregate_types(bounded_context_module) click to toggle source
# File lib/sandthorn/bounded_context.rb, line 10
def p_aggregate_types(bounded_context_module)
  return [] unless bounded_context_module.respond_to?(:constants)
  
  classes = classes_in(bounded_context_module)
  aggregate_list = classes.select { |item| item.include?(Sandthorn::AggregateRoot) }
  modules = modules_in(bounded_context_module, classes)
  
  aggregate_list += modules.flat_map { |m| p_aggregate_types(m) }
  
  aggregate_list
end