#---
# Excerpted from "Programming Ruby 3.2",
# published by The Pragmatic Bookshelf.
# Copyrights apply to this code. It may not be used to create training material,
# courses, books, articles, and the like. Contact us if you are in doubt.
# We make no guarantees that this code is fit for any purpose.
# Visit https://pragprog.com/titles/ruby6 for more book information.
#---
require "concurrent-ruby"
require "yaml"

promises = Dir.children("./code/tut_threads/data").sort.map do |name|
  Concurrent::Promises
    .future(name) { YAML.safe_load_file("./code/tut_threads/data/#{it}") }
    .then { Float(it["price"]) * Integer(it["in_stock"]) }
end

puts promises.map { it.value }.sum
