class I18n::Tasks::Scanners::ScannerMultiplexer
Run multiple {Scanner Scanners} and merge their results. @note The scanners are run concurrently. A thread is spawned per each scanner. @since 0.9.0
Public Class Methods
new(scanners:)
click to toggle source
@param scanners [Array<Scanner>]
Calls superclass method
# File lib/i18n/tasks/scanners/scanner_multiplexer.rb, line 11 def initialize(scanners:) super() @scanners = scanners end
Public Instance Methods
keys()
click to toggle source
Collect the results of all the scanners. Occurrences of a key from multiple scanners are merged.
@note The scanners are run concurrently. A thread is spawned per each scanner. @return (see Scanner#keys
)
# File lib/i18n/tasks/scanners/scanner_multiplexer.rb, line 20 def keys Results::KeyOccurrences.merge_keys collect_results.flatten(1) end
Private Instance Methods
collect_results()
click to toggle source
@return [Array<Array<Results::KeyOccurrences>>]
# File lib/i18n/tasks/scanners/scanner_multiplexer.rb, line 27 def collect_results return [@scanners[0].keys] if @scanners.length == 1 Array.new(@scanners.length).tap do |results| results_mutex = Mutex.new @scanners.map.with_index do |scanner, i| Thread.start do scanner_results = scanner.keys results_mutex.synchronize do results[i] = scanner_results end end end.each(&:join) end end