mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-06-15 05:10:58 +00:00
84 lines
2.4 KiB
Elixir
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
|