def visit(*module_names, &block)
      if module_names.empty?
        raise ArgumentError,
              "At least one Modul#name must be passed to #{__method__} so the visitor(s) knows which Modules " \
                    "it/they can visit."
      end

      module_names.collect do |module_name|
        visitor = Metasploit::Model::Visitation::Visitor.new(
            :module_name => module_name,
            :parent => self,
            &block
        )
        visitor.valid!

        visitor_by_module_name[visitor.module_name] = visitor
      end
    end
def visit(*module_names, &block)
      if module_names.empty?
        raise ArgumentError,
              "At least one Modul#name must be passed to #{__method__} so the visitor(s) knows which Modules " \
                    "it/they can visit."
      end

      module_names.collect do |module_name|
        visitor = Metasploit::Model::Visitation::Visitor.new(
            :module_name => module_name,
            :parent => self,
            &block
        )
        visitor.valid!

        visitor_by_module_name[visitor.module_name] = visitor
      end
    end
Defines how to visit a node with one or more `Module#names` in its `Module#ancestors`.

 @param module_names [Array<String>] Names of class/module to be visited with block.
 @yield [node] Block instance_exec'd on instance of the class {#visit} was called.
 @yieldparam node [Object]
 @return [Array<Metasploit::Model::Visitation::Visitor>] visitors created.
 @raise [ArgumentError] if `module_names` is empty
 @raise [Metasploit::Model::Invalid] unless `block` is given.