Sha256: 60d50d2b5f89de8e7a803e99152091e93d939c3f493cf37fe16c5413ffa05420

Contents?: true

Size: 729 Bytes

Versions: 2

Compression:

Stored size: 729 Bytes

Contents

module RankMirror
	class Mirrors

		def initialize(mirrors)
			@mirrors = mirrors
		end

		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
	end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rankmirror-1.1.0 lib/rankmirror/mirrors.rb
rankmirror-1.0.0 lib/rankmirror/mirrors.rb