Skip to content

Commit 31d9765

Browse files
authored
Remove compile-time dep between examples and subjects (#774)
1 parent 4e68689 commit 31d9765

4 files changed

Lines changed: 52 additions & 31 deletions

File tree

lib/surface/catalogue.ex

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,23 @@ defmodule Surface.Catalogue do
6767

6868
@doc false
6969
def get_metadata(module) do
70-
case Code.fetch_docs(module) do
71-
{:docs_v1, _, _, "text/markdown", docs, %{catalogue: meta}, _} ->
72-
doc =
73-
if :hidden == docs,
74-
do: "",
75-
else: Map.get(docs, "en")
70+
if Code.ensure_loaded?(module) and function_exported?(module, :__catalogue__, 0) do
71+
meta = module.__catalogue__()
7672

77-
meta |> Map.new() |> Map.put(:doc, doc)
73+
case Code.fetch_docs(module) do
74+
{:docs_v1, _, _, "text/markdown", docs, _, _} ->
75+
doc =
76+
if :hidden == docs,
77+
do: "",
78+
else: Map.get(docs, "en")
7879

79-
_ ->
80-
nil
80+
meta |> Map.new() |> Map.put(:doc, doc)
81+
82+
_ ->
83+
meta |> Map.new()
84+
end
85+
else
86+
nil
8187
end
8288
end
8389

lib/surface/catalogue/examples.ex

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,18 +95,20 @@ defmodule Surface.Catalogue.Examples do
9595
subject = Surface.Catalogue.fetch_subject!(opts, __MODULE__, __CALLER__)
9696
Module.register_attribute(__CALLER__.module, :__examples__, accumulate: true)
9797

98+
lv_opts = Keyword.drop(opts, [:subject, :catalogue, :height, :title, :body, :direction, :code_perc, :assert])
99+
98100
quote do
99101
@after_compile unquote(__MODULE__)
100102
@__use_line__ unquote(__CALLER__.line)
101103
@before_compile unquote(__MODULE__)
102104
@on_definition unquote(__MODULE__)
103105

104-
use Surface.LiveView, unquote(opts)
106+
use Surface.LiveView, unquote(lv_opts)
105107

106108
alias unquote(subject)
107109
require Surface.Catalogue.Data, as: Data
108110

109-
@__example_config__ unquote(opts)
111+
@__example_config__ unquote(Macro.escape(opts))
110112

111113
import Surface, except: [sigil_F: 2]
112114

@@ -141,12 +143,15 @@ defmodule Surface.Catalogue.Examples do
141143
|> Enum.reverse()
142144

143145
quote do
144-
@moduledoc catalogue: [
145-
type: :example,
146-
subject: unquote(subject),
147-
config: unquote(config),
148-
examples_configs: unquote(examples_configs)
149-
]
146+
@doc false
147+
def __catalogue__ do
148+
[
149+
type: :example,
150+
subject: unquote(subject),
151+
config: unquote(config),
152+
examples_configs: unquote(examples_configs)
153+
]
154+
end
150155
end
151156
end
152157

lib/surface/catalogue/live_example.ex

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,15 @@ defmodule Surface.Catalogue.LiveExample do
5656
defmacro __using__(opts) do
5757
subject = Surface.Catalogue.fetch_subject!(opts, __MODULE__, __CALLER__)
5858

59+
lv_opts = Keyword.drop(opts, [:subject, :catalogue, :height, :title, :body, :direction, :code_perc, :assert])
60+
5961
quote do
60-
@__example_config__ unquote(opts)
62+
@__example_config__ unquote(Macro.escape(opts))
6163
@__use_line__ unquote(__CALLER__.line)
6264
@after_compile unquote(__MODULE__)
6365
@before_compile unquote(__MODULE__)
6466

65-
use Surface.LiveView, unquote(opts)
67+
use Surface.LiveView, unquote(lv_opts)
6668

6769
alias unquote(subject)
6870
require Surface.Catalogue.Data, as: Data
@@ -104,12 +106,15 @@ defmodule Surface.Catalogue.LiveExample do
104106
]
105107

106108
quote do
107-
@moduledoc catalogue: [
108-
type: :example,
109-
subject: unquote(subject),
110-
config: unquote(config),
111-
examples_configs: unquote(examples_configs)
112-
]
109+
@doc false
110+
def __catalogue__ do
111+
[
112+
type: :example,
113+
subject: unquote(subject),
114+
config: unquote(config),
115+
examples_configs: unquote(examples_configs)
116+
]
117+
end
113118
end
114119
end
115120

lib/surface/catalogue/playground.ex

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,15 @@ defmodule Surface.Catalogue.Playground do
5353
defmacro __using__(opts) do
5454
subject = Surface.Catalogue.fetch_subject!(opts, __MODULE__, __CALLER__)
5555

56+
lv_opts = Keyword.drop(opts, [:subject, :catalogue, :height, :title, :body, :direction, :code_perc, :assert])
57+
5658
quote do
5759
@config unquote(opts)
5860
@after_compile unquote(__MODULE__)
5961
@__use_line__ unquote(__CALLER__.line)
6062
@before_compile unquote(__MODULE__)
6163

62-
use Surface.LiveView, unquote(opts)
64+
use Surface.LiveView, unquote(lv_opts)
6365

6466
alias unquote(subject)
6567
require Surface.Catalogue.Data, as: Data
@@ -129,11 +131,14 @@ defmodule Surface.Catalogue.Playground do
129131

130132
common_ast =
131133
quote do
132-
@moduledoc catalogue: [
133-
type: :playground,
134-
subject: unquote(subject),
135-
config: unquote(config)
136-
]
134+
@doc false
135+
def __catalogue__ do
136+
[
137+
type: :playground,
138+
subject: unquote(subject),
139+
config: unquote(config)
140+
]
141+
end
137142

138143
data props, :keyword, default: unquote(Macro.escape(props_data))
139144
data slots, :keyword, default: unquote(slots_data)

0 commit comments

Comments
 (0)