Skip to content

Instantly share code, notes, and snippets.

View desmondmonster's full-sized avatar

Desmond Bowe desmondmonster

View GitHub Profile
@desmondmonster
desmondmonster / .credo.exs
Created June 14, 2018 21:19
sample credo config
%{
configs: [
%{
name: "default",
files: %{
included: ["lib/", "src/", "web/", "apps/"],
excluded: [~r"/_build/", ~r"/deps/", "**/config/*.exs"]
},
requires: [],
strict: false,
defmodule Crevalle.Stack do
end
@desmondmonster
desmondmonster / crm.ex
Last active March 14, 2018 23:22
CRM Interface Module
defmodule YourApp.CRM do
def create_user(user) do
crm_data =
user
|> fetch_crm_data()
|> parse()
user
|> YourApp.User.crm_changeset(crm_data)
@desmondmonster
desmondmonster / account_setup_supervisor.ex
Last active March 14, 2018 23:31
Account Setup Task Supervisor
defmodule YourApp.AccountSetupSupervisor do
def set_up_user_account(user) do
opts = [restart: :transient]
Task.Supervisor.start_child(__MODULE__, YourApp.CRM, :create_user, [user], opts)
Task.Supervisor.start_child(__MODULE__, YourApp.Fulfillment, :set_nearest_location, [user], opts)
end
end
defmodule App.UserService do
def create_user(params) do
%App.User{}
|> App.User.changeset(params)
|> App.Repo.insert()
|> case do
{:ok, user} ->
Task.start(fn -> send_email_to_user(user) end) # 🎉
{:ok, user}
@desmondmonster
desmondmonster / email_sender.ex
Last active March 14, 2018 18:15
Quick GenServer for asynchronously sending email
defmodule PopularApp.EmailSender do
use GenServer
def start_link do
GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
end
def init(:ok) do
{:ok, %{last_sent: nil, last_data: nil}}
end
@desmondmonster
desmondmonster / application.ex
Last active March 14, 2018 18:16
Application starting an email-sending Worker
defmodule PopularApp.Application do
use Application
def start(_type, _args) do
import Supervisor.Spec
children = [
worker(PopularApp.EmailSender, [])
]
@desmondmonster
desmondmonster / recurring_genserver.ex
Last active March 14, 2018 17:42
Example of using a GenServer for recurring background work
defmodule CryptoApp.AccountSync do
use GenServer
@interval 1_000
def start_link do
GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
end
def init(:ok) do
@desmondmonster
desmondmonster / application.ex
Last active March 14, 2018 23:18
Application With Worker
defmodule YourApp.Application do
use Application
def start(_type, _args) do
import Supervisor.Spec
children = [
{Task.Supervisor, name: YourApp.AccountSetupSupervisor}
]
@desmondmonster
desmondmonster / deploy.rb
Last active October 20, 2017 07:33
Elixir Deploy Script with Versioning Niceties
#!/usr/bin/ruby
require 'optparse'
FILE_NAME = 'VERSION.txt'
options = {}
def red(str); "\e[31m#{str}\e[0m"; end
def green(str); "\e[32m#{str}\e[0m"; end