Sha256: b00355dcea684dc52ce14e664c7e80ef5b1c5ca59d1c39a688fc0d4e77ecc755
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 KB
Contents
require 'i18n/tasks/scanners/scanner' module I18n::Tasks::Scanners # 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 class ScannerMultiplexer < Scanner # @param scanners [Array<Scanner>] def initialize(scanners:) @scanners = scanners end # 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) def keys collect_results.inject({}) { |results_by_key, key_occurences| key_occurences.each do |key_occurrence| (results_by_key[key_occurrence.key] ||= []) << key_occurrence.occurrences end results_by_key }.map { |key, all_occurrences| occurrences = all_occurrences.flatten(1) occurrences.sort_by!(&:path) occurrences.uniq! KeyOccurrences.new(key: key, occurrences: occurrences) } end private # @return Array<Array<KeyOccurrences>> def collect_results return [@scanners[0].keys] if @scanners.length == 1 Array.new(@scanners.length).tap do |results| @scanners.map.with_index { |scanner, i| Thread.start { results[i] = scanner.keys } }.each(&:join) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
i18n-tasks-0.9.0.rc1 | lib/i18n/tasks/scanners/scanner_multiplexer.rb |