From 71195f432b01bfc19aef262bd2beca5d9cfa5d6c Mon Sep 17 00:00:00 2001 From: Piotr Szotkowski Date: Sat, 17 Jun 2017 11:40:41 +0200 Subject: [PATCH] Refactor ByStage job sorting --- lib/travis/scheduler/limit/by_stage.rb | 14 +++----------- lib/travis/scheduler/record/job.rb | 4 ++++ spec/travis/scheduler/record/job_spec.rb | 6 +++++- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/travis/scheduler/limit/by_stage.rb b/lib/travis/scheduler/limit/by_stage.rb index 980b1334..479848ba 100644 --- a/lib/travis/scheduler/limit/by_stage.rb +++ b/lib/travis/scheduler/limit/by_stage.rb @@ -32,8 +32,9 @@ def queueable def jobs @jobs ||= begin # TODO would it make sense to cache these on `state`? - jobs = Job.where(source_id: job.source_id) - sort(jobs).map { |job| attrs(job) } + Job.where(source_id: job.source_id) + .sort_by(&:stage_number_parts) + .map(&method(:attrs)) end end @@ -45,15 +46,6 @@ def attrs(job) } end - def sort(jobs) - num = ->(job) { job.stage_number.split('.').map(&:to_i) } - jobs.sort { |lft, rgt| num.(lft) <=> num.(rgt) } - end - - def stages - jobs.map { |job| job[:stage] } - end - def report reports << MSGS[:max_stage] % ["build #{job.source_id}", job.stage.number, queueable.size] end diff --git a/lib/travis/scheduler/record/job.rb b/lib/travis/scheduler/record/job.rb index cfb9368a..c9c38e16 100644 --- a/lib/travis/scheduler/record/job.rb +++ b/lib/travis/scheduler/record/job.rb @@ -57,6 +57,10 @@ def finished? FINISHED_STATES.include?(state.try(:to_sym)) end + def stage_number_parts + stage_number.split('.').map(&:to_i) + end + def queueable=(value) if value queueable || create_queueable diff --git a/spec/travis/scheduler/record/job_spec.rb b/spec/travis/scheduler/record/job_spec.rb index a7bd4e3e..2a2cb3bd 100644 --- a/spec/travis/scheduler/record/job_spec.rb +++ b/spec/travis/scheduler/record/job_spec.rb @@ -1,8 +1,12 @@ describe Job do let(:config) { { rvm: '1.8.7' } } - let(:job) { FactoryGirl.create(:job, config: config).reload } + let(:job) { FactoryGirl.create(:job, config: config, stage_number: '1.2').reload } it 'deserializes config' do expect(job.config).to be_a(Hash) end + + it 'renders its stage number numeric parts' do + expect(job.stage_number_parts).to eq [1, 2] + end end