mirror of
https://github.com/ash-project/ash.git
synced 2024-09-19 21:13:10 +12:00
chore: leverage latest from igniter
This commit is contained in:
parent
6db94e810c
commit
bb73544e09
7 changed files with 159 additions and 213 deletions
|
@ -678,7 +678,11 @@ defmodule Ash.Actions.Read do
|
||||||
expr
|
expr
|
||||||
|> Ash.Filter.used_aggregates(:*, true)
|
|> Ash.Filter.used_aggregates(:*, true)
|
||||||
|> Enum.map(fn %Ash.Query.Ref{attribute: aggregate, relationship_path: relationship_path} ->
|
|> Enum.map(fn %Ash.Query.Ref{attribute: aggregate, relationship_path: relationship_path} ->
|
||||||
%{aggregate | resource: query.resource, relationship_path: relationship_path ++ aggregate.relationship_path}
|
%{
|
||||||
|
aggregate
|
||||||
|
| resource: query.resource,
|
||||||
|
relationship_path: relationship_path ++ aggregate.relationship_path
|
||||||
|
}
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|> Enum.concat(Map.values(query.aggregates))
|
|> Enum.concat(Map.values(query.aggregates))
|
||||||
|
|
|
@ -2,89 +2,75 @@ defmodule Ash.Domain.Igniter do
|
||||||
@moduledoc "Codemods for working with Ash.Domain modules"
|
@moduledoc "Codemods for working with Ash.Domain modules"
|
||||||
|
|
||||||
def add_resource_reference(igniter, domain, resource) do
|
def add_resource_reference(igniter, domain, resource) do
|
||||||
igniter
|
Igniter.Code.Module.find_and_update_module!(igniter, domain, fn zipper ->
|
||||||
|> Igniter.update_elixir_file(Igniter.Code.Module.proper_location(domain), fn zipper ->
|
case Igniter.Code.Function.move_to_function_call_in_current_scope(
|
||||||
case Igniter.Code.Module.move_to_module_using(zipper, Ash.Domain) do
|
zipper,
|
||||||
|
:resources,
|
||||||
|
1
|
||||||
|
) do
|
||||||
:error ->
|
:error ->
|
||||||
{:error, "Could not find module using Ash.Domain"}
|
code =
|
||||||
|
"""
|
||||||
|
resources do
|
||||||
|
resource #{inspect(resource)}
|
||||||
|
end
|
||||||
|
"""
|
||||||
|
|
||||||
|
Igniter.Code.Common.add_code(zipper, code)
|
||||||
|
|
||||||
{:ok, zipper} ->
|
{:ok, zipper} ->
|
||||||
case Igniter.Code.Function.move_to_function_call_in_current_scope(
|
with {:ok, zipper} <- Igniter.Code.Common.move_to_do_block(zipper),
|
||||||
zipper,
|
:error <-
|
||||||
:resources,
|
Igniter.Code.Function.move_to_function_call_in_current_scope(
|
||||||
1
|
zipper,
|
||||||
) do
|
:resource,
|
||||||
:error ->
|
1,
|
||||||
code =
|
fn call ->
|
||||||
"""
|
Igniter.Code.Function.argument_matches_predicate?(
|
||||||
resources do
|
call,
|
||||||
resource #{inspect(resource)}
|
0,
|
||||||
end
|
&Igniter.Code.Common.nodes_equal?(&1, resource)
|
||||||
"""
|
)
|
||||||
|
end
|
||||||
Igniter.Code.Common.add_code(zipper, code)
|
) do
|
||||||
|
{:ok, Igniter.Code.Common.add_code(zipper, "resource #{inspect(resource)}")}
|
||||||
{:ok, zipper} ->
|
else
|
||||||
with {:ok, zipper} <- Igniter.Code.Common.move_to_do_block(zipper),
|
_ ->
|
||||||
:error <-
|
{:ok, zipper}
|
||||||
Igniter.Code.Function.move_to_function_call_in_current_scope(
|
|
||||||
zipper,
|
|
||||||
:resource,
|
|
||||||
1,
|
|
||||||
fn call ->
|
|
||||||
Igniter.Code.Function.argument_matches_predicate?(
|
|
||||||
call,
|
|
||||||
0,
|
|
||||||
&Igniter.Code.Common.nodes_equal?(&1, resource)
|
|
||||||
)
|
|
||||||
end
|
|
||||||
) do
|
|
||||||
Igniter.Code.Common.add_code(zipper, "resource #{inspect(resource)}")
|
|
||||||
else
|
|
||||||
_ ->
|
|
||||||
{:ok, zipper}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_resource_reference(igniter, domain, resource) do
|
def remove_resource_reference(igniter, domain, resource) do
|
||||||
igniter
|
Igniter.Code.Module.find_and_update_module!(igniter, domain, fn zipper ->
|
||||||
|> Igniter.update_elixir_file(Igniter.Code.Module.proper_location(domain), fn zipper ->
|
case Igniter.Code.Function.move_to_function_call_in_current_scope(
|
||||||
case Igniter.Code.Module.move_to_module_using(zipper, Ash.Domain) do
|
zipper,
|
||||||
|
:resources,
|
||||||
|
1
|
||||||
|
) do
|
||||||
:error ->
|
:error ->
|
||||||
{:error, "Could not find module using Ash.Domain"}
|
zipper
|
||||||
|
|
||||||
{:ok, zipper} ->
|
{:ok, zipper} ->
|
||||||
case Igniter.Code.Function.move_to_function_call_in_current_scope(
|
with {:ok, zipper} <- Igniter.Code.Common.move_to_do_block(zipper),
|
||||||
zipper,
|
{:ok, zipper} <-
|
||||||
:resources,
|
Igniter.Code.Function.move_to_function_call_in_current_scope(
|
||||||
1
|
zipper,
|
||||||
) do
|
:resource,
|
||||||
:error ->
|
1,
|
||||||
zipper
|
fn call ->
|
||||||
|
Igniter.Code.Function.argument_matches_predicate?(
|
||||||
{:ok, zipper} ->
|
call,
|
||||||
with {:ok, zipper} <- Igniter.Code.Common.move_to_do_block(zipper),
|
0,
|
||||||
{:ok, zipper} <-
|
&Igniter.Code.Common.nodes_equal?(&1, resource)
|
||||||
Igniter.Code.Function.move_to_function_call_in_current_scope(
|
)
|
||||||
zipper,
|
end
|
||||||
:resource,
|
) do
|
||||||
1,
|
{:ok, Sourceror.Zipper.remove(zipper)}
|
||||||
fn call ->
|
else
|
||||||
Igniter.Code.Function.argument_matches_predicate?(
|
_ ->
|
||||||
call,
|
{:ok, zipper}
|
||||||
0,
|
|
||||||
&Igniter.Code.Common.nodes_equal?(&1, resource)
|
|
||||||
)
|
|
||||||
end
|
|
||||||
) do
|
|
||||||
{:ok, Sourceror.Zipper.remove(zipper)}
|
|
||||||
else
|
|
||||||
_ ->
|
|
||||||
{:ok, zipper}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -1,79 +1,44 @@
|
||||||
defmodule Ash.Resource.Igniter do
|
defmodule Ash.Resource.Igniter do
|
||||||
@moduledoc "Codemods for working with Ash.Resource modules"
|
@moduledoc "Codemods for working with Ash.Resource modules"
|
||||||
|
|
||||||
def move_to_resource(zipper) do
|
|
||||||
app_name = Igniter.Project.Application.app_name()
|
|
||||||
|
|
||||||
resources = [
|
|
||||||
Ash.Resource | Application.get_env(app_name, :base_resources) || []
|
|
||||||
]
|
|
||||||
|
|
||||||
case Igniter.Code.Module.move_to_module_using(zipper, resources) do
|
|
||||||
:error ->
|
|
||||||
{:error,
|
|
||||||
"""
|
|
||||||
Could not find module using Ash.Resource or any base resource.
|
|
||||||
|
|
||||||
To configure base resources, use `config :#{app_name}, base_resources: [...]`
|
|
||||||
"""}
|
|
||||||
|
|
||||||
{:ok, zipper} ->
|
|
||||||
{:ok, zipper}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def add_attribute(igniter, resource, attribute) do
|
def add_attribute(igniter, resource, attribute) do
|
||||||
igniter
|
Igniter.Code.Module.find_and_update_module!(igniter, resource, fn zipper ->
|
||||||
|> Igniter.update_elixir_file(Igniter.Code.Module.proper_location(resource), fn zipper ->
|
with {:ok, zipper} <-
|
||||||
case move_to_resource(zipper) do
|
Igniter.Code.Function.move_to_function_call_in_current_scope(
|
||||||
{:ok, zipper} ->
|
zipper,
|
||||||
with {:ok, zipper} <-
|
:attributes,
|
||||||
Igniter.Code.Function.move_to_function_call_in_current_scope(
|
1
|
||||||
zipper,
|
),
|
||||||
:attributes,
|
{:ok, zipper} <- Igniter.Code.Common.move_to_do_block(zipper) do
|
||||||
1
|
Igniter.Code.Common.add_code(zipper, attribute)
|
||||||
),
|
else
|
||||||
{:ok, zipper} <- Igniter.Code.Common.move_to_do_block(zipper) do
|
_ ->
|
||||||
Igniter.Code.Common.add_code(zipper, attribute)
|
attributes_with_attribute = """
|
||||||
else
|
attributes do
|
||||||
_ ->
|
#{attribute}
|
||||||
attributes_with_attribute = """
|
|
||||||
attributes do
|
|
||||||
#{attribute}
|
|
||||||
end
|
|
||||||
"""
|
|
||||||
|
|
||||||
Igniter.Code.Common.add_code(zipper, attributes_with_attribute)
|
|
||||||
end
|
end
|
||||||
|
"""
|
||||||
|
|
||||||
{:error, error} ->
|
Igniter.Code.Common.add_code(zipper, attributes_with_attribute)
|
||||||
{:error, error}
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_action(igniter, resource, action) do
|
def add_action(igniter, resource, action) do
|
||||||
igniter
|
Igniter.Code.Module.find_and_update_module!(igniter, resource, fn zipper ->
|
||||||
|> Igniter.update_elixir_file(Igniter.Code.Module.proper_location(resource), fn zipper ->
|
with {:ok, zipper} <-
|
||||||
case move_to_resource(zipper) do
|
Igniter.Code.Function.move_to_function_call_in_current_scope(zipper, :actions, 1),
|
||||||
{:ok, zipper} ->
|
{:ok, zipper} <- Igniter.Code.Common.move_to_do_block(zipper) do
|
||||||
with {:ok, zipper} <-
|
Igniter.Code.Common.add_code(zipper, action)
|
||||||
Igniter.Code.Function.move_to_function_call_in_current_scope(zipper, :actions, 1),
|
else
|
||||||
{:ok, zipper} <- Igniter.Code.Common.move_to_do_block(zipper) do
|
_ ->
|
||||||
Igniter.Code.Common.add_code(zipper, action)
|
actions_with_action = """
|
||||||
else
|
actions do
|
||||||
_ ->
|
#{action}
|
||||||
actions_with_action = """
|
|
||||||
actions do
|
|
||||||
#{action}
|
|
||||||
end
|
|
||||||
"""
|
|
||||||
|
|
||||||
Igniter.Code.Common.add_code(zipper, actions_with_action)
|
|
||||||
end
|
end
|
||||||
|
"""
|
||||||
|
|
||||||
{:error, error} ->
|
Igniter.Code.Common.add_code(zipper, actions_with_action)
|
||||||
{:error, error}
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
|
@ -197,7 +197,7 @@ defmodule Mix.Tasks.Ash.Gen.Resource do
|
||||||
defp extend(igniter, resource, extensions, argv) do
|
defp extend(igniter, resource, extensions, argv) do
|
||||||
Igniter.compose_task(
|
Igniter.compose_task(
|
||||||
igniter,
|
igniter,
|
||||||
"ash.extend",
|
"ash.patch.extend",
|
||||||
[inspect(resource), Enum.join(extensions, ",")] ++ argv
|
[inspect(resource), Enum.join(extensions, ",")] ++ argv
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
defmodule Mix.Tasks.Ash.Extend do
|
defmodule Mix.Tasks.Ash.Patch.Extend do
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Adds an extension or extensions to the domain/resource
|
Adds an extension or extensions to the domain/resource
|
||||||
|
|
||||||
For example: `mix ash.extend My.Domain.Resource Ash.Policy.Authorizer`
|
For example: `mix ash.patch.extend My.Domain.Resource Ash.Policy.Authorizer`
|
||||||
"""
|
"""
|
||||||
@shortdoc "Adds an extension or extensions to the given domain/resource"
|
@shortdoc "Adds an extension or extensions to the given domain/resource"
|
||||||
require Igniter.Code.Common
|
require Igniter.Code.Common
|
||||||
|
@ -22,61 +22,53 @@ defmodule Mix.Tasks.Ash.Extend do
|
||||||
|
|
||||||
Enum.reduce(opts[:subjects], igniter, fn subject, igniter ->
|
Enum.reduce(opts[:subjects], igniter, fn subject, igniter ->
|
||||||
subject = Igniter.Code.Module.parse(subject)
|
subject = Igniter.Code.Module.parse(subject)
|
||||||
path_to_thing = Igniter.Code.Module.proper_location(subject)
|
|
||||||
|
|
||||||
kind_of_thing = kind_of_thing(igniter, path_to_thing)
|
case Igniter.Code.Module.find_module(igniter, subject) do
|
||||||
|
{:error, igniter} ->
|
||||||
|
Igniter.add_issue(igniter, "Could not find module to extend: #{subject}")
|
||||||
|
|
||||||
# we currently require that the packages required are already installed
|
{:ok, {igniter, source, zipper}} ->
|
||||||
# probably pretty low hanging fruit to adjust that
|
case kind_of_thing(zipper) do
|
||||||
{igniter, patchers, _install} =
|
{:ok, kind_of_thing} ->
|
||||||
Enum.reduce(extensions, {igniter, [], []}, fn extension, {igniter, patchers, install} ->
|
{igniter, patchers, _install} =
|
||||||
case patcher(kind_of_thing, subject, extension, path_to_thing, argv) do
|
Enum.reduce(extensions, {igniter, [], []}, fn extension,
|
||||||
{fun, new_install} when is_function(fun, 1) ->
|
{igniter, patchers, install} ->
|
||||||
{igniter, [fun | patchers], install ++ new_install}
|
case patcher(kind_of_thing, subject, extension, source.path, argv) do
|
||||||
|
{fun, new_install} when is_function(fun, 1) ->
|
||||||
|
{igniter, [fun | patchers], install ++ new_install}
|
||||||
|
|
||||||
{:error, error} ->
|
{:error, error} ->
|
||||||
{Igniter.add_issue(igniter, error), patchers, install}
|
{Igniter.add_issue(igniter, error), patchers, install}
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
Enum.reduce(patchers, igniter, fn patcher, igniter ->
|
||||||
|
patcher.(igniter)
|
||||||
|
end)
|
||||||
|
|
||||||
|
:error ->
|
||||||
|
Igniter.add_issue(
|
||||||
|
igniter,
|
||||||
|
"Could not determine whether #{subject} is an `Ash.Resource` or an `Ash.Domain`."
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end)
|
end
|
||||||
|
|
||||||
# unless Enum.empty?(install) do
|
|
||||||
# Mix.Shell.info("""
|
|
||||||
# Before proceeding, we must install the following packages:
|
|
||||||
# """)
|
|
||||||
# Igniter.Install.install(install, argv)
|
|
||||||
# end
|
|
||||||
|
|
||||||
Enum.reduce(patchers, igniter, fn patcher, igniter ->
|
|
||||||
patcher.(igniter)
|
|
||||||
end)
|
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp kind_of_thing(igniter, path) do
|
defp kind_of_thing(zipper) do
|
||||||
igniter = Igniter.include_existing_elixir_file(igniter, path)
|
with {:ok, zipper} <- Igniter.Code.Common.move_to_do_block(zipper) do
|
||||||
|
with {_, :error} <-
|
||||||
zipper =
|
{Ash.Resource, Igniter.Code.Module.move_to_using(zipper, Ash.Resource)},
|
||||||
igniter.rewrite
|
{_, :error} <-
|
||||||
|> Rewrite.source!(path)
|
{Ash.Domain, Igniter.Code.Module.move_to_using(zipper, Ash.Domain)} do
|
||||||
|> Rewrite.Source.get(:quoted)
|
:error
|
||||||
|> Sourceror.Zipper.zip()
|
else
|
||||||
|
{kind_of_thing, {:ok, _}} ->
|
||||||
with {_, :error} <-
|
{:ok, kind_of_thing}
|
||||||
{Ash.Resource, Igniter.Code.Module.move_to_module_using(zipper, Ash.Resource)},
|
end
|
||||||
{_, :error} <- {Ash.Domain, Igniter.Code.Module.move_to_module_using(zipper, Ash.Domain)} do
|
|
||||||
raise ArgumentError, """
|
|
||||||
Could not determine whether the thing at #{path} is an `Ash.Resource` or an `Ash.Domain`.
|
|
||||||
|
|
||||||
It is a current limitation of `mix ash.extend` that it requires the module in question to be
|
|
||||||
defined at the "standard" path.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
`YourApp.Foo.Bar` -> `lib/your_app/foo/bar.ex`
|
|
||||||
"""
|
|
||||||
else
|
else
|
||||||
{kind_of_thing, {:ok, _}} ->
|
_ -> :error
|
||||||
kind_of_thing
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -101,7 +93,7 @@ defmodule Mix.Tasks.Ash.Extend do
|
||||||
{[], Ash.DataLayer.Mnesia}
|
{[], Ash.DataLayer.Mnesia}
|
||||||
|
|
||||||
{Ash.Resource, "embedded", _} ->
|
{Ash.Resource, "embedded", _} ->
|
||||||
{[], &embedded_patcher(&1, module, path)}
|
{[], &embedded_patcher(&1, module)}
|
||||||
|
|
||||||
{Ash.Resource, "json_api", _} ->
|
{Ash.Resource, "json_api", _} ->
|
||||||
{[:ash_json_api], AshJsonApi.Resource}
|
{[:ash_json_api], AshJsonApi.Resource}
|
||||||
|
@ -129,10 +121,10 @@ defmodule Mix.Tasks.Ash.Extend do
|
||||||
if function_exported?(extension, :install, 4) do
|
if function_exported?(extension, :install, 4) do
|
||||||
fn igniter ->
|
fn igniter ->
|
||||||
extension.install(igniter, module, kind_of_thing, path, argv)
|
extension.install(igniter, module, kind_of_thing, path, argv)
|
||||||
|> simple_add_extension(kind_of_thing, path, extension)
|
|> simple_add_extension(kind_of_thing, module, extension)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
&simple_add_extension(&1, kind_of_thing, path, extension)
|
&simple_add_extension(&1, kind_of_thing, module, extension)
|
||||||
end
|
end
|
||||||
|
|
||||||
{fun, install}
|
{fun, install}
|
||||||
|
@ -167,7 +159,7 @@ defmodule Mix.Tasks.Ash.Extend do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp embedded_patcher(igniter, resource, path) do
|
defp embedded_patcher(igniter, resource) do
|
||||||
domain =
|
domain =
|
||||||
resource
|
resource
|
||||||
|> Module.split()
|
|> Module.split()
|
||||||
|
@ -175,52 +167,50 @@ defmodule Mix.Tasks.Ash.Extend do
|
||||||
|> Module.concat()
|
|> Module.concat()
|
||||||
|
|
||||||
igniter
|
igniter
|
||||||
|> remove_domain_option(path)
|
|> remove_domain_option(resource)
|
||||||
|> Spark.Igniter.add_extension(path, Ash.Resource, :data_layer, :embedded, true)
|
|> Spark.Igniter.add_extension(resource, Ash.Resource, :data_layer, :embedded, true)
|
||||||
|> Ash.Domain.Igniter.remove_resource_reference(domain, resource)
|
|> Ash.Domain.Igniter.remove_resource_reference(domain, resource)
|
||||||
|> Spark.Igniter.update_dsl(
|
|> Spark.Igniter.update_dsl(
|
||||||
Ash.Resource,
|
resource,
|
||||||
path,
|
|
||||||
[{:section, :actions}, {:option, :defaults}],
|
[{:section, :actions}, {:option, :defaults}],
|
||||||
[:read, :destroy, create: [], update: []],
|
[:read, :destroy, create: :*, update: :*],
|
||||||
fn x -> x end
|
fn x -> {:ok, x} end
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp remove_domain_option(igniter, path) do
|
defp remove_domain_option(igniter, module) do
|
||||||
Igniter.update_elixir_file(igniter, path, fn zipper ->
|
Igniter.Code.Module.find_and_update_module!(igniter, module, fn zipper ->
|
||||||
with {:ok, zipper} <- Igniter.Code.Module.move_to_module_using(zipper, Ash.Resource),
|
with {:ok, zipper} <- Igniter.Code.Module.move_to_use(zipper, Ash.Resource),
|
||||||
{:ok, zipper} <- Igniter.Code.Module.move_to_use(zipper, Ash.Resource),
|
|
||||||
{:ok, zipper} <-
|
{:ok, zipper} <-
|
||||||
Igniter.Code.Function.update_nth_argument(zipper, 1, fn values_zipper ->
|
Igniter.Code.Function.update_nth_argument(zipper, 1, fn values_zipper ->
|
||||||
values_zipper
|
Igniter.Code.Keyword.remove_keyword_key(values_zipper, :domain)
|
||||||
|> Igniter.Code.Keyword.remove_keyword_key(:domain)
|
|
||||||
end) do
|
end) do
|
||||||
zipper
|
Igniter.Util.Debug.puts_code_at_node(zipper)
|
||||||
|
{:ok, zipper}
|
||||||
else
|
else
|
||||||
_ ->
|
_ ->
|
||||||
zipper
|
{:ok, zipper}
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp simple_add_extension(igniter, Ash.Resource, path, extension) do
|
defp simple_add_extension(igniter, Ash.Resource, module, extension) do
|
||||||
cond do
|
cond do
|
||||||
Spark.implements_behaviour?(extension, Ash.DataLayer) ->
|
Spark.implements_behaviour?(extension, Ash.DataLayer) ->
|
||||||
Spark.Igniter.add_extension(igniter, path, Ash.Resource, :data_layer, extension, true)
|
Spark.Igniter.add_extension(igniter, module, Ash.Resource, :data_layer, extension, true)
|
||||||
|
|
||||||
Spark.implements_behaviour?(extension, Ash.Notifier) ->
|
Spark.implements_behaviour?(extension, Ash.Notifier) ->
|
||||||
Spark.Igniter.add_extension(igniter, path, Ash.Resource, :notifiers, extension)
|
Spark.Igniter.add_extension(igniter, module, Ash.Resource, :notifiers, extension)
|
||||||
|
|
||||||
Spark.implements_behaviour?(extension, Ash.Authorizer) ->
|
Spark.implements_behaviour?(extension, Ash.Authorizer) ->
|
||||||
Spark.Igniter.add_extension(igniter, path, Ash.Resource, :authorizers, extension)
|
Spark.Igniter.add_extension(igniter, module, Ash.Resource, :authorizers, extension)
|
||||||
|
|
||||||
true ->
|
true ->
|
||||||
igniter
|
igniter
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp simple_add_extension(igniter, type, path, extension) do
|
defp simple_add_extension(igniter, type, module, extension) do
|
||||||
Spark.Igniter.add_extension(igniter, path, type, :extensions, extension)
|
Spark.Igniter.add_extension(igniter, module, type, :extensions, extension)
|
||||||
end
|
end
|
||||||
end
|
end
|
5
mix.exs
5
mix.exs
|
@ -335,7 +335,7 @@ defmodule Ash.MixProject do
|
||||||
defp deps do
|
defp deps do
|
||||||
[
|
[
|
||||||
# DSLs
|
# DSLs
|
||||||
{:spark, "~> 2.1 and >= 2.1.18"},
|
{:spark, "~> 2.1 and >= 2.2.7"},
|
||||||
# Ash resources are backed by ecto scheams
|
# Ash resources are backed by ecto scheams
|
||||||
{:ecto, "~> 3.7"},
|
{:ecto, "~> 3.7"},
|
||||||
# Used by the ETS data layer
|
# Used by the ETS data layer
|
||||||
|
@ -360,7 +360,8 @@ defmodule Ash.MixProject do
|
||||||
{:simple_sat, "~> 0.1 and >= 0.1.1", optional: true},
|
{:simple_sat, "~> 0.1 and >= 0.1.1", optional: true},
|
||||||
|
|
||||||
# Code Generators
|
# Code Generators
|
||||||
{:igniter, "~> 0.2.5"},
|
# {:igniter, "~> 0.2.5"},
|
||||||
|
{:igniter, path: "../igniter", override: true},
|
||||||
|
|
||||||
# Dev/Test dependencies
|
# Dev/Test dependencies
|
||||||
{:eflame, "~> 1.0", only: [:dev, :test]},
|
{:eflame, "~> 1.0", only: [:dev, :test]},
|
||||||
|
|
4
mix.lock
4
mix.lock
|
@ -1,7 +1,7 @@
|
||||||
%{
|
%{
|
||||||
"benchee": {:hex, :benchee, "1.3.1", "c786e6a76321121a44229dde3988fc772bca73ea75170a73fd5f4ddf1af95ccf", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "76224c58ea1d0391c8309a8ecbfe27d71062878f59bd41a390266bf4ac1cc56d"},
|
"benchee": {:hex, :benchee, "1.3.1", "c786e6a76321121a44229dde3988fc772bca73ea75170a73fd5f4ddf1af95ccf", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "76224c58ea1d0391c8309a8ecbfe27d71062878f59bd41a390266bf4ac1cc56d"},
|
||||||
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
|
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
|
||||||
"castore": {:hex, :castore, "1.0.7", "b651241514e5f6956028147fe6637f7ac13802537e895a724f90bf3e36ddd1dd", [:mix], [], "hexpm", "da7785a4b0d2a021cd1292a60875a784b6caef71e76bf4917bdee1f390455cf5"},
|
"castore": {:hex, :castore, "1.0.8", "dedcf20ea746694647f883590b82d9e96014057aff1d44d03ec90f36a5c0dc6e", [:mix], [], "hexpm", "0b2b66d2ee742cb1d9cb8c8be3b43c3a70ee8651f37b75a8b982e036752983f1"},
|
||||||
"comparable": {:hex, :comparable, "1.0.0", "bb669e91cedd14ae9937053e5bcbc3c52bb2f22422611f43b6e38367d94a495f", [:mix], [{:typable, "~> 0.1", [hex: :typable, repo: "hexpm", optional: false]}], "hexpm", "277c11eeb1cd726e7cd41c6c199e7e52fa16ee6830b45ad4cdc62e51f62eb60c"},
|
"comparable": {:hex, :comparable, "1.0.0", "bb669e91cedd14ae9937053e5bcbc3c52bb2f22422611f43b6e38367d94a495f", [:mix], [{:typable, "~> 0.1", [hex: :typable, repo: "hexpm", optional: false]}], "hexpm", "277c11eeb1cd726e7cd41c6c199e7e52fa16ee6830b45ad4cdc62e51f62eb60c"},
|
||||||
"credo": {:hex, :credo, "1.7.7", "771445037228f763f9b2afd612b6aa2fd8e28432a95dbbc60d8e03ce71ba4446", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8bc87496c9aaacdc3f90f01b7b0582467b69b4bd2441fe8aae3109d843cc2f2e"},
|
"credo": {:hex, :credo, "1.7.7", "771445037228f763f9b2afd612b6aa2fd8e28432a95dbbc60d8e03ce71ba4446", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8bc87496c9aaacdc3f90f01b7b0582467b69b4bd2441fe8aae3109d843cc2f2e"},
|
||||||
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
|
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
"simple_sat": {:hex, :simple_sat, "0.1.3", "f650fc3c184a5fe741868b5ac56dc77fdbb428468f6dbf1978e14d0334497578", [:mix], [], "hexpm", "a54305066a356b7194dc81db2a89232bacdc0b3edaef68ed9aba28dcbc34887b"},
|
"simple_sat": {:hex, :simple_sat, "0.1.3", "f650fc3c184a5fe741868b5ac56dc77fdbb428468f6dbf1978e14d0334497578", [:mix], [], "hexpm", "a54305066a356b7194dc81db2a89232bacdc0b3edaef68ed9aba28dcbc34887b"},
|
||||||
"sobelow": {:hex, :sobelow, "0.13.0", "218afe9075904793f5c64b8837cc356e493d88fddde126a463839351870b8d1e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "cd6e9026b85fc35d7529da14f95e85a078d9dd1907a9097b3ba6ac7ebbe34a0d"},
|
"sobelow": {:hex, :sobelow, "0.13.0", "218afe9075904793f5c64b8837cc356e493d88fddde126a463839351870b8d1e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "cd6e9026b85fc35d7529da14f95e85a078d9dd1907a9097b3ba6ac7ebbe34a0d"},
|
||||||
"sourceror": {:hex, :sourceror, "1.4.0", "be87319b1579191e25464005d465713079b3fd7124a3938a1e6cf4def39735a9", [:mix], [], "hexpm", "16751ca55e3895f2228938b703ad399b0b27acfe288eff6c0e629ed3e6ec0358"},
|
"sourceror": {:hex, :sourceror, "1.4.0", "be87319b1579191e25464005d465713079b3fd7124a3938a1e6cf4def39735a9", [:mix], [], "hexpm", "16751ca55e3895f2228938b703ad399b0b27acfe288eff6c0e629ed3e6ec0358"},
|
||||||
"spark": {:hex, :spark, "2.2.6", "4f160462f45c0be2bccdc4700e7ffc6b2e97b4e38f57eed2349bc9dab4aaa66c", [:mix], [{:igniter, "~> 0.2", [hex: :igniter, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.2", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "1e0e012978be808232a502a116d4b99b5059ab3760453438b155ac048f82ce20"},
|
"spark": {:hex, :spark, "2.2.7", "b9f430ec0e05e3e719dc9a3e6b466a1e8122d361ddf495b191e84db41999a461", [:mix], [{:igniter, "~> 0.2.6", [hex: :igniter, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.2", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "50d63a6d58f6fdf7ed67e38e18ba1380a981398c0b4882b580834e6689f0a0f5"},
|
||||||
"spitfire": {:hex, :spitfire, "0.1.3", "7ea0f544005dfbe48e615ed90250c9a271bfe126914012023fd5e4b6b82b7ec7", [:mix], [], "hexpm", "d53b5107bcff526a05c5bb54c95e77b36834550affd5830c9f58760e8c543657"},
|
"spitfire": {:hex, :spitfire, "0.1.3", "7ea0f544005dfbe48e615ed90250c9a271bfe126914012023fd5e4b6b82b7ec7", [:mix], [], "hexpm", "d53b5107bcff526a05c5bb54c95e77b36834550affd5830c9f58760e8c543657"},
|
||||||
"splode": {:hex, :splode, "0.2.4", "71046334c39605095ca4bed5d008372e56454060997da14f9868534c17b84b53", [:mix], [], "hexpm", "ca3b95f0d8d4b482b5357954fec857abd0fa3ea509d623334c1328e7382044c2"},
|
"splode": {:hex, :splode, "0.2.4", "71046334c39605095ca4bed5d008372e56454060997da14f9868534c17b84b53", [:mix], [], "hexpm", "ca3b95f0d8d4b482b5357954fec857abd0fa3ea509d623334c1328e7382044c2"},
|
||||||
"statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"},
|
"statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"},
|
||||||
|
|
Loading…
Reference in a new issue