Change level of extraction to objects

This commit is contained in:
Dan Holmes 2020-12-04 08:00:37 +00:00
parent a7b54f052b
commit 125bb22b38
5 changed files with 47 additions and 76 deletions

View File

@ -1,19 +1,12 @@
function updateQuality(item) { const agedBrie = {
if (is(item)) { regex_matcher: /aged brie/,
item.quality += getQualityChange(item); qualityChange: (sellIn) => {
} if (sellIn <= 0) {
}
function getQualityChange(item) {
if (item.sellIn <= 0) {
return 2; return 2;
} else { } else {
return 1; return 1;
} }
} }
}
function is(item) { module.exports = { agedBrie };
return item.name.toLowerCase().match(/aged brie/);
};
module.exports = { updateQuality, is };

View File

@ -1,23 +1,16 @@
function updateQuality(item) { const backstagePass = {
if (is(item)) { regex_matcher: /backstage pass/,
item.quality += getQualityChange(item); qualityChange: (sellIn, quality) => {
} if (sellIn <= 0) {
} return -quality;
} else if (sellIn <= 5) {
function getQualityChange(item) {
if (item.sellIn <= 0) {
return -item.quality;
} else if (item.sellIn <= 5) {
return 3; return 3;
} else if (item.sellIn <= 10) { } else if (sellIn <= 10) {
return 2; return 2;
} else { } else {
return 1; return 1;
} }
} }
}
function is(item) { module.exports = { backstagePass };
return item.name.toLowerCase().match(/backstage pass/);
};
module.exports = { updateQuality, is };

View File

@ -1,7 +1,9 @@
var standardItem = require('./standard_update.js') const standardItem = require('./standard_update.js')
var backstagePass = require('./backstage_pass_update.js') const backstagePass = require('./backstage_pass_update.js')
var agedBrie = require('./aged_brie_update.js') const agedBrie = require('./aged_brie_update.js')
var sulfuras = require('./sulfuras_update.js') const sulfuras = require('./sulfuras_update.js')
const itemTypes = [backstagePass.backstagePass, agedBrie.agedBrie, sulfuras.sulfuras]
class Shop { class Shop {
constructor(items = []) { constructor(items = []) {
@ -27,10 +29,12 @@ class Shop {
} }
_conditionallyUpdateQuality(item) { _conditionallyUpdateQuality(item) {
standardItem.updateQuality(item); for (const itemType of itemTypes) {
backstagePass.updateQuality(item); if (item.name.toLowerCase().match(itemType.regex_matcher)) {
agedBrie.updateQuality(item); return item.quality += itemType.qualityChange(item.sellIn, item.quality);
sulfuras.updateQuality(item); }
}
return item.quality += standardItem.standardItem.qualityChange(item.sellIn);
} }
_updateItemSellIn(item) { _updateItemSellIn(item) {

View File

@ -1,23 +1,11 @@
var backstagePass = require('./backstage_pass_update.js') const standardItem = {
var agedBrie = require('./aged_brie_update.js') qualityChange: (sellIn) => {
var sulfuras = require('./sulfuras_update.js') if (sellIn <= 0) {
function updateQuality(item) {
if (is(item)) {
item.quality += getQualityChange(item);
}
}
function getQualityChange(item) {
if (item.sellIn <= 0) {
return -2; return -2;
} else { } else {
return -1; return -1;
} }
} }
}
function is(item) { module.exports = { standardItem };
return !(backstagePass.is(item) || agedBrie.is(item) || sulfuras.is(item))
};
module.exports = { updateQuality };

View File

@ -1,15 +1,8 @@
function updateQuality(item) { const sulfuras = {
if (is(item)) { regex_matcher: /sulfuras/,
item.quality += getQualityChange(item); qualityChange: () => {
}
}
function getQualityChange(item) {
return 0; return 0;
} }
}
function is(item) { module.exports = { sulfuras };
return item.name.toLowerCase().match(/sulfuras/);
};
module.exports = { updateQuality, is };