Sha256: 0a83aea1ec37f207fbb6452b62946f77d648ef71720c6d5c60e4dd31dfb3a659

Contents?: true

Size: 1.68 KB

Versions: 5

Compression:

Stored size: 1.68 KB

Contents

# Author::    Nicolas Despres  <nicolas.despres@gmail.com>.
# Copyright:: Copyright (c) 2004, 2005 TTK team. All rights reserved.
# License::   LGPL
# $Id: Master.rb 567 2005-04-13 08:00:06Z polrop $


module TTK

  module Testers

    class Master < Tester
      include Concrete

      def initialize(service, name, sub_testers)
        super(service, name)
        @sub_testers = sub_testers
      end

      def select_tester(&block)
        query_node = super(&block)
        self.sub_testers.each do |uri, sub_tester|
          sub_query_node = sub_tester.select_tester(&block)
          unless sub_query_node.nil?
            if query_node.nil?
              query_node = QueryNode.new(@service.uri,
                                         @config[:tester_name],
                                         @config[:tester_type])
            end
            query_node << sub_query_node
          end
        end
        query_node
      end

      def query_tester(query_node)
        super
        sub_testers = self.sub_testers
        query_node.each do |sub_query_node|
          sub_tester = sub_testers[sub_query_node.uri]
          sub_tester.query_tester(sub_query_node) if sub_tester
        end
        nil
      end

      def dynamic_select(&block)
        #FIXME: manage concurrency
        scores = self.sub_testers.map do |uri, sub_tester|
          sub_tester.dynamic_select(&block)
        end
        best = scores.max
        wrap(best.tester)
        best
      end

      def sub_testers
        @sub_testers.synchronize { @sub_testers.dup }
      end

      protected
      def wrap(obj)
        DRb::DRbObject.new(obj)
      end

    end # class Master

  end # module Testers

end # module TTK

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ttk-0.1.576 lib/ttk/testers/Master.rb
ttk-0.1.580 lib/ttk/testers/Master.rb
ttk-0.2.0 lib/ttk/testers/Master.rb
ttk-0.1.579 lib/ttk/testers/Master.rb
ttk-0.2.1 lib/ttk/testers/Master.rb