PhoenixCalendar
===============
Integrates Phoenix with [Calendar](https://github.com/lau/calendar).
Implements protocols for displaying Calendar
structs such as Date, Time, DateTime, NaiveDateTime
with Phoenix HTML. This will solve errors such as:
`protocol Phoenix.HTML.Safe not implemented for %Calendar.DateTime`
## Example installation with Calendar, Phoenix and Ecto
Add `:phoenix_calendar` and `:calecto` to your deps function
is the `mix.exs` file.
```elixir
defp deps do
[
{:phoenix_calendar, "~> 0.1.2"},
{:calecto, "~> 0.4.0"},
]
end
```
Then run `mix deps.get` which will fetch the new packages via the hex package manager.
Also add `tzdata` to the list of applications in the `mix.exs` file:
```elixir
def application do
[applications: [:phoenix, :phoenix_html, :cowboy, :logger,
:phoenix_ecto, :postgrex, :tzdata]]
end
```
## Making Calendar easier to use in Phoenix with the use macro
In `web/web.ex`:
Add `use Calendar` for aliases so that in your views, controllers and models you can use `Time`, `Date`, `DateTime`, `NaiveDateTime`, `Strftime`
without prefixing them with Calendar. Instead of `Calendar.DateTime.now_utc` you can just use `DateTime.now_utc`.
```elixir
def view do
quote do
use Phoenix.View, root: "web/templates"
use Calendar
#.....
```
```elixir
def controller do
quote do
use Phoenix.Controller
use Calendar
#.....
```
```elixir
def model do
quote do
use Ecto.Model
use Calecto.Model, usec: true
use Calendar
end
end
```
For models we also add a line to use Calecto.Model. This adds Calendar
functionality to the Ecto models.
## Ecto not required
If you want use Phoenix with Calendar, but without Ecto, you can just leave out Calecto.