From b59ee091e5856cd9dd6240791b873aa1b74d424a Mon Sep 17 00:00:00 2001 From: Ole Michaelis Date: Tue, 29 Oct 2019 20:50:06 +0100 Subject: [PATCH] on the road to refactor --- gilded_rose/lib/gilded_rose.ex | 125 ++++++++++++++++---------- gilded_rose/test/gilded_rose_test.exs | 17 +++- 2 files changed, 94 insertions(+), 48 deletions(-) diff --git a/gilded_rose/lib/gilded_rose.ex b/gilded_rose/lib/gilded_rose.ex index 7edd8c8..8e55869 100644 --- a/gilded_rose/lib/gilded_rose.ex +++ b/gilded_rose/lib/gilded_rose.ex @@ -7,52 +7,82 @@ defmodule GildedRose do Enum.map(items, &update_item/1) end + def decrease_quality(item, n) do + %{item | quality: max(0, item.quality - n)} + end + + def increase_quality(item, n) do + %{item | quality: min(50, item.quality + n)} + end + def update_item(item) do - item = cond do - item.name != "Aged Brie" && item.name != "Backstage passes to a TAFKAL80ETC concert" -> - if item.quality > 0 do + item = + cond do + item.name == "some conjured item" -> if item.name != "Sulfuras, Hand of Ragnaros" do - %{item | quality: item.quality - 1} + decrease_quality(item, 2) else item end - else - item - end - true -> - cond do - item.quality < 50 -> - item = %{item | quality: item.quality + 1} - cond do - item.name == "Backstage passes to a TAFKAL80ETC concert" -> - item = cond do - item.sell_in < 11 -> - cond do - item.quality < 50 -> - %{item | quality: item.quality + 1} - true -> item - end - true -> item - end + + item.name != "Aged Brie" && item.name != "Backstage passes to a TAFKAL80ETC concert" -> + if item.name != "Sulfuras, Hand of Ragnaros" do + decrease_quality(item, 1) + else + item + end + + true -> + item = increase_quality(item, 1) + + cond do + item.name == "Backstage passes to a TAFKAL80ETC concert" -> + item = cond do - item.sell_in < 6 -> + item.sell_in < 11 -> cond do item.quality < 50 -> %{item | quality: item.quality + 1} - true -> item + + true -> + item end - true -> item + + true -> + item end - true -> item - end - true -> item - end - end - item = cond do - item.name != "Sulfuras, Hand of Ragnaros" -> - %{item | sell_in: item.sell_in - 1} - true -> item - end + + cond do + item.sell_in < 6 -> + cond do + item.quality < 50 -> + %{item | quality: item.quality + 1} + + true -> + item + end + + true -> + item + end + + true -> + item + end + + true -> + item + end + + item = + cond do + item.name != "Sulfuras, Hand of Ragnaros" -> + %{item | sell_in: item.sell_in - 1} + + true -> + item + end + cond do item.sell_in < 0 -> cond do @@ -60,24 +90,29 @@ defmodule GildedRose do cond do item.name != "Backstage passes to a TAFKAL80ETC concert" -> cond do - item.quality > 0 -> - cond do - item.name != "Sulfuras, Hand of Ragnaros" -> - %{item | quality: item.quality - 1} - true -> item - end - true -> item + item.name != "Sulfuras, Hand of Ragnaros" -> + decrease_quality(item, 1) + + true -> + item end - true -> %{item | quality: item.quality - item.quality} + + true -> + decrease_quality(item, item.quality) end + true -> cond do item.quality < 50 -> %{item | quality: item.quality + 1} - true -> item + + true -> + item end end - true -> item + + true -> + item end end end diff --git a/gilded_rose/test/gilded_rose_test.exs b/gilded_rose/test/gilded_rose_test.exs index d423cef..f026aaa 100644 --- a/gilded_rose/test/gilded_rose_test.exs +++ b/gilded_rose/test/gilded_rose_test.exs @@ -21,6 +21,20 @@ defmodule GildedRoseTest do ] end + test "some conjured item" do + assert GildedRose.update_quality([ + %Item{name: "some conjured item", quality: 10, sell_in: 9} + ]) == [ + %Item{name: "some conjured item", quality: 8, sell_in: 8} + ] + + assert GildedRose.update_quality([ + %Item{name: "some conjured item", quality: 1, sell_in: 9} + ]) == [ + %Item{name: "some conjured item", quality: 0, sell_in: 8} + ] + end + test "Backstage passes" do assert GildedRose.update_quality([ %Item{name: "Backstage passes to a TAFKAL80ETC concert", quality: 1, sell_in: 9} @@ -68,8 +82,5 @@ defmodule GildedRoseTest do %Item{name: "Aged Brie", quality: 50, sell_in: 8} ] end - - test "some conjured item" do - end end end