Added better documentation.

This commit is contained in:
Martin Frost 2015-05-27 19:33:15 +02:00
parent 6d2965b549
commit c0eb9ec41f
3 changed files with 77 additions and 4 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@
/deps
erl_crash.dump
*.ez
docs

View File

@ -13,6 +13,16 @@ defp deps do
end
```
2. Add the isn extension to your database
```elixir
{:ok, pid} = Postgrex.Connection.start_link(
hostname: "localhost",
database: "isn_test"
)
Postgrex.Connection.query!(pid, "CREATE EXTENSION isn;", [])
```
2. Register the postgrex extension
```elixir

View File

@ -4,6 +4,41 @@ defmodule Isn do
@behaviour Postgrex.Extension
@isn ~w(ean13 isbn13 ismn13 issn13 isbn ismn issn upc)
@moduledoc """
A Postgrex.Extension enabling the use of postgresql data types from the isn
extension.
Add this module as an extension when establishing your Postgrex connection:
Postgrex.Connection.start_link(
database: "isn_test",
extensions: [{Isn, {}}])
Then you can do Ecto.Migrations like this:
defmodule MyApp.Repo.Migrations.CreateBook do
use Ecto.Migration
def change do
create table(:books) do
add :isbn, :isbn13
# other fields
end
end
end
You can also define Ecto.Models using the matching custom Ecto.Types:
defmodule MyApp.Book do
use MyApp.Web, :model
schema "books" do
field :isbn, Isn.ISBN13
# other fields
end
end
"""
def init(parameters, _opts),
do: parameters
@ -21,13 +56,40 @@ defmodule Isn do
end
defmodule Isn.Base do
@moduledoc """
Base module for Isn custom ecto types.
"""
@doc """
Set up basic functionality for an Isn type.
This extends the calling module by defining implementations for
* type/0
* blank?/0
* cast/1
* load/1
* dump/1
"""
defmacro __using__(isn_type) do
quote bind_quoted: [isn_type: isn_type] do
# @behaviour Ecto.Type
#
ecto_type = isn_type |> Atom.to_string |> String.upcase
quote bind_quoted: [isn_type: isn_type, ecto_type: ecto_type] do
@behaviour Ecto.Type
@isn_type isn_type
@moduledoc """
Definition for the #{@isn_type} module.
Definition for the #{isn_type} module.
How to use this in an Ecto.Model
defmodule MyApp.Book do
use MyApp.Web, :model
schema "books" do
field :#{isn_type}, Isn.#{ecto_type}
# other fields
end
end
"""
def type,