diff --git a/swift/Sources/GildedRose/GildedRose.swift b/swift/Sources/GildedRose/GildedRose.swift index 7790197b..4644e48e 100644 --- a/swift/Sources/GildedRose/GildedRose.swift +++ b/swift/Sources/GildedRose/GildedRose.swift @@ -6,94 +6,8 @@ public class GildedRose { } public func updateQuality() { - for item in items { - let customFactoryObj = CustomisedItemFactory() - let customItem = customFactoryObj.getCustomisedItem(item: item) - customItem.updateCustomItemQuality() - } + let customFactoryObj = CustomisedItemFactory() + _ = items.map({customFactoryObj.getCustomisedItem(item: $0).updateCustomItemQuality()}) + } - - /* public func updateQuality() { - for item in items { - switch item.name { - case ItemNameConstants.kBackstagePassesItem: - item.sellIn = item.sellIn - 1 - if item.sellIn < 0 { - item.quality = 0 - } - else { - item.quality = item.quality < 50 ? item.quality + 1 : 50 - if item.sellIn < 10 { - item.quality = item.quality < 50 ? item.quality + 1 : 50 - } - if item.sellIn < 5 { - item.quality = item.quality < 50 ? item.quality + 1 : 50 - } - } - case ItemNameConstants.kAgedBrieItem: - item.sellIn = item.sellIn - 1 - item.quality = item.quality < 50 ? (item.quality + 1) : 50 - case ItemNameConstants.kSulfurasItem: - break - default: - item.sellIn = item.sellIn - 1 - item.quality = item.quality > 0 ? (item.quality - 1) : 0 - if(item.sellIn < 0) { - item.quality = item.quality > 0 ? (item.quality - 1) : 0 - } - } - } - } - - public func updateQuality() { - for i in 0.. 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 - } - } - } - } - } - - 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 - } - } - } - } - } */ } diff --git a/swift/Sources/GildedRose/Items/AgedBrieItem.swift b/swift/Sources/GildedRose/Items/AgedBrieItem.swift index 92191db2..b3a17d37 100644 --- a/swift/Sources/GildedRose/Items/AgedBrieItem.swift +++ b/swift/Sources/GildedRose/Items/AgedBrieItem.swift @@ -9,13 +9,16 @@ import Foundation struct AgedBrieItem: CustomisedItemProtocol, ItemSellInDaysProtocol, ItemQualityProtocol { var item: Item - + public init(item: Item) { self.item = item } + func updateCustomItemQuality() { // update the sell in days + reduceSellInDaysByOne(item: item) + // Increment the Item quality by 1 if the quality is less than 50 guard isItemUnderHighestQuality(item: item) else {return} increaseQuality(for: item, by: 1) diff --git a/swift/Sources/GildedRose/Items/BackstagePassesItem.swift b/swift/Sources/GildedRose/Items/BackstagePassesItem.swift index ab5ffeaf..1d040ced 100644 --- a/swift/Sources/GildedRose/Items/BackstagePassesItem.swift +++ b/swift/Sources/GildedRose/Items/BackstagePassesItem.swift @@ -13,28 +13,28 @@ struct BackstagePassesItem: CustomisedItemProtocol, ItemQualityProtocol, ItemSel public init(item: Item) { self.item = item } + func updateCustomItemQuality() { reduceSellInDaysByOne(item: item) - if isSellInDaysMoreThanOrEqualTo(days: 10) { + guard !HasSellInDatePassed(item: item) else { + setItemQualityToZero(item: item) + return + } + guard isItemUnderHighestQuality(item: item) else { + setItemQualityToFifty(item: item) + return + } + switch item.sellIn { + case 10...: increaseQuality(for: item, by: 1) - } - else if isSellInDaysMoreThanOrEqualTo(days: 5) { + case 5..<10: increaseQuality(for: item, by: 2) - } - else if isSellInDaysMoreThanOrEqualTo(days: 0) { + case 0..<5: increaseQuality(for: item, by: 3) - } - if HasSellInDatePassed(item: item) { - item.quality = ValueConstants.kLowestQualityValue - } - if !isItemUnderHighestQuality(item: item) { - item.quality = ValueConstants.kHightestQualityValue + default: + break } } - - private func isSellInDaysMoreThanOrEqualTo(days: Int) -> Bool { - return item.sellIn >= days - } } diff --git a/swift/Sources/GildedRose/Items/CustomisedItem.swift b/swift/Sources/GildedRose/Items/CustomisedItem.swift index b3beff4e..ce7f1f31 100644 --- a/swift/Sources/GildedRose/Items/CustomisedItem.swift +++ b/swift/Sources/GildedRose/Items/CustomisedItem.swift @@ -45,4 +45,12 @@ extension ItemQualityProtocol { func isItemOverLowestQuality(item: Item) -> Bool { return item.quality > ValueConstants.kLowestQualityValue } + + func setItemQualityToZero(item: Item) { + item.quality = ValueConstants.kLowestQualityValue + } + + func setItemQualityToFifty(item: Item) { + item.quality = ValueConstants.kHightestQualityValue + } } diff --git a/swift/Sources/GildedRose/Items/StandardItem.swift b/swift/Sources/GildedRose/Items/StandardItem.swift index 6552e96e..34dd80c1 100644 --- a/swift/Sources/GildedRose/Items/StandardItem.swift +++ b/swift/Sources/GildedRose/Items/StandardItem.swift @@ -8,7 +8,6 @@ import Foundation struct StandardItem: CustomisedItemProtocol, ItemQualityProtocol, ItemSellInDaysProtocol { - var item: Item public init(item: Item) {