Skip to content

Instantly share code, notes, and snippets.

Avatar

Alan Peabody alanpeabody

  • Burlington, Vermont
View GitHub Profile
View elixir_workshop_ideas.md

Brown Bag Beers Elixir Workshop

Goal: Get some hands on time playing with Elixir and OTP.

Things to try (pick one!)

0. Generating a new supervised app with mix.

Covers:

  • mix
View plug_authentication.ex
defmodule Authenticate do
import Plug.Conn
def call(conn, _opts) do
case get_req_header(conn, "authorization") do
["Bearer " <> token] -> authenticate(conn, token)
_ -> reject(conn, "Bearer token missing")
end
end
@alanpeabody
alanpeabody / plug_overview.ex
Last active Aug 29, 2015
Plug 101 - Part 1
View plug_overview.ex
conn
|> set_current_user
|> parse_json_body
|> create_model
|> set_exp_headers
@alanpeabody
alanpeabody / address.ex
Created Mar 11, 2015
elixir embedding step 7
View address.ex
defmodule App.Models.Address do
defstruct [:address, :address2, :city, :region, :postal, :country]
defmodule Type do
@behaviour Ecto.Type
alias App.Models.Address
def type, do: :json
def cast(addrs) when is_list(addrs) do
@alanpeabody
alanpeabody / settings.ex
Last active Aug 29, 2015
embedding elixir structs step 6
View settings.ex
defmodule App.Models.Settings do
defstruct [
newsletter: false,
publish_profile: true,
email_notifications: true
]
defmodule Type do
@behaviour Ecto.Type
alias App.Models.Settings
@alanpeabody
alanpeabody / user.ex
Created Mar 11, 2015
embedding elixir structs step 4
View user.ex
defmodule App.Models.User do
use Ecto.Model
schema "users" do
field :email, :string
field :crypted_pass, :string
field :settings, App.Models.Settings.Type
field :addresses, App.Models.Address.Type
timestamps
@alanpeabody
alanpeabody / migration.ex
Last active Aug 29, 2015
embedding elixir structs step 3
View migration.ex
# Generated with mix ecto.gen.migration add_user_settings_and_address
defmodule App.Repo.Migrations.AddUserSettingsAndAddress do
use Ecto.Migration
def change do
alter table(:users) do
add :settings, :json
add :addresses, :json
end
end
@alanpeabody
alanpeabody / json.ex
Created Mar 11, 2015
embedding elixir structs part 2
View json.ex
defmodule Extensions.JSON do
alias Postgrex.TypeInfo
@behaviour Postgrex.Extension
@json ["json", "jsonb"]
def init(_parameters, opts),
do: Keyword.fetch!(opts, :library)
def matching(_library),
@alanpeabody
alanpeabody / config.ex
Last active Aug 29, 2015
embedding elixir structs part 1
View config.ex
# config/config.ex
config :app, App.Repo,
database: "my_app_dev",
username: "postgres",
password: "nope",
hostname: "localhost",
extensions: [{Extensions.Json, library: Poison}]
@alanpeabody
alanpeabody / model.ex
Last active Mar 23, 2019
Ecto change password w/ confirmation.
View model.ex
defmodule User do
use Ecto.Model
schema "users" do
field :email, :string
field :hashed_password, :string
field :password, :string, virtual: true
field :password_confirmation, virtual: true
timestamps