diff --git a/ruby/gilded_rose.rb b/ruby/gilded_rose.rb index 3c260621..ffd7721e 100644 --- a/ruby/gilded_rose.rb +++ b/ruby/gilded_rose.rb @@ -6,48 +6,43 @@ class GildedRose def update_quality() @items.each do |item| - if item.name != "Aged Brie" and item.name != "Backstage passes to a TAFKAL80ETC concert" - if item.quality > 0 - if item.name != "Sulfuras, Hand of Ragnaros" - item.quality = item.quality - 1 - end - end - else - if item.quality < 50 - item.quality = item.quality + 1 - if item.name == "Backstage passes to a TAFKAL80ETC concert" - if item.sell_in < 11 - if item.quality < 50 - item.quality = item.quality + 1 - end - end - if item.sell_in < 6 - if item.quality < 50 - item.quality = item.quality + 1 - end - end - end - end - end - if item.name != "Sulfuras, Hand of Ragnaros" + case item.name + when "Aged Brie" item.sell_in = item.sell_in - 1 - end - if item.sell_in < 0 - if item.name != "Aged Brie" - if item.name != "Backstage passes to a TAFKAL80ETC concert" - if item.quality > 0 - if item.name != "Sulfuras, Hand of Ragnaros" - item.quality = item.quality - 1 - end - end - else - item.quality = item.quality - item.quality - end + item.quality = item.quality + 1 unless item.quality >= 50 + return + when "Backstage passes to a TAFKAL80ETC concert" + item.sell_in = item.sell_in - 1 + if item.sell_in < 0 + item.quality = 0 + elsif item.sell_in < 5 + item.quality = item.quality + 3 + elsif item.sell_in < 10 + item.quality = item.quality + 2 else - if item.quality < 50 - item.quality = item.quality + 1 - end + item.quality = item.quality + 1 end + return + when "Conjured item" + item.sell_in = item.sell_in - 1 + if item.sell_in < 0 + item.quality = item.quality - 4 + else + item.quality = item.quality - 2 + end + item.quality = 0 if item.quality < 0 + return + when "Sulfuras, Hand of Ragnaros" + return + else + item.sell_in = item.sell_in - 1 + if item.sell_in < 0 + item.quality = item.quality - 2 + else + item.quality = item.quality - 1 + end + item.quality = 0 if item.quality < 0 + return end end end diff --git a/ruby/gilded_rose_spec.rb b/ruby/gilded_rose_spec.rb index 33a1fec3..da7559a6 100644 --- a/ruby/gilded_rose_spec.rb +++ b/ruby/gilded_rose_spec.rb @@ -45,10 +45,12 @@ describe GildedRose do it "'Sulfuras', being a legendary item, never has to be sold or decreases in Quality" do items = [Item.new("Sulfuras, Hand of Ragnaros", 1, 49)] - item = items.first GildedRose.new(items).update_quality() expect(items[0].sell_in).to eq 1 expect(items[0].quality).to eq 49 + 10.times { GildedRose.new(items).update_quality() } + expect(items[0].sell_in).to eq 1 + expect(items[0].quality).to eq 49 end it "'Backstage passes', like aged brie, increases in Quality as its SellIn value approaches" do @@ -84,6 +86,16 @@ describe GildedRose do expect(items[0].sell_in).to eq -1 end + it "'Conjured' items degrade in Quality twice as fast as normal items" do + items = [Item.new("Conjured item", 10, 10)] + GildedRose.new(items).update_quality() + expect(items[0].quality).to eq 8 + expect(items[0].sell_in).to eq 9 + 4.times { GildedRose.new(items).update_quality() } + expect(items[0].quality).to eq 0 + expect(items[0].sell_in).to eq 5 + end + end end