BrDocs

License Hex Version Ebert Build Status Coverage Status

Elixir client to generate, validate and format different Brazilian docs.

BrDocs it's not Ecto specific, but has Ecto support. #ftw

Currently supported docs: CPF, CNPJ

This README follows master branch, which may not be the currently published version.

Here are the docs for the latest published version of BrDocs.

Installation

To install in all environments (useful for generating seed data in dev/prod):

In mix.exs, add the BrDocs dependency:

def deps do
  # Get the latest from hex.pm. Works with Ecto +2.x
  [
    {:brdocs, "~> 0.1"}
  ]
end

Overview

Check out the docs for more details.

Generating valid (but fake) docs:

iex> BrDocs.generate(:cpf)
%BrDocs.BrDoc{kind: :cpf, value: "12345678909"}

iex> BrDocs.generate(:cpf, formatted: true)
%BrDocs.BrDoc{kind: :cpf, value: "123.456.789-09"}

iex> BrDocs.generate(:cnpj)
%BrDocs.BrDoc{kind: :cnpj, value: "11444777000161"}

iex> BrDocs.generate(:cnpj, formatted: true)
%BrDocs.BrDoc{kind: :cnpj, value: "11.444.777/0001-61"}

Format docs:

iex> BrDocs.format("12345678909", :cpf)
%BrDocs.BrDoc{kind: :cpf, value: "123.456.789-09"}

iex> BrDocs.format("11444777000161", :cnpj)
%BrDocs.BrDoc{kind: :cnpj, value: "11.444.777/0001-61"}

Validate docs:

iex> BrDocs.validate(%BrDocs.BrDoc{kind: :cpf, value: "12345678909"})
true

iex> BrDocs.validate(%BrDocs.BrDoc{kind: :cpf, value: "12345678900"})
false

iex> BrDocs.validate(%BrDocs.BrDoc{kind: :cnpj, value: "11444777000161"})
true

iex> BrDocs.validate(%BrDocs.BrDoc{kind: :cnpj, value: "11444777000160"})
false

Ecto Support

There is a validation functions to makes it easy to validate your Brazilian docs w/ Ecto.

Maybe, more to come.

Usage:

defmodule User do
  use Ecto.Schema

  import Ecto.Changeset
  import BrDocs.Changeset

  schema "users" do
    field :name
    field :brazilian_doc
  end

  def changeset(user, params \\\\ %{}) do
    user
    |> cast(params, [:name, :brazilian_doc])
    |> validate_required([:name, :brazilian_doc])
    |> validate_doc(:brazilian_doc, :cpf)
    |> unique_constraint(:brazilian_doc)
  end
end

Contributing

Before opening a pull request, please open an issue first.

$ git clone https://github.com/emaiax/brdocs.git
$ cd brdocs
$ mix deps.get
$ mix format --check-formatted
$ mix credo --strict
$ mix test

Once you've made your additions and everything passes, go ahead and open a PR!