class Metasploit::ERD::Cluster
A cluster of `Class<ActiveRecord::Base>` that are connected by `belongs_to` associations so that all foreign keys are paired with their appropriate primary keys.
Public Class Methods
new(*roots)
click to toggle source
@param roots [Array<Class<ActiveRecord::Base>>] starting `ActiveRecord::Base` subclasses to seed {#class_set}.
# File lib/metasploit/erd/cluster.rb, line 9 def initialize(*roots) class_queue.concat(roots) end
Public Instance Methods
class_set()
click to toggle source
Clases that are reachable through `belongs_to` associations on classes passed as `roots` to {#initialize}.
@return [Set<Class<ActiveRecord::Base>>]
# File lib/metasploit/erd/cluster.rb, line 16 def class_set until class_queue.empty? klass = class_queue.pop # add immediately to visited set in case there are recursive associations visited_class_set.add klass class_entity = Metasploit::ERD::Entity::Class.new(klass) class_entity.class_set.each do |set_class| unless visited_class_set.include? set_class class_queue << set_class end end superclass = klass.superclass unless superclass == ActiveRecord::Base || visited_class_set.include?(superclass) class_queue << superclass end end visited_class_set end
Private Instance Methods
class_queue()
click to toggle source
# File lib/metasploit/erd/cluster.rb, line 42 def class_queue @class_queue ||= [] end
visited_class_set()
click to toggle source
# File lib/metasploit/erd/cluster.rb, line 46 def visited_class_set @visited_class_set ||= Set.new end