diff --git a/elixir/config/config.exs b/elixir/config/config.exs new file mode 100644 index 00000000..d2d855e6 --- /dev/null +++ b/elixir/config/config.exs @@ -0,0 +1 @@ +use Mix.Config diff --git a/elixir/lib/gilded_rose.ex b/elixir/lib/gilded_rose.ex new file mode 100644 index 00000000..20a3796c --- /dev/null +++ b/elixir/lib/gilded_rose.ex @@ -0,0 +1,48 @@ +defmodule GildedRose do + # Example + # update_quality([%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 9, quality: 1}]) + # => [%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 9, quality: 3}] + + def update_quality(items) do + Enum.map(items, &update_item/1) + end + + def update_item(item) do + cond do + item.quality == 0 -> + item + item.sell_in < 0 && item.name == "Backstage passes to a TAFKAL80ETC concert" -> + %{item | quality: 0} + item.name == "Aged Brie" || item.name == "Backstage passes to a TAFKAL80ETC concert" -> + if item.name == "Backstage passes to a TAFKAL80ETC concert" && item.sell_in > 5 && item.sell_in <= 10 do + %{item | quality: item.quality + 2} + else + if item.name == "Backstage passes to a TAFKAL80ETC concert" && item.sell_in >= 0 && item.sell_in <= 5 do + %{item | quality: item.quality + 3} + else + if item.quality < 50 do + %{item | quality: item.quality + 1} + else + item + end + end + end + item.sell_in < 0 -> + if item.name == "Backstage passes to a TAFKAL80ETC concert" do + %{item | quality: 0} + else + if item.name == "+5 Dexterity Vest" || item.name == "Elixir of the Mongoose" do + %{item | quality: item.quality - 2} + else + item + end + end + item.name == "+5 Dexterity Vest" || item.name == "Elixir of the Mongoose" -> + %{item | quality: item.quality - 1} + item.name != "Sulfuras, Hand of Ragnaros" -> + %{item | quality: item.quality - 1} + true -> + item + end + end +end diff --git a/elixir/lib/item.ex b/elixir/lib/item.ex new file mode 100644 index 00000000..0a20edbf --- /dev/null +++ b/elixir/lib/item.ex @@ -0,0 +1,3 @@ +defmodule Item do + defstruct name: nil, sell_in: nil, quality: nil +end diff --git a/elixir/mix.exs b/elixir/mix.exs new file mode 100644 index 00000000..c50af0d0 --- /dev/null +++ b/elixir/mix.exs @@ -0,0 +1,9 @@ +defmodule GildedRose.Mixfile do + use Mix.Project + + def project do + [app: :gilded_rose, + version: "0.0.1", + elixir: "~> 1.0"] + end +end diff --git a/elixir/test/gilded_rose_test.exs b/elixir/test/gilded_rose_test.exs new file mode 100644 index 00000000..b0db3381 --- /dev/null +++ b/elixir/test/gilded_rose_test.exs @@ -0,0 +1,6 @@ +defmodule GildedRoseTest do + use ExUnit.Case + + test "begin the journey of refactoring" do + end +end diff --git a/elixir/test/test_helper.exs b/elixir/test/test_helper.exs new file mode 100644 index 00000000..869559e7 --- /dev/null +++ b/elixir/test/test_helper.exs @@ -0,0 +1 @@ +ExUnit.start()