mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
Simplified every more
This commit is contained in:
parent
8e12d61da0
commit
a4adbd1922
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
This is the Gilded Rose kata in JavaScript with Jest.
|
This is the Gilded Rose kata in JavaScript with Jest.
|
||||||
|
|
||||||
See `docs/GildedRoseRequirements-Simple.txt` for the business requirements.
|
See `docs/GildedRoseRequirements.txt` for the business requirements.
|
||||||
|
|
||||||
## Getting started
|
## Getting started
|
||||||
|
|
||||||
|
|||||||
29
advanced/src/demo-advanced.js
Normal file
29
advanced/src/demo-advanced.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
const { Shop, Item } = require("./gilded_rose");
|
||||||
|
|
||||||
|
const items = [
|
||||||
|
new Item("+5 Dexterity Vest", 10, 20),
|
||||||
|
new Item("Aged Brie", 2, 0),
|
||||||
|
new Item("Elixir of the Mongoose", 5, 7),
|
||||||
|
new Item("Sulfuras", 0, 80),
|
||||||
|
new Item("Sulfuras", -1, 80),
|
||||||
|
new Item("Backstage passes", 15, 20),
|
||||||
|
new Item("Backstage passes", 10, 49),
|
||||||
|
new Item("Backstage passes", 5, 49),
|
||||||
|
|
||||||
|
// This Conjured item does not work properly yet
|
||||||
|
new Item("Conjured Mana Cake", 3, 6),
|
||||||
|
];
|
||||||
|
|
||||||
|
const days = Number(process.argv[2]) || 3;
|
||||||
|
const gildedRose = new Shop(items);
|
||||||
|
|
||||||
|
console.log("Welcome to the Gilded Rose Demo!");
|
||||||
|
console.log("================================")
|
||||||
|
|
||||||
|
for (let day = 1; day <= days; day++) {
|
||||||
|
console.log(`\n-------- Day ${day} --------`);
|
||||||
|
console.log("name, sellIn, quality");
|
||||||
|
items.forEach(item => console.log(`${item.name}, ${item.sellIn}, ${item.quality}`));
|
||||||
|
gildedRose.updateQuality();
|
||||||
|
}
|
||||||
67
advanced/src/gilded-rose-advanced.js
Normal file
67
advanced/src/gilded-rose-advanced.js
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
class Item {
|
||||||
|
constructor(name, sellIn, quality){
|
||||||
|
this.name = name;
|
||||||
|
this.sellIn = sellIn;
|
||||||
|
this.quality = quality;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Shop {
|
||||||
|
constructor(items=[]){
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
updateQuality() {
|
||||||
|
for (let i = 0; i < this.items.length; i++) {
|
||||||
|
if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage passes') {
|
||||||
|
if (this.items[i].quality > 0) {
|
||||||
|
if (this.items[i].name != 'Sulfuras') {
|
||||||
|
this.items[i].quality = this.items[i].quality - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this.items[i].quality < 50) {
|
||||||
|
this.items[i].quality = this.items[i].quality + 1;
|
||||||
|
if (this.items[i].name == 'Backstage passes') {
|
||||||
|
if (this.items[i].sellIn < 11) {
|
||||||
|
if (this.items[i].quality < 50) {
|
||||||
|
this.items[i].quality = this.items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.items[i].sellIn < 6) {
|
||||||
|
if (this.items[i].quality < 50) {
|
||||||
|
this.items[i].quality = this.items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.items[i].name != 'Sulfuras') {
|
||||||
|
this.items[i].sellIn = this.items[i].sellIn - 1;
|
||||||
|
}
|
||||||
|
if (this.items[i].sellIn < 0) {
|
||||||
|
if (this.items[i].name != 'Aged Brie') {
|
||||||
|
if (this.items[i].name != 'Backstage passes') {
|
||||||
|
if (this.items[i].quality > 0) {
|
||||||
|
if (this.items[i].name != 'Sulfuras') {
|
||||||
|
this.items[i].quality = this.items[i].quality - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.items[i].quality = this.items[i].quality - this.items[i].quality;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this.items[i].quality < 50) {
|
||||||
|
this.items[i].quality = this.items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.items;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
Item,
|
||||||
|
Shop
|
||||||
|
}
|
||||||
@ -1,38 +0,0 @@
|
|||||||
======================================
|
|
||||||
Gilded Rose Requirements Specification
|
|
||||||
======================================
|
|
||||||
|
|
||||||
Hi and welcome to team Gilded Rose. As you know, we are a small inn with a prime location in a
|
|
||||||
prominent city ran by a friendly innkeeper named Allison. We also buy and sell only the finest goods.
|
|
||||||
Unfortunately, our goods are constantly degrading in quality as they approach their sell by date. We
|
|
||||||
have a system in place that updates our inventory for us. It was developed by a no-nonsense type named
|
|
||||||
Leeroy, who has moved on to new adventures. Your task is to add the new feature to our system so that
|
|
||||||
we can begin selling a new category of items. First an introduction to our system:
|
|
||||||
|
|
||||||
- All items have a SellIn value which denotes the number of days we have to sell the item
|
|
||||||
- All items have a Quality value which denotes how valuable the item is
|
|
||||||
- At the end of each day our system lowers both values for every item
|
|
||||||
|
|
||||||
Pretty simple, right? Well this is where it gets interesting:
|
|
||||||
|
|
||||||
- Once the sell by date has passed, Quality degrades twice as fast
|
|
||||||
- The Quality of an item is never negative
|
|
||||||
- "Aged Brie" actually increases in Quality the older it gets
|
|
||||||
- The Quality of an item is never more than 50
|
|
||||||
- "Sulfuras", being a legendary item, never has to be sold or decreases in Quality
|
|
||||||
- "Backstage passes", like aged brie, increases in Quality as its SellIn value approaches;
|
|
||||||
Quality increases by 2 when there are 10 days or less and by 3 when there are 5 days or less but
|
|
||||||
Quality drops to 0 after the concert
|
|
||||||
|
|
||||||
We have recently signed a supplier of conjured items. This requires an update to our system:
|
|
||||||
|
|
||||||
- "Conjured" items degrade in Quality twice as fast as normal items
|
|
||||||
|
|
||||||
Feel free to make any changes to the UpdateQuality method and add any new code as long as everything
|
|
||||||
still works correctly. However, do not alter the Item class or Items property as those belong to the
|
|
||||||
goblin in the corner who will insta-rage and one-shot you as he doesn't believe in shared code
|
|
||||||
ownership (you can make the UpdateQuality method and Items property static if you like, we'll cover
|
|
||||||
for you).
|
|
||||||
|
|
||||||
Just for clarification, an item can never have its Quality increase above 50, however "Sulfuras" is a
|
|
||||||
legendary item and as such its Quality is 80 and it never alters.
|
|
||||||
14
docs/GildedRoseRequirements.txt
Normal file
14
docs/GildedRoseRequirements.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
======================================
|
||||||
|
Gilded Rose Requirements Specification
|
||||||
|
======================================
|
||||||
|
|
||||||
|
Hi and welcome to team Gilded Rose. As you know, we are a small inn with a prime location in a
|
||||||
|
prominent city ran by a friendly innkeeper named Allison. We also buy and sell only the finest goods.
|
||||||
|
Unfortunately, our goods are constantly degrading in quality as they approach their sell by date. We
|
||||||
|
have a system in place that updates our inventory for us. It was developed by a no-nonsense type named
|
||||||
|
Leeroy, who has moved on to new adventures. Your task is to add the new feature to our system so that
|
||||||
|
we can begin selling a new category of items. First an introduction to our system:
|
||||||
|
|
||||||
|
- All items have a SellIn value which denotes the number of days we have to sell the item
|
||||||
|
- All items have a Quality value which denotes how valuable the item is
|
||||||
|
- At the end of each day our system lowers both values for every item
|
||||||
@ -5,14 +5,6 @@ const items = [
|
|||||||
new Item("+5 Dexterity Vest", 10, 20),
|
new Item("+5 Dexterity Vest", 10, 20),
|
||||||
new Item("Aged Brie", 2, 0),
|
new Item("Aged Brie", 2, 0),
|
||||||
new Item("Elixir of the Mongoose", 5, 7),
|
new Item("Elixir of the Mongoose", 5, 7),
|
||||||
new Item("Sulfuras", 0, 80),
|
|
||||||
new Item("Sulfuras", -1, 80),
|
|
||||||
new Item("Backstage passes", 15, 20),
|
|
||||||
new Item("Backstage passes", 10, 49),
|
|
||||||
new Item("Backstage passes", 5, 49),
|
|
||||||
|
|
||||||
// This Conjured item does not work properly yet
|
|
||||||
new Item("Conjured Mana Cake", 3, 6),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
const days = Number(process.argv[2]) || 3;
|
const days = Number(process.argv[2]) || 3;
|
||||||
|
|||||||
@ -5,56 +5,18 @@ class Item {
|
|||||||
this.quality = quality;
|
this.quality = quality;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Shop {
|
class Shop {
|
||||||
constructor(items=[]){
|
constructor(items=[]){
|
||||||
this.items = items;
|
this.items = items;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateQuality() {
|
updateQuality() {
|
||||||
for (let i = 0; i < this.items.length; i++) {
|
for (let i = 0; i < this.items.length; i++) {
|
||||||
if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage passes') {
|
|
||||||
if (this.items[i].quality > 0) {
|
if (this.items[i].quality > 0) {
|
||||||
if (this.items[i].name != 'Sulfuras') {
|
|
||||||
this.items[i].quality = this.items[i].quality - 1;
|
this.items[i].quality = this.items[i].quality - 1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (this.items[i].quality < 50) {
|
|
||||||
this.items[i].quality = this.items[i].quality + 1;
|
|
||||||
if (this.items[i].name == 'Backstage passes') {
|
|
||||||
if (this.items[i].sellIn < 11) {
|
|
||||||
if (this.items[i].quality < 50) {
|
|
||||||
this.items[i].quality = this.items[i].quality + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.items[i].sellIn < 6) {
|
|
||||||
if (this.items[i].quality < 50) {
|
|
||||||
this.items[i].quality = this.items[i].quality + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.items[i].name != 'Sulfuras') {
|
|
||||||
this.items[i].sellIn = this.items[i].sellIn - 1;
|
this.items[i].sellIn = this.items[i].sellIn - 1;
|
||||||
}
|
|
||||||
if (this.items[i].sellIn < 0) {
|
|
||||||
if (this.items[i].name != 'Aged Brie') {
|
|
||||||
if (this.items[i].name != 'Backstage passes') {
|
|
||||||
if (this.items[i].quality > 0) {
|
|
||||||
if (this.items[i].name != 'Sulfuras') {
|
|
||||||
this.items[i].quality = this.items[i].quality - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.items[i].quality = this.items[i].quality - this.items[i].quality;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (this.items[i].quality < 50) {
|
|
||||||
this.items[i].quality = this.items[i].quality + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.items;
|
return this.items;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user