GenServer child_spec/1 in Elixir 1.5
Elixir 1.5 GenServer introduces overridable child_spec/1. Now instead of, in your application supervisor, calling;
# MyExample.Application
def start(_type, _args) do
  children = [
    worker(MyExample.MyChild, [], restart: :permanent, shutdown: 5000)
  ]
end
You can now let the child decide how its supposed to be implemented by overriding child_spec/1 in the child. 
#MyExample.Application
def start(_type, _args) do
  children = [ 
    MyExample.MyChild
   ]
end
# MyExample.MyChild
def child_spec(_args) do
  %{
    id: __Module__,
    start: { __Module__, :start_link, []},
    restart: :permanent,
    shutdown: 5000,
    type: :worker
   }
end
You can view the defaults that child_spec/1 implements in the source code. 
Arguments can be passed to  child_spec/1 which can then be used for pattern matching and custom configurations based on the supervisor accessing it:
#MyExample.Application
def start(_type, _args) do
  children = [ 
    {MyExample.MyChild, "temporary"}
   ]
end
# MyExample.MyChild
def child_spec("temporary") do
  %{
    id: __Module__,
    start: { __Module__, :start_link, []},
    restart: :temporary,
    shutdown: 5000,
    type: :worker
   }
end
def child_spec(_) do
  %{
    id: __Module__,
    start: { __Module__, :start_link, []},
    restart: :permanent,
    shutdown: 5000,
    type: :worker
   }
end