extracted bulk of if checks and cleaned up method

This commit is contained in:
Murat Bataray 2023-02-10 00:22:43 +01:00
parent 2d5d980dd2
commit 7a7102c9cb

View File

@ -4,8 +4,8 @@ public class GildedRose {
private static let agedBrieString = "Aged Brie" private static let agedBrieString = "Aged Brie"
private static let backstagePassString = "Backstage passes to a TAFKAL80ETC concert" private static let backstagePassString = "Backstage passes to a TAFKAL80ETC concert"
private static let sulfurasString = "Sulfuras, Hand of Ragnaros" private static let sulfurasString = "Sulfuras, Hand of Ragnaros"
private static let conjuredString = "conjured"
private static let itemQualityDegradationAmount = -1
private static let minimumQuality = 0 private static let minimumQuality = 0
private static let maximumQuality = 50 private static let maximumQuality = 50
@ -15,6 +15,11 @@ public class GildedRose {
self.items = items self.items = items
} }
private func calculateDegradeRate(_ item: Item, isExpired: Bool) -> Int {
let degradeRate = item.name.lowercased().range(of: GildedRose.conjuredString) != nil ? -2 : -1
return isExpired ? degradeRate * 2 : degradeRate
}
private func adjustQuality(_ item: Item, adjustment: Int) { private func adjustQuality(_ item: Item, adjustment: Int) {
let adjustedQuality = item.quality + adjustment let adjustedQuality = item.quality + adjustment
if adjustedQuality <= GildedRose.maximumQuality && adjustedQuality >= GildedRose.minimumQuality { if adjustedQuality <= GildedRose.maximumQuality && adjustedQuality >= GildedRose.minimumQuality {
@ -22,42 +27,34 @@ public class GildedRose {
} }
} }
private func updateItemQuality(_ item: Item) { private func adjustBackstagePassQuality(_ item: Item, isExpired: Bool) {
let itemQualityDegradationAmount = item.name.lowercased().range(of: "conjured") != nil ? GildedRose.itemQualityDegradationAmount * 2 : GildedRose.itemQualityDegradationAmount self.adjustQuality(item, adjustment: 1)
if item.sellIn < 11 {
if item.name != GildedRose.agedBrieString, item.name != GildedRose.backstagePassString {
if item.name != GildedRose.sulfurasString {
self.adjustQuality(item, adjustment: itemQualityDegradationAmount)
}
} else {
self.adjustQuality(item, adjustment: 1) self.adjustQuality(item, adjustment: 1)
}
if item.sellIn < 6 {
self.adjustQuality(item, adjustment: 1)
}
if isExpired {
self.adjustQuality(item, adjustment: -item.quality)
}
}
if item.name == GildedRose.backstagePassString { private func updateItemQuality(_ item: Item) {
if item.sellIn < 11 { let isExpired = item.sellIn < 1
self.adjustQuality(item, adjustment: 1) let itemQualityDegradationAmount = self.calculateDegradeRate(item, isExpired: isExpired)
} if item.name != GildedRose.agedBrieString && item.name != GildedRose.backstagePassString && item.name != GildedRose.sulfurasString {
self.adjustQuality(item, adjustment: itemQualityDegradationAmount)
if item.sellIn < 6 { }
self.adjustQuality(item, adjustment: 1) if item.name == GildedRose.agedBrieString {
} self.adjustQuality(item, adjustment: isExpired ? 2 : 1)
} }
if item.name == GildedRose.backstagePassString {
self.adjustBackstagePassQuality(item, isExpired: isExpired)
} }
if item.name != GildedRose.sulfurasString { if item.name != GildedRose.sulfurasString {
item.sellIn = item.sellIn - 1 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: itemQualityDegradationAmount)
}
} else {
self.adjustQuality(item, adjustment: -item.quality)
}
} else {
self.adjustQuality(item, adjustment: 1)
}
}
} }
public func updateQuality() { public func updateQuality() {