Skip to content

Commit 4b99185

Browse files
committed
Refactor previous period functions to use earliest/2
1 parent 7839bde commit 4b99185

File tree

1 file changed

+9
-51
lines changed

1 file changed

+9
-51
lines changed

lib/plausible/stats/comparisons.ex

Lines changed: 9 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -28,71 +28,29 @@ defmodule Plausible.Stats.Comparisons do
2828
) do
2929
if valid_mode?(source_query, mode) do
3030
now = now || Timex.now(site.timezone)
31-
{:ok, do_compare(site, source_query, mode, now)}
31+
{:ok, do_compare(source_query, mode, now)}
3232
else
3333
{:error, :not_supported}
3434
end
3535
end
3636

37-
defp do_compare(_site, source_query, "year_over_year", now) do
37+
defp do_compare(source_query, "year_over_year", now) do
3838
start_date = Date.add(source_query.date_range.first, -365)
3939
end_date = earliest(source_query.date_range.last, now) |> Date.add(-365)
4040

4141
range = Date.range(start_date, end_date)
4242
%Stats.Query{source_query | date_range: range}
4343
end
4444

45-
defp do_compare(_site, %Stats.Query{period: "year"} = query, "previous_period", now) do
46-
# Querying current year to date
47-
{new_first, new_last} =
48-
if Timex.compare(now, query.date_range.first, :year) == 0 do
49-
diff =
50-
Timex.diff(
51-
Timex.beginning_of_year(now),
52-
now,
53-
:days
54-
) - 1
45+
defp do_compare(source_query, "previous_period", now) do
46+
last = earliest(query.date_range.last, now)
47+
diff_in_days = Date.diff(query.date_range.first, last) - 1
5548

56-
{query.date_range.first |> Timex.shift(days: diff),
57-
now |> Timex.to_date() |> Timex.shift(days: diff)}
58-
else
59-
diff = Timex.diff(query.date_range.first, query.date_range.last, :days) - 1
49+
new_first = Date.add(query.date_range.first, diff_in_days)
50+
new_last = Date.add(last, diff_in_days)
6051

61-
{query.date_range.first |> Timex.shift(days: diff),
62-
query.date_range.last |> Timex.shift(days: diff)}
63-
end
64-
65-
Map.put(query, :date_range, Date.range(new_first, new_last))
66-
end
67-
68-
defp do_compare(_site, %Stats.Query{period: "month"} = query, "previous_period", now) do
69-
# Querying current month to date
70-
{new_first, new_last} =
71-
if Timex.compare(now, query.date_range.first, :month) == 0 do
72-
diff =
73-
Timex.diff(
74-
Timex.beginning_of_month(now),
75-
now,
76-
:days
77-
) - 1
78-
79-
{query.date_range.first |> Timex.shift(days: diff),
80-
now |> Timex.to_date() |> Timex.shift(days: diff)}
81-
else
82-
diff = Timex.diff(query.date_range.first, query.date_range.last, :days) - 1
83-
84-
{query.date_range.first |> Timex.shift(days: diff),
85-
query.date_range.last |> Timex.shift(days: diff)}
86-
end
87-
88-
Map.put(query, :date_range, Date.range(new_first, new_last))
89-
end
90-
91-
defp do_compare(_site, query, "previous_period", _now) do
92-
diff = Timex.diff(query.date_range.first, query.date_range.last, :days) - 1
93-
new_first = query.date_range.first |> Timex.shift(days: diff)
94-
new_last = query.date_range.last |> Timex.shift(days: diff)
95-
Map.put(query, :date_range, Date.range(new_first, new_last))
52+
range = Date.range(new_first, new_last)
53+
%Stats.Query{source_query | date_range: range}
9654
end
9755

9856
defp earliest(a, b) do

0 commit comments

Comments
 (0)