From fef23beb31d3fa7c380fb29e27ddd94f600cd867 Mon Sep 17 00:00:00 2001 From: Makis Otman Date: Fri, 18 Sep 2015 16:52:18 +0100 Subject: [PATCH] Add Elixir version --- elixir/config/config.exs | 1 + elixir/lib/gilded_rose.ex | 48 ++++++++++++++++++++++++++++++++ elixir/lib/item.ex | 3 ++ elixir/mix.exs | 9 ++++++ elixir/test/gilded_rose_test.exs | 6 ++++ elixir/test/test_helper.exs | 1 + 6 files changed, 68 insertions(+) create mode 100644 elixir/config/config.exs create mode 100644 elixir/lib/gilded_rose.ex create mode 100644 elixir/lib/item.ex create mode 100644 elixir/mix.exs create mode 100644 elixir/test/gilded_rose_test.exs create mode 100644 elixir/test/test_helper.exs 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()