Sha256: 9e47ba0da0ef4b02a75b07abeffacdbd534c8bfc815c29435e926aa0870775f9

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

require 'tsort'

module Watir
  module Generator
    module Base
      class IDLSorter
        include TSort

        def initialize(interfaces)
          @interfaces = {}

          interfaces.each do |interface|
            @interfaces[interface.name] ||= []
            interface.inherits.each do |inherit|
              (@interfaces[inherit.name] ||= []) << interface.name
            end
          end
        end

        def print
          @visited = []
          sort.each { |node| print_node(node) }
        end

        def sort
          tsort.reverse
        end

        def tsort_each_node(&blk)
          @interfaces.each_key(&blk)
        end

        def tsort_each_child(node, &blk)
          @interfaces[node].each(&blk)
        end

        private

        def print_node(node, indent = 0)
          return if @visited.include?(node)

          @visited << node
          puts ' ' * indent + node
          tsort_each_child(node) { |child| print_node(child, indent + 2) }
        end
      end # IDLSorter
    end # Base
  end # Generator
end # Watir

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
watir-6.14.0 lib/watir/generator/base/idl_sorter.rb