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