Current section

8 Versions

Jump to

Compare versions

4 files changed
+34 additions
-14 deletions
  @@ -1,5 +1,9 @@
1 1 # Changelog
2 2
3 + ## v0.3.4
4 +
5 + - Avoid `Mix.Project.config/0` at runtime when resolving the icon manifest path in OTP releases by using configured or discovered application priv directories
6 +
3 7 ## v0.3.3
4 8
5 9 - Fix HEEx icon discovery with Phoenix LiveView 1.2 tag engine parser
  @@ -1,7 +1,7 @@
1 1 {<<"links">>,
2 2 [{<<"GitHub">>,<<"https://github.com/elixir-volt/phoenix_iconify">>}]}.
3 3 {<<"name">>,<<"phoenix_iconify">>}.
4 - {<<"version">>,<<"0.3.3">>}.
4 + {<<"version">>,<<"0.3.4">>}.
5 5 {<<"description">>,
6 6 <<"Phoenix components for Iconify icons with compile-time discovery">>}.
7 7 {<<"elixir">>,<<"~> 1.19">>}.
  @@ -12,19 +12,13 @@ defmodule PhoenixIconify.Manifest do
12 12 Returns the path to the manifest file for the given application.
13 13 """
14 14 def manifest_path(app \\ nil) do
15 - app = app || Application.get_env(:phoenix_iconify, :otp_app) || Mix.Project.config()[:app]
15 + app = app || Application.get_env(:phoenix_iconify, :otp_app) || mix_project_app()
16 16
17 - priv_dir =
18 - if app do
19 - case :code.priv_dir(app) do
20 - {:error, :bad_name} -> "priv"
21 - path -> List.to_string(path)
22 - end
23 - else
24 - "priv"
25 - end
26 -
27 - Path.join([priv_dir, "iconify", @manifest_filename])
17 + if app do
18 + Path.join([priv_dir(app), "iconify", @manifest_filename])
19 + else
20 + discover_manifest_path() || Path.join(["priv", "iconify", @manifest_filename])
21 + end
28 22 end
29 23
30 24 @doc """
  @@ -107,6 +101,28 @@ defmodule PhoenixIconify.Manifest do
107 101 get_icons() |> map_size()
108 102 end
109 103
104 + defp priv_dir(app) do
105 + case :code.priv_dir(app) do
106 + {:error, :bad_name} -> "priv"
107 + path -> List.to_string(path)
108 + end
109 + end
110 +
111 + defp discover_manifest_path do
112 + :application.loaded_applications()
113 + |> Enum.map(fn {app, _description, _version} -> app end)
114 + |> Enum.sort()
115 + |> Enum.reject(&(&1 in [:phoenix_iconify, :iconify]))
116 + |> Enum.map(&Path.join([priv_dir(&1), "iconify", @manifest_filename]))
117 + |> Enum.find(&File.regular?/1)
118 + end
119 +
120 + defp mix_project_app do
121 + if Code.ensure_loaded?(Mix.Project) and function_exported?(Mix.Project, :config, 0) do
122 + Mix.Project.config()[:app]
123 + end
124 + end
125 +
110 126 defp decode!(json) do
111 127 _icon_defaults = struct!(Iconify.Icon, name: "", body: "")
112 128 %{version: @version, icons: icons} = Jason.decode!(json, keys: :atoms!)
  @@ -1,7 +1,7 @@
1 1 defmodule PhoenixIconify.MixProject do
2 2 use Mix.Project
3 3
4 - @version "0.3.3"
4 + @version "0.3.4"
5 5 @source_url "https://github.com/elixir-volt/phoenix_iconify"
6 6
7 7 def project do