Skip to content

Commit 08efa80

Browse files
authored
fix: Update Ash.Gen.Resource, validate relationship type (#2563)
1 parent 5526096 commit 08efa80

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

lib/mix/tasks/gen/ash.gen.resource.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,10 @@ if Code.ensure_loaded?(Igniter) do
211211
Regex.match?(~r/^[a-zA-Z][a-zA-Z0-9_]*[!?]?$/, name)
212212
end
213213

214+
defp valid_relationship_type(type) do
215+
type in ["has_one", "has_many", "many_to_many", "belongs_to"]
216+
end
217+
214218
defp attribute_modifier_string(modifiers) do
215219
modifiers
216220
|> Enum.uniq()
@@ -463,6 +467,10 @@ if Code.ensure_loaded?(Igniter) do
463467
)
464468

465469
[type, name, destination | modifiers] ->
470+
if !valid_relationship_type(type) do
471+
raise "Invalid relationship type provided: #{type}"
472+
end
473+
466474
if !valid_attribute_name?(name) do
467475
raise "Invalid relationship name provided: #{name}"
468476
end

test/mix/tasks/ash.gen.resource_test.exs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,19 @@ defmodule Mix.Tasks.Ash.Gen.ResourceTest do
333333
end
334334
""")
335335
end
336+
337+
test "rejects invalid relationship type" do
338+
assert_raise RuntimeError, fn ->
339+
test_project()
340+
|> Igniter.compose_task("ash.gen.resource", [
341+
"MyApp.Blog.Post",
342+
"--relationship",
343+
# belongs-to is not valid
344+
"belongs-to:author:MyApp.Accounts.User,has_many:comments:MyApp.Blog.Comment"
345+
])
346+
|> refute_creates("lib/my_app/blog/post.ex")
347+
end
348+
end
336349
end
337350

338351
describe "default actions" do

0 commit comments

Comments
 (0)