lib/zold/remotes.rb in zold-0.13.37 vs lib/zold/remotes.rb in zold-0.13.38

- old
+ new

@@ -108,10 +108,11 @@ def initialize(file, network: 'test') raise 'File can\'t be nil' if file.nil? @file = file raise 'Network can\'t be nil' if network.nil? @network = network + @mutex = Mutex.new end def all list = load max_score = list.map { |r| r[:score] }.max || 0 @@ -221,34 +222,38 @@ end private def load - raw = CSV.read(file).map do |r| - { - host: r[0], - port: r[1].to_i, - score: r[2].to_i, - errors: r[3].to_i - } + @mutex.synchronize do + raw = CSV.read(file).map do |r| + { + host: r[0], + port: r[1].to_i, + score: r[2].to_i, + errors: r[3].to_i + } + end + raw.reject { |r| !r[:host] || r[:port].zero? }.map do |r| + r[:home] = URI("http://#{r[0]}:#{r[1]}/") + r + end end - raw.reject { |r| !r[:host] || r[:port].zero? }.map do |r| - r[:home] = URI("http://#{r[0]}:#{r[1]}/") - r - end end def save(list) - AtomicFile.new(file).write( - list.map do |r| - [ - r[:host], - r[:port], - r[:score], - r[:errors] - ].join(',') - end.join("\n") - ) + @mutex.synchronize do + AtomicFile.new(file).write( + list.map do |r| + [ + r[:host], + r[:port], + r[:score], + r[:errors] + ].join(',') + end.join("\n") + ) + end end def file reset unless File.exist?(@file) @file