Commit graph

2513 commits

Author SHA1 Message Date
Zach Daniel
41c951d2e5 chore: fix missing clause andhydrate atomic refs 2024-04-25 23:46:11 -04:00
Zach Daniel
ad076735ae chore: fix batch size detection while streaming 2024-04-25 22:56:41 -04:00
Zach Daniel
c8e93877ea improvement: support atomics, update_query, destroy_query in ETS data layer 2024-04-25 22:18:54 -04:00
Barnabas Jovanovics
00ee13143b
fix: handle resource being passed as query code_interface.ex (#1057)
* handle resource being passed as query code_interface.ex

This bit me today because I had code  like this 

```elixir
                Resource
                |> filter_board_codes(board_codes)
                |> filter_min_price(min_price)
                |> filter_max_price(max_price)
                |> filter_refundable_only(refundable_only)
```

and all the `filter_*` functions looked like this

```elixir
def filter_something(query, nil), do: query

def filter_something(query, something) do
  query
  |> Ash.Query.filter(....)
end
```

* Update lib/ash/code_interface.ex

* add another case

---------

Co-authored-by: Zach Daniel <zach@zachdaniel.dev>
2024-04-25 10:37:44 -04:00
Barnabas Jovanovics
02c10c9216
fix: do not use Enum.map_join (#1058)
values are only a flat list of values, and map_join would need a function as the third argument if you specify a `joiner`
2024-04-25 07:53:52 -04:00
Pierre Le Gall
65e26cbc16
feat: Ash.create and Ash.update oneliner (#1055)
* feat: Ash.create and Ash.update oneliner

See #1015.

* fix: opts dispatch for create and update

* chore: shorten arguments by args
2024-04-24 15:28:26 -04:00
Zach Daniel
f146258159 improvement: remove after_atomic and instead support after_batch
supporting `after_batch` allows things like `archive_related` in `ash_archival`
to dispatch batches of cascading archives
2024-04-24 11:56:36 -04:00
Jechol Lee
56b10be097
fix: use Splode.ErrorClass for error classes (#1054) 2024-04-24 06:14:55 -04:00
Jechol Lee
44c38277e5
improvement: Add attributes_present, attributes_absent. (#1046)
* Add attribute_present, attribute_absent.

* Refactor

* plural name: attributes_present/absent

* Fix conflict
2024-04-23 22:01:35 -04:00
Zach Daniel
dad4d5effc fix: ensure that errors for nested forms are transformed 2024-04-23 14:03:40 -04:00
Jechol Lee
184dfb3642
fix: Set tenant for managed relationship changeset (#1044) 2024-04-23 10:40:19 -04:00
Zach Daniel
5ff767a1aa fix: don't carry over all changes during atomic upgrade
Doing this was causing us to carry over changes that were produced
as part of running the changes in the original changeset build

fixes #1042
2024-04-22 19:01:05 -04:00
Frank Dugan III
35961a793d
feat: leverage resource domain for eager/pre checking (#1040)
closes #1022
2024-04-22 17:15:27 -04:00
Zach Daniel
7e86b971a4 chore: fix migrate task file name 2024-04-22 12:27:43 -04:00
Zach Daniel
34470d4494 improvement: make extension discovery faster 2024-04-21 11:16:33 -04:00
Zach Daniel
8317e6fca9 fix: properly pin Enum.join in atomic for enum types
fixes #1033
2024-04-20 15:50:11 +01:00
Zach Daniel
d49f991021 fix: ensure actor is set when building queries in filter 2024-04-20 15:46:49 +01:00
Zach Daniel
c7991ec8a7 fix: don't eager evaluate type because it breaks data layers 2024-04-19 16:09:42 +01:00
Rebecca Le
7c75e5c102
refactor: Move opt schema definitions for built-in changes and validations to their specific modules (#1036)
* refactor: Move Spark opts definitions for built-in changes to the relevant change modules

This allows the change modules to be read and grokked standalone, without
needing to refer back to the `Builtins` module just for the opts

* refactor: Move Spark opts definitions for built-in validations to the relevant validation modules

This allows the change modules to be read and grokked standalone, without
needing to refer back to the `Builtins` module just for the opts
2024-04-19 15:43:35 +01:00
Zach Daniel
94f319a5f4 chore: invert code interface for simpler checking 2024-04-19 14:19:49 +01:00
Zach Daniel
89f15103c8 fix: ensure __union_tag__ is set when calling sub-union types 2024-04-19 13:41:05 +01:00
Zach Daniel
a2ac66093c fix: handle more &Mod.fun/n variations in fragments 2024-04-17 16:12:55 +01:00
Zach Daniel
28136ec43f chore: format 2024-04-17 15:08:29 +01:00
Zach Daniel
45b66f539b chore: remove atomic
fix: ensure validations are considered atomic
2024-04-17 15:07:15 +01:00
Zach Daniel
8e1fd3b833 improvement: better eager expression parsing and atomic error anticipation 2024-04-17 02:34:33 +01:00
Zach Daniel
ccb06b1628 fix: ensure tenant and actor are properly set in Ash.can?
fixes #1027
2024-04-17 00:14:31 +01:00
Zach Daniel
f960e69437 chore: remove IO.inspect 2024-04-16 21:49:59 +01:00
Zach Daniel
70cd40065b fix: ensure changeset filter is parsed for templates 2024-04-16 21:03:25 +01:00
Zach Daniel
65675ef337 fix: properly parse additional changeset expression 2024-04-16 20:45:43 +01:00
Zach Daniel
371c2d1515 fix: properly parse changeset template for filters 2024-04-16 20:41:19 +01:00
Zach Daniel
3044339396 fix: properly parse changeset filter 2024-04-16 20:35:30 +01:00
Zach Daniel
4b50550149 chore: fix typo 2024-04-16 20:31:57 +01:00
Zach Daniel
3b8a15fd34 fix: ensure changeset filters are applied on bulk destroy/update 2024-04-16 20:27:42 +01:00
Zach Daniel
a147062523 improvement: add Ash.read_first 2024-04-16 18:19:20 +01:00
Zach Daniel
77ee3686eb improvement: helpful output in mix tasks helper 2024-04-16 17:37:15 +01:00
Riccardo Binetti
6d209e8836
feat: configurable multitenancy on read actions (#1030)
Allow making specific read actions able to optionally or totally bypass
multitenancy
2024-04-16 12:09:13 +01:00
Dmitry Maganov
8bcbfc5b17
fix: support all calculate opts in code interface methods (#1026) 2024-04-15 22:34:33 +01:00
Riccardo Binetti
11de5dd64f
improvement: use explicit read actions when reading relationships (#1029)
While filter, sorts etc are already copied from the read action into the query,
using the right action is relevant, for example, when it's checked against in
policies, or in preparations that check the action name from the query
2024-04-15 22:33:56 +01:00
Riccardo Binetti
3338b343ac
improvement: use cached to_tenant when setting tenant attribute (#1021) 2024-04-14 11:53:09 -04:00
Zach Daniel
3519a85cee fix: ensure to_tenant is copied to aggregate query 2024-04-13 20:47:01 -04:00
Zach Daniel
bc69f904e2 improvement: support require_reference?: false on code interfaces
improvement: support `:filter` option on bulk create/destroy
2024-04-13 17:21:43 -04:00
Riccardo Binetti
9c74e52bd8
improvement: make match/1 overridable in Ash.Type.Enum (#1020)
Allow handling additional inputs to map them to one of the enum values
2024-04-13 14:07:23 -04:00
Zach Daniel
0e2b392413 fix: compilation time improvements (hopefully) 2024-04-12 14:14:14 -04:00
Lukas Ender
10e3722446
fix: code_interface actions accept @context (#1016) 2024-04-12 10:26:46 -04:00
Zach Daniel
8ea51ec506 fix: ensure tenant is set to opts in action helpers 2024-04-11 23:33:22 -04:00
Zach Daniel
47dde10329 improvement: adding domain to embedded resource is an error 2024-04-11 22:28:47 -04:00
Zach Daniel
0416ce1d0d fix: ensure more consistent use of Ash.Tenant.to_tenant/2 2024-04-11 11:41:29 -04:00
Zach Daniel
dc1205a48f fix: ensure that strict loads are applied at all nesting levels 2024-04-11 10:16:24 -04:00
Zach Daniel
2474fbed44 improvement: raise more sensible error on unsupported pagination 2024-04-11 09:38:49 -04:00
Zach Daniel
752320c139 fix: properly load depended on fields for relationships even if public?: false 2024-04-11 08:04:20 -04:00
Jechol Lee
0b79515f69
fix: fix date_add query function (#1010) 2024-04-11 07:42:11 -04:00
Zach Daniel
e1a0b48172 fix: pass name through to underlying tasks 2024-04-10 19:02:42 -04:00
Zach Daniel
829f6d6e49 improvement: support builder options in read code interfaces 2024-04-10 15:57:30 -04:00
Zach Daniel
268b335946 chore: fix return type matching for generic actions 2024-04-10 13:58:22 -04:00
Zach Daniel
bae263ca12 improvement: support omitting generic action return types 2024-04-10 13:46:44 -04:00
Riccardo Binetti
9f2b4ab8ba
improvement: call ToTenant protocol when setting tenant in actions (#1004) 2024-04-10 09:35:39 -04:00
Rebecca Le
3fce34cda6
fix: Validate all conditions in a numericality validation instead of only the last (#997)
The previous `reduce` loop did not break on the first failure and
return the error, it returned the last iteration of the loop

Some more work may need to be done on the atomic side of the validation,
I'm not familiar with how they work!
2024-04-10 09:25:42 -04:00
Zach Daniel
f504ab6a67 chore: fix domain behaviour impl 2024-04-10 07:55:37 -04:00
Riccardo Binetti
8eb98bc663
fix: swap the parameters in Ash.ToTenant.to_tenant/2 (#1003)
This is technically a breaking change, but without this the protocol would never
work as intended since the funtion gets dispatched based on the type of the
first parameter and the resource parameter will always be an atom (precisely, an
alias) so the implementation for Atom will always be called
2024-04-10 06:58:53 -04:00
Zach Daniel
2f28bd9ee7 chore: better use Ash.Resource options
chore: atom -> module
2024-04-09 22:55:26 -04:00
Zach Daniel
46ed97dd10 improvement: add ash.rollback mix task
chore: fix some naming/mix task steps
2024-04-09 20:24:08 -04:00
Zach Daniel
4f26773fe0 improvement: add ash.rollback task 2024-04-09 14:54:44 -04:00
139058d4c0 fix(Ash.Reactor): crash when calling an ash reactor for the first time.
Thanks to @carlgleisner for the [detailed reproduction](https://github.com/carlgleisner/reactor_notification_worker_issue).

The problem was caused by an attempt to not have nested reactors indepdently publish their notifications separate to the parents but contained a logic flaw which caused the agent to not start, but only the first time you try and use a given reactor.

The fix involves _always_ starting a notification agent for each reactor, but nesting them.  When a reactor completes it either publishes it's notifications to the parent reactor or to ash if there are no parent reactors.
2024-04-10 06:19:38 +12:00
Zach Daniel
1854880def improvement: add config :ash, require_atomic_by_default?, false, for upgrading 2024-04-09 13:45:19 -04:00
Zach Daniel
5c70935f2f improvement: support skip_unknown_inputs in Ash.bulk_create
closes: #998
2024-04-09 13:24:03 -04:00
Zach Daniel
25c1063e45 fix: add context argument to before_action and after_action for read actions
closes #999
2024-04-09 13:21:06 -04:00
Andreas Donig
95ecc5155c
fix: add base case for Ash.Resource.Info.public_relationship/2 (#1000)
test: Add a simple test for Ash.Resource.Info.public_relationship/2

---------

Co-authored-by: Andreas Donig <git@innwiese.de>
2024-04-09 13:17:03 -04:00
321f43bd05 feat(Ash.Reactor): Add new change step type which can be used to modify changesets. 2024-04-09 09:03:04 +12:00
2973c0db94 improvement(Ash.Reactor): Allow create to be provided an initial value.
The initial value can be either a resource or a changeset.
2024-04-09 09:03:04 +12:00
c67295de6e
improvement: Allow Reactor modules to be run directly from generic actions. (#993)
- Extends the generic action runner to detect when the `run` module is a Reactor and automatically executes it in the correct way.
- Adds a verifier that detects said actions and ensures that action arguments are present for all expected inputs.
2024-04-08 16:48:58 -04:00
Zach Daniel
4cbf2d3e14 docs: more restructuring, reviewing of guides 2024-04-08 13:39:45 -04:00
Zach Daniel
5e1df439d7 chore: format 2024-04-08 12:15:09 -04:00
Zach Daniel
e91da15564 docs: moved around some documentation
docs: added changes guide
docs: moved around validations guide, removed extra one
2024-04-08 12:05:36 -04:00
Zach Daniel
05dd917af0 docs: update explanation of sort parser
fix: honor new calcualtion sort format in sort parser
2024-04-08 09:54:05 -04:00
Zach Daniel
c31fbc9c3e fix: don't raise error on keyword input to create interface 2024-04-08 08:41:33 -04:00
Zach Daniel
6d3b00f77f fix: action is an atom in erroor case for bulk update 2024-04-08 08:33:14 -04:00
Zach Daniel
d153b40dea docs: consolidate guides into relationships.md
improvement: add `Ash.Query.apply_to/3`
2024-04-07 15:31:26 -04:00
Zach Daniel
773e9cea91 docs: move identities guide 2024-04-07 14:50:18 -04:00
Zach Daniel
d2612a9ed8 docs: doc fixes, move code interface docs 2024-04-07 12:33:59 -04:00
Zach Daniel
49958975a1 chore: remove dedicated constraints guide, put it in Ash.Type 2024-04-07 10:52:18 -04:00
Zach Daniel
2226b00ca5 docs: more condensation/relocation of docs 2024-04-07 10:11:19 -04:00
Zach Daniel
957ac1880e docs: better docs on atomics & upserts 2024-04-07 09:36:09 -04:00
Zach Daniel
951eaba973 chore: fix build/test 2024-04-07 08:05:23 -04:00
Zach Daniel
d2ea5bb108 docs: rewrite action docs
improvement: synthesize attributes from atomics for better notifications
2024-04-07 08:02:10 -04:00
Dmitry Maganov
bc00873cfd
fix: undo adding primary key argument for methods with get? (#989) 2024-04-07 06:41:03 -04:00
Dmitry Maganov
5c600c1f42
fix: remove internal? and stacktraces? from common opts (#988) 2024-04-07 06:00:32 -04:00
Zach Daniel
ea463402a2 fix: pattern match error in managed relationships
closes #986
2024-04-07 05:17:05 -04:00
Rebecca Le
98d7ee759f
docs: Fix formatting of examples for Ash.Resource.Preparation.Builtins (#987)
* docs: Fix other cases of unformatted code examples
2024-04-07 05:03:21 -04:00
Riccardo Binetti
7d75e64d86
feat: add update_change function and builtin change (#976) 2024-04-07 05:02:38 -04:00
Zach Daniel
8249b6cabd fix: include options for generic action code interfaces 2024-04-07 05:00:50 -04:00
Zach Daniel
26a6efe10d fix: logic errors around arguments/changing attributes in validations 2024-04-06 18:40:40 -04:00
Riccardo Binetti
355bd73bf9
improvement: make Ash.Resource.Validation.Match partially atomic (#979)
* fix: handle partially atomic validations in run_action_changes

* improvement: make Ash.Resource.Validation.Match partially atomic
2024-04-06 17:50:54 -04:00
Zach Daniel
f9eff8810f docs: refactor security guides 2024-04-06 17:40:05 -04:00
Zach Daniel
a7b69303ca chore: properly manage sat solver dependencies 2024-04-05 15:11:09 -04:00
Zach Daniel
8927460f77 fix: more improvements to resource matching in can? 2024-04-05 15:06:44 -04:00
Jefferson Queiroz Venerando
51db6c5b1a
chore: fix typo in sort error message (#984) 2024-04-05 12:38:56 -04:00
Zach Daniel
b0ff379d00 docs: work on organizing docs
fix: detect more cases for domain extraction from resources
2024-04-05 12:24:12 -04:00
Zach Daniel
6a486a4a9a fix: properly dispatch managed relationships to proper domain 2024-04-05 09:57:52 -04:00
Zach Daniel
4e329cde31 fix: check target resource's domain before assuming it is the same as current domain 2024-04-05 06:37:20 -04:00
Riccardo Binetti
38c1ca808d
fix: return {:error, query} for invalid query in Aggregate.run/4 (#982)
Avoid making callers like Ash.aggregate crash with a WithClause error
since they expect an :ok/:error tuple
2024-04-05 06:36:05 -04:00