Skip to content

Commit

Permalink
Take :exclude_date into consideration when :count exists
Browse files Browse the repository at this point in the history
  • Loading branch information
pbogut committed Feb 10, 2018
1 parent 58b6016 commit 8d31c46
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 5 deletions.
2 changes: 1 addition & 1 deletion lib/recurring_events.ex
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,8 @@ defmodule RecurringEvents do
|> by_set_position(rules)
|> drop_before(date)
|> prepend(date)
|> drop_after(rules)
|> drop_exclude(rules)
|> drop_after(rules)
end

defp drop_exclude(dates, %{exclude_date: excludes}) do
Expand Down
5 changes: 4 additions & 1 deletion lib/recurring_events/frequency.ex
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ defmodule RecurringEvents.Frequency do
defp get_step(%{interval: interval}), do: interval
defp get_step(%{}), do: 1

defp get_count(%{count: count}), do: count
defp add_count(%{exclude_date: dates}), do: dates |> Enum.count()
defp add_count(%{}), do: 0

defp get_count(%{count: count} = rules), do: count + add_count(rules)
defp get_count(%{}), do: :infinity
end
5 changes: 4 additions & 1 deletion lib/recurring_events/monthly.ex
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ defmodule RecurringEvents.Monthly do
defp get_step(%{interval: interval}), do: interval
defp get_step(%{}), do: 1

defp get_count(%{count: count}), do: count
defp add_count(%{exclude_date: dates}), do: dates |> Enum.count()
defp add_count(%{}), do: 0

defp get_count(%{count: count} = rules), do: count + add_count(rules)
defp get_count(%{}), do: :infinity
end
5 changes: 4 additions & 1 deletion lib/recurring_events/weekly.ex
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,9 @@ defmodule RecurringEvents.Weekly do
defp get_step(%{interval: interval}), do: interval
defp get_step(%{}), do: 1

defp get_count(%{count: count}), do: count
defp add_count(%{exclude_date: dates}), do: dates |> Enum.count()
defp add_count(%{}), do: 0

defp get_count(%{count: count} = rules), do: count + add_count(rules)
defp get_count(%{}), do: :infinity
end
5 changes: 4 additions & 1 deletion lib/recurring_events/yearly.ex
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ defmodule RecurringEvents.Yearly do
defp get_step(%{interval: interval}), do: interval
defp get_step(%{}), do: 1

defp get_count(%{count: count}), do: count
defp add_count(%{exclude_date: dates}), do: dates |> Enum.count()
defp add_count(%{}), do: 0

defp get_count(%{count: count} = rules), do: count + add_count(rules)
defp get_count(%{}), do: :infinity
end
62 changes: 62 additions & 0 deletions test/ical_rrul_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -1270,6 +1270,68 @@ defmodule RR.IcalRrulTest do
assert expect == result |> Enum.take(expect |> Enum.count())
end

describe "count shoud be resolbed after exclude dates" do
test "when freq: :daily" do
result =
RR.take(
%{
date_start: ~D[2018-01-01],
exclude_date: ~D[2018-01-01],
freq: :daily,
count: 1
},
99
)

assert [~D[2018-01-02]] == result
end

test "when freq: :weekly" do
result =
RR.take(
%{
date_start: ~D[2018-01-01],
exclude_date: ~D[2018-01-01],
freq: :weekly,
count: 1
},
99
)

assert [~D[2018-01-08]] == result
end

test "when freq: :monthly" do
result =
RR.take(
%{
date_start: ~D[2018-01-01],
exclude_date: ~D[2018-01-01],
freq: :monthly,
count: 1
},
99
)

assert [~D[2018-02-01]] == result
end

test "when freq: :yearly" do
result =
RR.take(
%{
date_start: ~D[2018-01-01],
exclude_date: ~D[2018-01-01],
freq: :yearly,
count: 1
},
99
)

assert [~D[2019-01-01]] == result
end
end

def listify({a, b, c}), do: {listify(a), listify(b), listify(c)}
def listify({a, b}), do: {listify(a), listify(b)}
def listify(a) when is_integer(a), do: [a]
Expand Down

0 comments on commit 8d31c46

Please sign in to comment.