A collection of random functions that I've used in more than one project:

* **pipe_while_ok**

  Create pipelines that terminate early if any step fails to return a
  tuple that starts `{:ok, ...}`

* **before_returning**

  Like Ruby's `returning`, it evaluates its first argument, then evalates the
  `do` block. It always returns the value of its first argument.

  The `do` block is like the body of a `case`, in that it receives the value
  of the first argument and patterns matches on it.

      before_returning do
        {:ok, _file} -> Logger.debug("#{name} opened OK")
        {:error, reason} -> Logger.error("Opening #{name}: #{:file.format_error(reason)}")