mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-04 09:11:39 +00:00
refactor update method
This commit is contained in:
parent
a0b7cfa27f
commit
411b9cd30f
@ -13,6 +13,20 @@ impl Item {
|
|||||||
quality,
|
quality,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn update_quality(&mut self){
|
||||||
|
self.quality = if self.name.contains("Sulfuras"){
|
||||||
|
sulfuras_quality(self.quality, self.sell_in)
|
||||||
|
}else if self.name.contains("Aged Brie"){
|
||||||
|
brie_quality(self.quality, self.sell_in)
|
||||||
|
}else if self.name.contains("Backstage passes"){
|
||||||
|
backstage_quality(self.quality, self.sell_in)
|
||||||
|
}else if self.name.contains("Conjured"){
|
||||||
|
conjured_quality(self.quality, self.sell_in)
|
||||||
|
}else{
|
||||||
|
standard_quality(self.quality, self.sell_in)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Display for Item {
|
impl Display for Item {
|
||||||
@ -21,6 +35,56 @@ impl Display for Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pub fn brie_quality(quality: i32, sell_in: i32) -> i32 {
|
||||||
|
if quality <= 0 || quality >= 50{
|
||||||
|
return quality
|
||||||
|
}
|
||||||
|
if sell_in < 0 && quality <= 48{
|
||||||
|
return quality + 2;
|
||||||
|
}
|
||||||
|
quality + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn standard_quality(quality: i32, sell_in: i32) -> i32 {
|
||||||
|
if quality <= 0 || quality >= 50{
|
||||||
|
return quality;
|
||||||
|
}
|
||||||
|
if sell_in < 0 && quality >= 2{
|
||||||
|
return quality - 2;
|
||||||
|
}
|
||||||
|
quality - 1
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sulfuras_quality(quality: i32, sell_in: i32) -> i32 {
|
||||||
|
return quality;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn conjured_quality(quality: i32, sell_in: i32) -> i32 {
|
||||||
|
if quality <= 0 || quality >= 50{
|
||||||
|
return quality;
|
||||||
|
}
|
||||||
|
quality - 2
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn backstage_quality(quality: i32, sell_in: i32) -> i32 {
|
||||||
|
if quality <= 0 || quality >= 50{
|
||||||
|
return quality;
|
||||||
|
}
|
||||||
|
let updated_quality = match sell_in{
|
||||||
|
10...6 => quality + 2,
|
||||||
|
0...5 => quality + 3,
|
||||||
|
_ => quality + 1,
|
||||||
|
};
|
||||||
|
if updated_quality >= 50{
|
||||||
|
return 50;
|
||||||
|
}
|
||||||
|
return updated_quality;
|
||||||
|
}
|
||||||
|
|
||||||
pub struct GildedRose {
|
pub struct GildedRose {
|
||||||
pub items: Vec<Item>,
|
pub items: Vec<Item>,
|
||||||
}
|
}
|
||||||
@ -30,60 +94,25 @@ impl GildedRose {
|
|||||||
GildedRose { items }
|
GildedRose { items }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Todos tienen SellIn y Quality
|
||||||
|
// En general, Quality esta entre 0 y 50
|
||||||
|
// Una vez que pasa SellIn, Quality se degrada al doble de velocidad
|
||||||
|
// Aged Brie aumenta su Quality con el tiempo
|
||||||
|
// Sulfuras Nunca tiene SellIn o Quality
|
||||||
|
// Backstage passes también aumenta Quality a medida que se acerca SellIn
|
||||||
|
// -Aumenta 2 cuando faltan 10 días o menos, 3 cuando faltan 5 o menos
|
||||||
|
// -Es 0 cuando sellin==0
|
||||||
|
// Conjured bajan su calidad el doble de rápido
|
||||||
|
// Sulfuras siempre tiene quality en 80
|
||||||
pub fn update_quality(&mut self) {
|
pub fn update_quality(&mut self) {
|
||||||
for i in 0..self.items.len() {
|
for i in 0..self.items.len() {
|
||||||
if self.items[i].name != "Aged Brie" && self.items[i].name != "Backstage passes to a TAFKAL80ETC concert"
|
self.items[i].update_quality()
|
||||||
{
|
|
||||||
if self.items[i].quality > 0 {
|
|
||||||
if self.items[i].name != "Sulfuras, Hand of Ragnaros" {
|
|
||||||
self.items[i].quality = self.items[i].quality - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if self.items[i].quality < 50 {
|
|
||||||
self.items[i].quality = self.items[i].quality + 1;
|
|
||||||
|
|
||||||
if self.items[i].name == "Backstage passes to a TAFKAL80ETC concert" {
|
|
||||||
if self.items[i].sell_in < 11 {
|
|
||||||
if self.items[i].quality < 50 {
|
|
||||||
self.items[i].quality = self.items[i].quality + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.items[i].sell_in < 6 {
|
|
||||||
if self.items[i].quality < 50 {
|
|
||||||
self.items[i].quality = self.items[i].quality + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.items[i].name != "Sulfuras, Hand of Ragnaros" {
|
|
||||||
self.items[i].sell_in = self.items[i].sell_in - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.items[i].sell_in < 0 {
|
|
||||||
if self.items[i].name != "Aged Brie" {
|
|
||||||
if self.items[i].name != "Backstage passes to a TAFKAL80ETC concert" {
|
|
||||||
if self.items[i].quality > 0 {
|
|
||||||
if self.items[i].name != "Sulfuras, Hand of Ragnaros" {
|
|
||||||
self.items[i].quality = self.items[i].quality - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
self.items[i].quality = self.items[i].quality - self.items[i].quality;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if self.items[i].quality < 50 {
|
|
||||||
self.items[i].quality = self.items[i].quality + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{GildedRose, Item};
|
use super::{GildedRose, Item};
|
||||||
@ -96,4 +125,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!("fixme", rose.items[0].name);
|
assert_eq!("fixme", rose.items[0].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user