diff --git a/swift/Sources/GildedRose/CustomisedItemFactory.swift b/swift/Sources/GildedRose/CustomisedItemFactory.swift index 40410e2e..8e16ec76 100644 --- a/swift/Sources/GildedRose/CustomisedItemFactory.swift +++ b/swift/Sources/GildedRose/CustomisedItemFactory.swift @@ -7,8 +7,12 @@ import Foundation +protocol CustomisedItem { + func updateItemState() +} + class CustomisedItemFactory { - func getCustomisedItem(item: Item) -> CustomisedItemProtocol { + func getCustomisedItem(item: Item) -> CustomisedItem { switch item.name { case ItemNameConstants.kAgedBrieItem: return AgedBrieItem(item: item) diff --git a/swift/Sources/GildedRose/GildedRose.swift b/swift/Sources/GildedRose/GildedRose.swift index d1a5702e..3b4746b5 100644 --- a/swift/Sources/GildedRose/GildedRose.swift +++ b/swift/Sources/GildedRose/GildedRose.swift @@ -8,6 +8,5 @@ public class GildedRose { public func updateQuality() { let customFactoryObj = CustomisedItemFactory() _ = items.map({customFactoryObj.getCustomisedItem(item: $0).updateItemState()}) - } } diff --git a/swift/Sources/GildedRose/ItemQualityUpdater.swift b/swift/Sources/GildedRose/ItemQualityUpdater.swift new file mode 100644 index 00000000..b4f74e8f --- /dev/null +++ b/swift/Sources/GildedRose/ItemQualityUpdater.swift @@ -0,0 +1,34 @@ +// +// File.swift +// +// +// Created by Manali Mogre on 17/08/2020. +// + +import Foundation + +protocol ItemQualityUpdater { + var item: Item {get set} +} + +extension ItemQualityUpdater { + var isItemUnderHighestQuality: Bool { + return item.quality < ValueConstants.kHightestQualityValue + } + + var isItemMoreThanLowestQuality: Bool { + return item.quality > ValueConstants.kLowestQualityValue + } + + func reduceItemQuality(by value:Int) { + item.quality -= value + } + + func increaseItemQuality(by value:Int) { + item.quality += value + } + + func setItemQuality(to value: Int){ + item.quality = value + } +} diff --git a/swift/Sources/GildedRose/ItemSellInUpdater.swift b/swift/Sources/GildedRose/ItemSellInUpdater.swift new file mode 100644 index 00000000..7e4cfce0 --- /dev/null +++ b/swift/Sources/GildedRose/ItemSellInUpdater.swift @@ -0,0 +1,22 @@ +// +// File.swift +// +// +// Created by Manali Mogre on 17/08/2020. +// + +import Foundation + +protocol ItemSellInUpdater { + var item: Item { get set } + func reduceSellInDays(by days: Int) +} + +extension ItemSellInUpdater { + var isSellInDatePassed: Bool{ + return item.sellIn < 0 + } + func reduceSellInDays(by days: Int) { + item.sellIn -= days + } +} diff --git a/swift/Sources/GildedRose/Items/AgedBrieItem.swift b/swift/Sources/GildedRose/Items/AgedBrieItem.swift index 4ba7dac9..5c1fbe91 100644 --- a/swift/Sources/GildedRose/Items/AgedBrieItem.swift +++ b/swift/Sources/GildedRose/Items/AgedBrieItem.swift @@ -7,20 +7,22 @@ import Foundation -struct AgedBrieItem: CustomisedItemProtocol, ItemSellInUpdater, ItemQualityUpdater { +struct AgedBrieItem: CustomisedItem, ItemSellInUpdater, ItemQualityUpdater { var item: Item - + public init(item: Item) { self.item = item } func updateItemState() { // update the sell in days - reduceSellInDays(for: item, by: 1) + reduceSellInDays(by: 1) // Increment the Item quality by 1 if the quality is less than 50 - guard isItemUnderHighestQuality(item: item) else { return } - increaseQuality(for: item, by: 1) + guard isItemUnderHighestQuality else { return } + increaseItemQuality(by: 1) } - + + + } diff --git a/swift/Sources/GildedRose/Items/BackstagePassesItem.swift b/swift/Sources/GildedRose/Items/BackstagePassesItem.swift index 4bd338ed..b989e137 100644 --- a/swift/Sources/GildedRose/Items/BackstagePassesItem.swift +++ b/swift/Sources/GildedRose/Items/BackstagePassesItem.swift @@ -7,7 +7,7 @@ import Foundation -struct BackstagePassesItem: CustomisedItemProtocol, ItemQualityUpdater, ItemSellInUpdater { +struct BackstagePassesItem: CustomisedItem, ItemQualityUpdater, ItemSellInUpdater { var item: Item public init(item: Item) { @@ -15,26 +15,25 @@ struct BackstagePassesItem: CustomisedItemProtocol, ItemQualityUpdater, ItemSell } func updateItemState() { - reduceSellInDays(for: item, by: 1) - - guard !HasSellInDatePassed(item: item) else { - setItemQualityToZero(item: item) + reduceSellInDays(by: 1) + + guard !isSellInDatePassed else { + setItemQuality(to: ValueConstants.kLowestQualityValue) return } - guard isItemUnderHighestQuality(item: item) else { - setItemQualityToFifty(item: item) + guard isItemUnderHighestQuality else { + setItemQuality(to: ValueConstants.kHightestQualityValue) return } switch item.sellIn { case 10...: - increaseQuality(for: item, by: 1) + increaseItemQuality(by: 1) case 5..<10: - increaseQuality(for: item, by: 2) + increaseItemQuality(by: 2) case 0..<5: - increaseQuality(for: item, by: 3) + increaseItemQuality(by: 3) default: break } } - } diff --git a/swift/Sources/GildedRose/Items/CustomisedItem.swift b/swift/Sources/GildedRose/Items/CustomisedItem.swift deleted file mode 100644 index ef085513..00000000 --- a/swift/Sources/GildedRose/Items/CustomisedItem.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// File.swift -// -// -// Created by Manali Mogre on 16/08/2020. -// - -import Foundation - -protocol CustomisedItemProtocol { - func updateItemState() -} - - -protocol ItemSellInUpdater { - func reduceSellInDays(for item: Item, by days: Int) -} - -extension ItemSellInUpdater { - func reduceSellInDays(for item: Item, by days: Int) { - item.sellIn -= days - } - - func HasSellInDatePassed(item: Item) -> Bool { - return item.sellIn < 0 - } -} - -protocol ItemQualityUpdater { - -} - -extension ItemQualityUpdater { - func isItemUnderHighestQuality(item: Item) -> Bool { - return item.quality < ValueConstants.kHightestQualityValue - } - func reduceQuality(for item: Item, by value:Int) { - item.quality -= value - } - - func increaseQuality(for item: Item, by value:Int) { - item.quality += value - } - - 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 0d4145f0..e1dbd016 100644 --- a/swift/Sources/GildedRose/Items/StandardItem.swift +++ b/swift/Sources/GildedRose/Items/StandardItem.swift @@ -7,20 +7,21 @@ import Foundation -struct StandardItem: CustomisedItemProtocol, ItemQualityUpdater, ItemSellInUpdater { +struct StandardItem: CustomisedItem, ItemQualityUpdater, ItemSellInUpdater { var item: Item public init(item: Item) { self.item = item } + func updateItemState() { // Reduce the sellIn days for Item by 1 - reduceSellInDays(for: item, by: 1) + reduceSellInDays(by: 1) // Reduce the item quality by 1 , if the sell in date is passed decrement by 2 - HasSellInDatePassed(item: item) ? reduceQuality(for: item, by: decreasingValueForZeroOrLessDaysToSell()) : reduceQuality(for: item, by: decreasingValueOverZeroDaysToSell()) - guard isItemOverLowestQuality(item: item) else { - item.quality = ValueConstants.kLowestQualityValue + isSellInDatePassed ? reduceItemQuality(by: decreasingValueForZeroOrLessDaysToSell()) : reduceItemQuality(by: decreasingValueOverZeroDaysToSell()) + guard isItemMoreThanLowestQuality else { + setItemQuality(to: ValueConstants.kLowestQualityValue) return } } diff --git a/swift/Sources/GildedRose/Items/SulfurasItem.swift b/swift/Sources/GildedRose/Items/SulfurasItem.swift index 1eb44e5c..064de3dc 100644 --- a/swift/Sources/GildedRose/Items/SulfurasItem.swift +++ b/swift/Sources/GildedRose/Items/SulfurasItem.swift @@ -7,7 +7,7 @@ import Foundation -struct SulfurasItem: CustomisedItemProtocol { +struct SulfurasItem: CustomisedItem { var item: Item public init(item: Item) {