diff --git a/lib/activejob-status/batch.rb b/lib/activejob-status/batch.rb index fb05efa..d0d4801 100644 --- a/lib/activejob-status/batch.rb +++ b/lib/activejob-status/batch.rb @@ -9,26 +9,23 @@ def initialize(jobs) end def status - if @jobs.all? { |job| status_for(job) == :queued } - :queued - elsif @jobs.any? { |job| status_for(job) == :failed } + statuses = read.values.pluck(:status) + + if statuses.include?(:failed) :failed - elsif @jobs.all? { |job| status_for(job) == :completed } + elsif statuses.all?(:queued) + :queued + elsif statuses.all?(:completed) :completed else :working end end - private - - def statuses - @statuses ||= @storage.read_multi(@jobs) - end - - def status_for(job) - statuses.dig(@storage.key(job), :status) + def read + @storage.read_multi(@jobs) end + alias_method :to_h, :read end end end diff --git a/lib/activejob-status/storage.rb b/lib/activejob-status/storage.rb index 455fb73..d0c9235 100644 --- a/lib/activejob-status/storage.rb +++ b/lib/activejob-status/storage.rb @@ -27,7 +27,9 @@ def read(job) end def read_multi(jobs) - store.read_multi(*jobs.map { |job| key(job) }) + keys = jobs.map { |job| key(job) } + data = store.read_multi(*keys) + keys.index_with { |k| data.fetch(k, {}) } end def write(job, message, force: false)