diff --git a/award.rb b/award.rb index 5208232..efa7243 100644 --- a/award.rb +++ b/award.rb @@ -1 +1,60 @@ -Award = Struct.new(:name, :expires_in, :quality) +class Award + attr_accessor :name, :expires_in, :quality + + def initialize(name, expires_in, quality) + @name = name + @expires_in = expires_in + @quality = quality + end + + def update_quality + case name + when 'Blue Distinction Plus' + self.quality = 80 + when 'Blue Compare' + update_blue_compare_quality + when 'Blue First' + update_blue_first_quality + when 'Blue Star' + update_blue_star_quality + else + if expires_in <= 0 + self.quality = [quality - 2, 0].max + else + self.quality = [quality - 1, 0].max + end + end + + self.expires_in -= 1 unless name == 'Blue Distinction Plus' + end + + private + + def update_blue_compare_quality + if expires_in <= 0 + self.quality = 0 + elsif expires_in <= 5 + self.quality = [quality + 3, 50].min + elsif expires_in <= 10 + self.quality = [quality + 2, 50].min + else + self.quality = [quality + 1, 50].min + end + end + + def update_blue_first_quality + if expires_in <= 0 + self.quality = [quality + 2, 50].min + else + self.quality = [quality + 1, 50].min + end + end + + def update_blue_star_quality + if expires_in <= 0 + self.quality = [quality - 4, 0].max + else + self.quality = [quality - 2, 0].max + end + end +end diff --git a/update_quality.rb b/update_quality.rb index bd1f10f..ead906d 100644 --- a/update_quality.rb +++ b/update_quality.rb @@ -1,49 +1,5 @@ require 'award' 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 - end - end + awards.each(&:update_quality) 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 }