class RankMirror::Mirrors

Public Class Methods

new(mirrors) click to toggle source
# File lib/rankmirror/mirrors.rb, line 4
def initialize(mirrors)
        @mirrors = mirrors
end

Public Instance Methods

sort_by_speed(options) click to toggle source
# File lib/rankmirror/mirrors.rb, line 8
def sort_by_speed(options)
        speed_matrix = Hash.new
        size = @mirrors.length
        jobs = Queue.new
        @mirrors.each {|i| jobs.push i}

        workers = size.times.map do
                Thread.new do 
                        begin
                                while x = jobs.pop(true)
                                        x << "/" unless x.index(/\/$/)
                                        uri = x + options.path + options.file
                                        speed = RankMirror::Speed.new(uri).get
                                        speed_matrix[x] = speed
                                end
                        rescue ThreadError
                        end
                end
        end

        workers.map(&:join)

        speed_sorted = speed_matrix.values.sort.reverse
        sorted = Hash.new
        speed_sorted.each {|v| sorted[speed_matrix.key(v)] = v}
        
        return sorted
end