Packages

Build calendars from ecto queries, includes view helpers for easy rendering with Phoenix

Current section

Files

Jump to
ez_calendar lib ez_calendar.ex
Raw

lib/ez_calendar.ex

defmodule EZCalendar do
@moduledoc """
Turns Ecto queries into calendar data structures.
"""
alias EZCalendar.ParamParser
defmacro __using__(_) do
quote do
def calendar(query, calendar_type, date, opts \\ []) do
EZCalendar.build(calendar_type, __MODULE__, query, date, opts)
end
def calendar!(query, calendar_type, date, opts \\ []) do
EZCalendar.build!(calendar_type, __MODULE__, query, date, opts)
end
def month_calendar(query, date, opts \\ []) do
EZCalendar.build(EZCalendar.MonthCalendar, __MODULE__, query, date, opts)
end
def month_calendar!(query, date, opts \\ []) do
EZCalendar.build!(EZCalendar.MonthCalendar, __MODULE__, query, date, opts)
end
def week_calendar(query, date, opts \\ []) do
EZCalendar.build(EZCalendar.WeekCalendar, __MODULE__, query, date, opts)
end
def week_calendar!(query, date, opts \\ []) do
EZCalendar.build!(EZCalendar.WeekCalendar, __MODULE__, query, date, opts)
end
def day_calendar(query, date, opts \\ []) do
EZCalendar.build(EZCalendar.DayCalendar, __MODULE__, query, date, opts)
end
def day_calendar!(query, date, opts \\ []) do
EZCalendar.build!(EZCalendar.DayCalendar, __MODULE__, query, date, opts)
end
end
end
def build(calendar, repo, query, date, opts) do
case ParamParser.to_erl(date) do
{:ok, date_erl} ->
{:ok, build_calendar(calendar, repo, query, date_erl, opts)}
error -> error
end
end
def build!(calendar, repo, query, date, opts) do
{:ok, date_erl} = ParamParser.to_erl(date)
build_calendar(calendar, repo, query, date_erl, opts)
end
defp build_calendar(calendar, repo, query, date, opts) do
{start_date, end_date} = calendar.date_range(date)
EZCalendar.CalendarBuilder.build(query, repo, start_date, end_date, opts)
|> calendar.build(date)
end
end