diff --git a/README.md b/README.md index 43d9b8d..c974ea1 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,11 @@ Pretty basic. But here is where it gets interesting... - The quality of an award is never negative. - - "Blue First" awards actually increase in quality the older they get + - "Blue First" awards actually increase in quality the older they get. - - The quality of an award is never more than 50 + - The quality of an award is never more than 50. - - "Blue Distinction Plus", being a highly sought distinction, never decreases in quality + - "Blue Distinction Plus", being a highly sought distinction, never decreases in quality. - "Blue Compare", similar to "Blue First", increases in quality as the expiration date approaches; Quality increases by 2 when there are 10 days or less left, and by 3 where there are 5 days or less left, but quality value drops to 0 after the expiration date. diff --git a/update_quality.rb b/update_quality.rb index bd1f10f..f0509e2 100644 --- a/update_quality.rb +++ b/update_quality.rb @@ -2,48 +2,66 @@ def update_quality(awards) awards.each do |award| - if award.name != 'Blue First' && award.name != 'Blue Compare' - if award.quality > 0 - if award.name != 'Blue Distinction Plus' - award.quality -= 1 - end - end - else - if award.quality < 50 - award.quality += 1 - if award.name == 'Blue Compare' - if award.expires_in < 11 - if award.quality < 50 - award.quality += 1 - end - end - if award.expires_in < 6 - if award.quality < 50 - award.quality += 1 - end - end - end - end - end - if award.name != 'Blue Distinction Plus' - award.expires_in -= 1 - end - if award.expires_in < 0 - if award.name != 'Blue First' - if award.name != 'Blue Compare' - if award.quality > 0 - if award.name != 'Blue Distinction Plus' - award.quality -= 1 - end - end - else - award.quality = award.quality - award.quality - end - else - if award.quality < 50 - award.quality += 1 - end - end + case award.name + when 'Blue First' + blue_first(award) + expire_decay(award) + + when 'Blue Compare' + blue_compare(award) + expire_decay(award) + + when 'Blue Distinction Plus' + blue_dist_plus(award) + + when 'Blue Star' + blue_star(award) + expire_decay(award) + + else + normal_award(award) + expire_decay(award) end + + check_quality_upper(award) + check_quality_lower(award) end end + +def check_quality_upper(award) + award.quality = 50 if award.quality > 50 and award.name != 'Blue Distinction Plus' +end + +def check_quality_lower(award) + award.quality = 0 if award.quality < 0 +end + +def expire_decay(award) + award.expires_in -= 1 +end + +def normal_award(award) + award.quality -= 1 + award.quality -= 1 if award.expires_in <= 0 +end + +def blue_first(award) + award.quality += 1 + award.quality += 1 if award.expires_in <= 0 +end + +def blue_compare(award) + award.quality += 1 + award.quality += 1 if award.expires_in < 11 + award.quality += 1 if award.expires_in < 6 + award.quality = award.quality - award.quality if award.expires_in <= 0 +end + +def blue_dist_plus(award) + award.quality = 80 +end + +def blue_star(award) + award.quality -= 2 + award.quality -= 2 if award.expires_in <= 0 +end diff --git a/update_quality_spec.rb b/update_quality_spec.rb index 973940d..879da5a 100644 --- a/update_quality_spec.rb +++ b/update_quality_spec.rb @@ -177,7 +177,6 @@ end context 'given a Blue Star award' do - before { pending } let(:name) { 'Blue Star' } before { award.expires_in.should == initial_expires_in-1 }