lib/orbit.ex

defmodule Orbit do
  @moduledoc """
  A simple Gemini app framework.

  ## Quick Start

  Add the dependency:

      # mix.exs
      {:orbit, "~> 0.1.0"}

  Generate a self-signed certificate:

  ```sh
  $ openssl req -new -x509 -days 365 -nodes -out priv/cert.pem -keyout priv/key.pem
  ```

  Add the `Orbit.Capsule` supervisor to your application supervision tree:

      # application.ex
      {
        Orbit.Capsule,
        endpoint: MyAppGem.Router,
        certfile: Path.join(Application.app_dir(:my_app, "priv"), "cert.pem"],
        keyfile: Path.join(Application.app_dir(:my_app, "priv"), "key.pem")
      }

  Define a router:

      # lib/my_app_gem/router.ex
      defmodule MyAppGem.Router do
        use MyAppGem, :router

        route "/", MyAppGem.PageController, :home
      end

  Define a controller:

      # lib/my_app_gem/page_controller.ex
      defmodule MyAppGem.PageController do
        use Orbit.Controller, view: MyAppGem.PageView

        import Orbit.Controller
        import Orbit.Request

        def home(req, _) do
          req
          |> assign(name: "world")
          |> render()
        end
      end

  And a view:

      # lib/my_app_gem/page_view.ex
      defmodule MyAppGem.PageView do
        use Orbit.View

        def home(assigns) do
          ~G\"\"\"
          Hello, <%= @name %>!
          \"\"\"
        end
      end

  Finally, start the application and visit `gemini://localhost/`!
  """
end