Some thoughts and ideas on best practices building Ember apps after 2 years building and maintaining 6+ apps. This is less about the obvious best practices, like use ember-cli, and more along the lines of when to use what technique. As with every best practice there are exceptions to every rule.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule MyApp do | |
use Application | |
def start(_type, _args) do | |
import Supervisor.Spec, warn: false | |
children = [ | |
Plug.Adapters.Cowboy.child_spec(:http, MyApp.Router, [], [ | |
dispatch: dispatch | |
]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Reload/recompile code before each request in development only using Plug & Mix. | |
# Assumes MyApp.Router is a plug that handles actual routing. | |
def MyApp.Main do | |
use Plug.Builder | |
plug :reload | |
plug :dispatch | |
def reload(conn, _opts) do | |
if Mix.env == :dev, do: Mix.Tasks.Compile.Elixir.run(["--ignore-module-conflict"]) |
To pull in dependencies and have them run their migrations in the parent apps' repo.
MyChild - A mix application with ecto migrations, schemas, etc. MyParent - A phoenix application that wants to leverage the child application.
In this case MyParent has added MyChild as a mix dependency via github, eg:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule LocalStorage do | |
use GenServer | |
# API | |
def start_link do | |
GenServer.start_link(__MODULE__, %{}, name: __MODULE__) | |
end | |
def set_item(key, val) do |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Unknown functions: | |
'Elixir.JaSerializer.Formatter.Function':'__impl__'/1 | |
'Elixir.JaSerializer.Formatter.Map':'__impl__'/1 | |
'Elixir.JaSerializer.Formatter.PID':'__impl__'/1 | |
'Elixir.JaSerializer.Formatter.Port':'__impl__'/1 | |
'Elixir.JaSerializer.Formatter.Reference':'__impl__'/1 | |
'Elixir.JaSerializer.Formatter.Tuple':'__impl__'/1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Post do | |
def create(%{title: t, body: b, author_id: a} = atts) when is_binary(t) and is_binary(b) and is_binary(a) do | |
{:ok, Dict.merge(atts, :id, 1234)} | |
end | |
def create(_atts) do | |
{:error, %{error: "Invalid attributes"}} | |
end | |
end |
I hereby claim:
- I am alanpeabody on github.
- I am alanpeabody (https://keybase.io/alanpeabody) on keybase.
- I have a public key ASBfa3-DEWUJUKe4a5LeMKEeNJ3dyBwn93SXcewQPoDMpQo
To claim this, I am signing this object:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Project@0.0.1 /project_path/ | |
├─┬ browserify@3.19.1 | |
│ ├── assert@1.1.0 | |
│ ├─┬ browser-pack@2.0.1 | |
│ │ ├─┬ combine-source-map@0.3.0 | |
│ │ │ ├── convert-source-map@0.3.3 | |
│ │ │ ├── inline-source-map@0.3.0 | |
│ │ │ └─┬ source-map@0.1.31 | |
│ │ │ └── amdefine@0.1.0 |
NewerOlder