From 125bb22b3866724984ac7b5a4abda536f6fdfc1d Mon Sep 17 00:00:00 2001 From: Dan Holmes Date: Fri, 4 Dec 2020 08:00:37 +0000 Subject: [PATCH] Change level of extraction to objects --- js-jasmine/src/aged_brie_update.js | 25 +++++++------------ js-jasmine/src/backstage_pass_update.js | 33 ++++++++++--------------- js-jasmine/src/shop.js | 20 +++++++++------ js-jasmine/src/standard_update.js | 28 ++++++--------------- js-jasmine/src/sulfuras_update.js | 17 ++++--------- 5 files changed, 47 insertions(+), 76 deletions(-) diff --git a/js-jasmine/src/aged_brie_update.js b/js-jasmine/src/aged_brie_update.js index ca72858a..427e00e7 100644 --- a/js-jasmine/src/aged_brie_update.js +++ b/js-jasmine/src/aged_brie_update.js @@ -1,19 +1,12 @@ -function updateQuality(item) { - if (is(item)) { - item.quality += getQualityChange(item); +const agedBrie = { + regex_matcher: /aged brie/, + qualityChange: (sellIn) => { + if (sellIn <= 0) { + return 2; + } else { + return 1; + } } } -function getQualityChange(item) { - if (item.sellIn <= 0) { - return 2; - } else { - return 1; - } -} - -function is(item) { - return item.name.toLowerCase().match(/aged brie/); -}; - -module.exports = { updateQuality, is }; \ No newline at end of file +module.exports = { agedBrie }; \ No newline at end of file diff --git a/js-jasmine/src/backstage_pass_update.js b/js-jasmine/src/backstage_pass_update.js index 4dfe036b..edf93f2e 100644 --- a/js-jasmine/src/backstage_pass_update.js +++ b/js-jasmine/src/backstage_pass_update.js @@ -1,23 +1,16 @@ -function updateQuality(item) { - if (is(item)) { - item.quality += getQualityChange(item); +const backstagePass = { + regex_matcher: /backstage pass/, + qualityChange: (sellIn, quality) => { + if (sellIn <= 0) { + return -quality; + } else if (sellIn <= 5) { + return 3; + } else if (sellIn <= 10) { + return 2; + } else { + return 1; + } } } -function getQualityChange(item) { - if (item.sellIn <= 0) { - return -item.quality; - } else if (item.sellIn <= 5) { - return 3; - } else if (item.sellIn <= 10) { - return 2; - } else { - return 1; - } -} - -function is(item) { - return item.name.toLowerCase().match(/backstage pass/); -}; - -module.exports = { updateQuality, is }; \ No newline at end of file +module.exports = { backstagePass }; \ No newline at end of file diff --git a/js-jasmine/src/shop.js b/js-jasmine/src/shop.js index e66d36ef..b959b5b8 100644 --- a/js-jasmine/src/shop.js +++ b/js-jasmine/src/shop.js @@ -1,7 +1,9 @@ -var standardItem = require('./standard_update.js') -var backstagePass = require('./backstage_pass_update.js') -var agedBrie = require('./aged_brie_update.js') -var sulfuras = require('./sulfuras_update.js') +const standardItem = require('./standard_update.js') +const backstagePass = require('./backstage_pass_update.js') +const agedBrie = require('./aged_brie_update.js') +const sulfuras = require('./sulfuras_update.js') + +const itemTypes = [backstagePass.backstagePass, agedBrie.agedBrie, sulfuras.sulfuras] class Shop { constructor(items = []) { @@ -27,10 +29,12 @@ class Shop { } _conditionallyUpdateQuality(item) { - standardItem.updateQuality(item); - backstagePass.updateQuality(item); - agedBrie.updateQuality(item); - sulfuras.updateQuality(item); + for (const itemType of itemTypes) { + if (item.name.toLowerCase().match(itemType.regex_matcher)) { + return item.quality += itemType.qualityChange(item.sellIn, item.quality); + } + } + return item.quality += standardItem.standardItem.qualityChange(item.sellIn); } _updateItemSellIn(item) { diff --git a/js-jasmine/src/standard_update.js b/js-jasmine/src/standard_update.js index b4ca1b8c..524fb95f 100644 --- a/js-jasmine/src/standard_update.js +++ b/js-jasmine/src/standard_update.js @@ -1,23 +1,11 @@ -var backstagePass = require('./backstage_pass_update.js') -var agedBrie = require('./aged_brie_update.js') -var sulfuras = require('./sulfuras_update.js') - -function updateQuality(item) { - if (is(item)) { - item.quality += getQualityChange(item); +const standardItem = { + qualityChange: (sellIn) => { + if (sellIn <= 0) { + return -2; + } else { + return -1; + } } } -function getQualityChange(item) { - if (item.sellIn <= 0) { - return -2; - } else { - return -1; - } -} - -function is(item) { - return !(backstagePass.is(item) || agedBrie.is(item) || sulfuras.is(item)) -}; - -module.exports = { updateQuality }; \ No newline at end of file +module.exports = { standardItem }; \ No newline at end of file diff --git a/js-jasmine/src/sulfuras_update.js b/js-jasmine/src/sulfuras_update.js index 675a051c..e117c256 100644 --- a/js-jasmine/src/sulfuras_update.js +++ b/js-jasmine/src/sulfuras_update.js @@ -1,15 +1,8 @@ -function updateQuality(item) { - if (is(item)) { - item.quality += getQualityChange(item); +const sulfuras = { + regex_matcher: /sulfuras/, + qualityChange: () => { + return 0; } } -function getQualityChange(item) { - return 0; -} - -function is(item) { - return item.name.toLowerCase().match(/sulfuras/); -}; - -module.exports = { updateQuality, is }; \ No newline at end of file +module.exports = { sulfuras }; \ No newline at end of file