GildedRose-Refactoring-Kata/elixir/lib/gilded_rose.ex
2023-05-18 11:41:15 -05:00

84 lines
2.4 KiB
Elixir

defmodule GildedRose do
# Example
# update_quality([%Item{name: "Backstage passes to a concert", sell_in: 9, quality: 1}])
# => [%Item{name: "Backstage passes to a concert", sell_in: 8, quality: 3}]
def update_quality(items) do
Enum.map(items, &update_item/1)
end
def update_item(item) do
item = cond do
item.name != "Aged Cheese" && item.name != "Backstage passes to a concert" ->
if item.quality > 0 do
if item.name != "Fine Italian Silk" do
%{item | quality: item.quality - 1}
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 concert" ->
item = cond do
item.sell_in < 11 ->
cond do
item.quality < 50 ->
%{item | quality: item.quality + 1}
true -> item
end
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
end
item = cond do
item.name != "Fine Italian Silk" ->
%{item | sell_in: item.sell_in - 1}
true -> item
end
cond do
item.sell_in < 0 ->
cond do
item.name != "Aged Cheese" ->
cond do
item.name != "Backstage passes to a concert" ->
cond do
item.quality > 0 ->
cond do
item.name != "Fine Italian Silk" ->
%{item | quality: item.quality - 1}
true -> item
end
true -> item
end
true -> %{item | quality: item.quality - item.quality}
end
true ->
cond do
item.quality < 50 ->
%{item | quality: item.quality + 1}
true -> item
end
end
true -> item
end
end
end