Created
June 3, 2015 19:07
-
-
Save martinsvalin/6dad7c8182f846f772e7 to your computer and use it in GitHub Desktop.
Elixir Weekday struct with Range.Iterator implementation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Weekday do | |
defstruct name: nil, number: nil | |
def monday, do: %Weekday{name: "Monday", number: 1} | |
def tuesday, do: %Weekday{name: "Tuesday", number: 2} | |
def wednesday, do: %Weekday{name: "Wednesday", number: 3} | |
def thursday, do: %Weekday{name: "Thursday", number: 4} | |
def friday, do: %Weekday{name: "Friday", number: 5} | |
def saturday, do: %Weekday{name: "Saturday", number: 6} | |
def sunday, do: %Weekday{name: "Sunday", number: 7} | |
end | |
defimpl Range.Iterator, for: Weekday do | |
def next(_first, _range) do | |
fn weekday -> | |
case weekday.number do | |
1 -> Weekday.tuesday | |
2 -> Weekday.wednesday | |
3 -> Weekday.thursday | |
4 -> Weekday.friday | |
5 -> Weekday.saturday | |
6 -> Weekday.sunday | |
7 -> Weekday.monday | |
end | |
end | |
end | |
def count(_, first..last) do | |
if first.number <= last.number do | |
last.number + 1 - first.number | |
else | |
last.number + 8 - first.number | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment