From d0cb683b03454afc830e5bc37af9633753757cbf Mon Sep 17 00:00:00 2001 From: Murat Bataray Date: Thu, 9 Feb 2023 23:42:39 +0100 Subject: [PATCH] Extracted range checks and added helper methods + constants --- swift/Sources/GildedRose/GildedRose.swift | 99 ++++++++++++----------- 1 file changed, 53 insertions(+), 46 deletions(-) diff --git a/swift/Sources/GildedRose/GildedRose.swift b/swift/Sources/GildedRose/GildedRose.swift index ea0aa861..6ce65fdf 100644 --- a/swift/Sources/GildedRose/GildedRose.swift +++ b/swift/Sources/GildedRose/GildedRose.swift @@ -1,59 +1,66 @@ +import Foundation + public class GildedRose { + private static let agedBrieString = "Aged Brie" + private static let backstagePassString = "Backstage passes to a TAFKAL80ETC concert" + private static let sulfurasString = "Sulfuras, Hand of Ragnaros" + + private static let itemQualityDegradationAmount = -1 + private static let minimumQuality = 0 + private static let maximumQuality = 50 + var items: [Item] public init(items: [Item]) { self.items = items } + + private func adjustQuality(_ item: Item, adjustment: Int) { + let adjustedQuality = item.quality + adjustment + if adjustedQuality <= GildedRose.maximumQuality && adjustedQuality >= GildedRose.minimumQuality { + item.quality += adjustment + } + } - public func updateQuality() { - for i in 0 ..< items.count { - if items[i].name != "Aged Brie", items[i].name != "Backstage passes to a TAFKAL80ETC concert" { - if items[i].quality > 0 { - if items[i].name != "Sulfuras, Hand of Ragnaros" { - items[i].quality = items[i].quality - 1 - } - } - } else { - if items[i].quality < 50 { - items[i].quality = items[i].quality + 1 - - if items[i].name == "Backstage passes to a TAFKAL80ETC concert" { - if items[i].sellIn < 11 { - if items[i].quality < 50 { - items[i].quality = items[i].quality + 1 - } - } - - if items[i].sellIn < 6 { - if items[i].quality < 50 { - items[i].quality = items[i].quality + 1 - } - } - } - } + private func updateItemQuality(_ item: Item) { + if item.name != GildedRose.agedBrieString, item.name != GildedRose.backstagePassString { + if item.name != GildedRose.sulfurasString { + self.adjustQuality(item, adjustment: item.name.lowercased().range(of: "conjured") != nil ? GildedRose.itemQualityDegradationAmount * 2 : GildedRose.itemQualityDegradationAmount) } - - if items[i].name != "Sulfuras, Hand of Ragnaros" { - items[i].sellIn = items[i].sellIn - 1 - } - - if items[i].sellIn < 0 { - if items[i].name != "Aged Brie" { - if items[i].name != "Backstage passes to a TAFKAL80ETC concert" { - if items[i].quality > 0 { - if items[i].name != "Sulfuras, Hand of Ragnaros" { - items[i].quality = items[i].quality - 1 - } - } - } else { - items[i].quality = items[i].quality - items[i].quality - } - } else { - if items[i].quality < 50 { - items[i].quality = items[i].quality + 1 - } + } else { + self.adjustQuality(item, adjustment: 1) + + if item.name == GildedRose.backstagePassString { + if item.sellIn < 11 { + self.adjustQuality(item, adjustment: 1) + } + + if item.sellIn < 6 { + self.adjustQuality(item, adjustment: 1) } } } + if item.name != GildedRose.sulfurasString { + item.sellIn = item.sellIn - 1 + } + if item.sellIn < 0 { + if item.name != GildedRose.agedBrieString { + if item.name != GildedRose.backstagePassString { + if item.name != GildedRose.sulfurasString { + self.adjustQuality(item, adjustment: item.name.lowercased().range(of: "conjured") != nil ? GildedRose.itemQualityDegradationAmount * 2 : GildedRose.itemQualityDegradationAmount) + } + } else { + self.adjustQuality(item, adjustment: -item.quality) + } + } else { + self.adjustQuality(item, adjustment: 1) + } + } + } + + public func updateQuality() { + items.forEach({ item in + updateItemQuality(item) + }) } }