lib/chaps/sub_apps.ex

defmodule Chaps.SubApps do
  @moduledoc """
  Handles information of sub apps of umbrella projects.
  """

  def find(sub_apps, compile_path) do
    Enum.find(sub_apps, {nil, nil}, fn {_sub_app, path} ->
      String.starts_with?(compile_path, path)
    end)
  end

  def parse(deps) do
    deps
    |> Enum.map(&{&1.app, &1.opts[:build]})
    |> Enum.sort(fn {_app1, build_path1}, {_app2, build_path2} ->
      # sort the longest paths first to avoid matching a path that contains another
      # example "./apps/myapp_server" would contain path "./apps/myapp"
      String.length(build_path1) > String.length(build_path2)
    end)
  end
end