Commit graph

285 commits

Author SHA1 Message Date
Zach Daniel
dbe2e9a818 fix: flaky test issue 2022-04-07 01:52:59 -04:00
Joe Cole
6dcbe26abe
fix: Enforce unique action names (#308)
Co-authored-by: Joe Cole <{ID}+{username}@users.noreply.github.com>
2022-04-07 01:14:07 -04:00
Zach Daniel
be9e564d57 chore: fix identity docs/tests 2022-04-06 12:22:34 -04:00
Zach Daniel
4fc53baf5f improvement: add eager validate identities
improvement: percolate `nil` values in operators in ash expresion language (like SQL)
chore: more docs work
2022-04-06 12:00:32 -04:00
Zach Daniel
7c13322aa4 improvement: add return_destroyed? option 2022-04-05 12:42:50 -04:00
Zach Daniel
84ed398980 chore: docs/ci work 2022-04-05 03:59:34 -04:00
Zach Daniel
6c523b9752 continue working on docs 2022-04-04 14:55:05 -04:00
Zach Daniel
022708c6b5 improvement: add api option to relationships
improvement: make default actions and primary actions far more explicit

this begins the official 2.0.0 work
2022-04-04 01:48:37 -04:00
Zach Daniel
8aa71c1e2c fix: fix paths for load in flow
improvement: better error messages on unknown
2022-04-02 02:39:55 -04:00
tlietz
da5306c773
improve: Provide api read error message on no data set (#302) 2022-03-29 21:07:44 -04:00
tlietz
12cfe0d848
improvement: validates attributes and relationships have unique names (#300) 2022-03-27 20:00:19 -04:00
Zach Daniel
f9734af48c chore: get final tests passing 2022-03-24 23:36:43 -04:00
Zach Daniel
7ba9715f27 fix: fix hanging issue when adding engine requests 2022-03-20 01:08:39 -04:00
Zach Daniel
96c45e1a58 improvement: add transaction steps to flow
fix: don't require `writable?: false` attributes
2022-03-19 23:51:45 -04:00
Zach Daniel
a53b61ddf4 feat: add Ash.Flow
feat: support recursive DSL entities.
improvement: unimport to avoid name collisions in nested DSLs
2022-03-15 17:42:29 -04:00
Zach Daniel
ba1b39536e feat: manual relationships
fix: make the formatter safer, again
2022-02-20 22:46:39 -05:00
Zach Daniel
079b941e90 chore: release version v1.50.18 2022-02-07 15:39:12 -05:00
Zach Daniel
2986838a19 fix: support new versions of ecto's struct fields
fix: fixes for elixir_sense plugin
2021-12-19 00:12:10 -05:00
Zach Daniel
4448a4eeb7 improvement: catch more equivalencey cases around is_nil in sat solver 2021-12-06 16:50:33 -05:00
Zach Daniel
83b2d13910 improvement: track defaults being set 2021-11-24 19:09:39 -05:00
Zach Daniel
2dbdc06536 improvement: add Ash.Query.equivalent_to/2
docs: small documentation tweaks
2021-11-16 22:46:14 -05:00
Zach Daniel
b6094b1e9c improvement: add subset_of? and superset_of? query macros 2021-11-16 19:17:57 -05:00
Michael St Clair
f9b7223d91
fix: use Date.add when using LessThanOrEqual with date value (#281) 2021-11-13 14:11:32 -05:00
Zach Daniel
7cb4401d8e improvement: support do/else blocks in if
improvement: support `cond`
2021-11-13 13:48:25 -05:00
Zach Daniel
034ed97efe fix: simplify and improve allow_nil checking 2021-11-09 03:26:50 -05:00
Zach Daniel
f16ffb3782 improvement!: breaking!: explicitly setting a value to nil on create no longer falls back to the default value
This behavior is more expected than silently switching back to the default, but it does have the potential
to cause issues for those relying on the old behavior. To get the *old* behavior, you'd want to add a change
that does something like `if is_nil(Ash.Changeset.get_attribute(changeset, :attribute)) do` to check if
it should set the value, and then uses `Ash.Changeset.change_attribute/2` to make the change
2021-11-09 00:39:19 -05:00
Zach Daniel
05d8eb1741 improvement: add allow_async? to calculations, default to false
improvement: add elixir evaluation step to expression calculations
2021-10-25 17:53:51 -04:00
Zach Daniel
5e6442c3e4 improvement: add get_by and get_by_identity to code interface
improvement: compile time validations for managed relationships
2021-10-19 21:39:30 -04:00
Zach Daniel
1f2f9802a3 fix: fix code interface on resources
improvement: breaking change! api level code interface *removed*, contact me on discord if you want a way to avoid changing to resource-based interface, but otherwise
switch to the resource based one by specifying `define_for YourApp.YourApi` in the `code_interface` block of each resource.
improvement: use proper equality checking in places where we were using simple elixir equality checking
2021-10-13 18:42:42 -04:00
Zach Daniel
922c87ea85 improvement: add resource registry validation
fix: move related field validations to resource
fix: remove join_attributes, which didn't do anything anyway
2021-10-11 15:14:33 -04:00
Zach Daniel
ff756b72a7 improvement: deprecation!
A deprecation warning will be shown at compile time to illustrate
a change from listing all of your resources in an api to listing
them in a registry and connecting that registry to the api
2021-10-07 02:41:02 -04:00
Zach Daniel
87627993b8 improvement: breaking change! don't define code interface by default
In an effort to improve compile times in general, and remove unnecessary
compile time dependencies, the code interface is not defined by default.
It is also now possible to define the code interface directly in the resource module,
via

```elixir
code_interface do
  define_for ApiModule
end
```

If you need to reenable the code interface, simply add the following to your api module:
```elixir
resources do
  define_interfaces? true
  ...
end
```
2021-10-06 17:43:22 -04:00
Michael St Clair
8af32a0053
chore: Bring over changes committed to master branch (#271)
Co-authored-by: kernel-io <git@omnium.co>
Co-authored-by: Zach Daniel <zach@zachdaniel.dev>
Co-authored-by: kernel-io <kernel-io@users.noreply.github.com>
2021-10-01 23:27:35 -04:00
Zach Daniel
05b279a029 improvement: use paramaterized types under the hood
improvement!: update ecto version
fix: pass constraints to sub-fields loaded in embeddable resources
2021-09-13 11:46:11 -04:00
Zach Daniel
650b256b2a test: fix tests w/ new get change 2021-09-09 02:18:26 -04:00
Zach Daniel
46f17dcc51 test: test manage_relationship on update 2021-08-05 00:46:53 -04:00
Zach Daniel
1c83f96d27 fix: allow before_action to manage belongs_to relationships 2021-08-04 11:35:32 -04:00
Darren Black
f3b622744d
chore: Failing test for updating a relation in a change (#258) 2021-08-04 10:53:55 -04:00
Zach Daniel
8e11a63e83 fix: load belongs to relationships before managing them 2021-08-03 03:26:01 -04:00
Zach Daniel
288cf49153 fix: honor on_missing: behavior for belongs_to relationships 2021-07-31 16:07:51 -04:00
Zach Daniel
13e06524a7 improvement: add belongs_to attributes *after* the others 2021-07-26 20:55:44 -04:00
Zach Daniel
4ea0e62a79 chore: ensure compiled in a different place
chore: credo
2021-07-22 16:26:02 -04:00
Frank Dugan III
8ba1a9a4c8
feat(Ash.Resource.Info): add &public_field/2 helper (#254)
feat(Ash.Resource.Info): add &sortable?/3 helper
2021-07-22 16:23:54 -04:00
Zach Daniel
759ef25577 fix: rename conflicting test name 2021-07-22 13:36:59 -04:00
Zach Daniel
9477f0e82a improvement: add {:arg, :name} input for set_attribute 2021-06-25 13:51:17 -04:00
Zach Daniel
d45a9dbbfa improvement: support calculation sorts 2021-06-05 18:11:09 -04:00
Zach Daniel
d247004610 feat: expression based calculations for filterable/sortable calculations
fix: aggregate authorization issues
improvement: tons of improvements across the board
2021-06-04 01:40:11 -04:00
Zach Daniel
231eeafd30 feat: expression calculations for sorting/filtering
improvement: small improvements/fixes across the board
2021-06-04 01:37:11 -04:00
kernel-io
35af220d9d
feat: add compare validator (#242)
Co-authored-by: David Culina <git@omnium.co>
2021-06-01 13:32:22 -04:00
Zach Daniel
d9debc07f1 fix: properly process managed belongs to relationships 2021-05-28 03:12:14 -04:00
Zach Daniel
4662c23f68 improvement: calculation.select/2 + select calculation option 2021-05-20 16:42:26 -04:00
Zach Daniel
dd40b24bf9 improvement: transactions for reads, notifications from read callbacks 2021-05-14 11:25:42 -04:00
Zach Daniel
69afdfce25 improvement: utility manage_relationship_source context 2021-05-10 18:03:36 -04:00
Frank Dugan III
a796e0d308
refactor: remove references to "side loading" (#236) 2021-05-09 17:24:48 -04:00
Zach Daniel
097447bf38 fix: run action changes on destroy
test: test manual actions
fix: pattern match manage_relationship notifications fix
2021-05-09 16:56:44 -04:00
Zach Daniel
1412052ff6 improvement: fix data-based side loads 2021-05-07 11:57:59 -04:00
Zach Daniel
f8604717bd fix: limit 1 on to one side load queries 2021-05-07 01:07:01 -04:00
Zach Daniel
46fb08f085 improvement: support sorted relationships 2021-05-07 00:28:51 -04:00
Zach Daniel
593b111069 improvement: add read_action option
feat: rework lateral joins for many to many performance boost
2021-05-03 16:21:29 -04:00
Zach Daniel
3de71bc7f1 chore: fix test + compile 2021-04-28 17:43:02 -04:00
Zach Daniel
9da95e6d75 improvement: support relationship filters 2021-04-28 17:39:30 -04:00
Zach Daniel
9df3803492 fix: don't include NotLoaded in manage_relationship 2021-04-25 18:35:19 -04:00
Zach Daniel
53ceb5b753 fix: compile time fixes
improvement: add `require_attributes` to create/update/destroy
2021-04-23 11:41:13 -04:00
Zach Daniel
143557e55c chore: fix lint 2021-04-22 12:03:18 -04:00
Zach Daniel
dd82fcc53b improvement: add first class support for enum types 2021-04-21 13:32:25 -04:00
Jason Axelson
f6fa5a98dd
improvement: Add detailed parameter checking for Api read functions (#229) 2021-04-18 19:45:38 -04:00
Jason Axelson
a4262965ea
chore: Enable Credo's Readability.StrictModuleLayout (#228)
Enforce layout of module parts
2021-04-18 19:41:49 -04:00
Zach Daniel
a6b880ce86 fix: handle no key provided to NotFound
chore: add tests for `get!`
2021-04-14 14:18:05 -04:00
Zach Daniel
e353ea49c3 fix: allow api.load/2 to load calculations
improvement: add `allow_nil_input` to create actions for api layers
improvement: add `load/1` builtin change
feat: change `get?: true` interface functions to raise on `nil`
2021-04-13 15:49:42 -04:00
Michael St Clair
6805d431ac
improvement: add sum aggregate (#221) 2021-04-04 16:00:53 -04:00
Zach Daniel
d6ee71ce53 feat: support Ash.Query.distinct/2
feat: add `build/2` query preparation
fix: manage_relationships *before* after_action callbacks
2021-03-31 17:13:20 -04:00
Zach Daniel
29b2c821fe fix: don't overwrite managed belongs_to relationships 2021-03-29 14:48:42 -04:00
Zach Daniel
11d658d077 fix: fix required relationships and add test 2021-03-28 13:44:21 -04:00
Zach Daniel
2f9fafcbc7 feat: add manage relationship types
improvement: don't accept relationships on actions anymore

improvement: require arguments

This probably broke a lot of people's setups, but it was a
necessary change. Better to get this stuff out while we're
still beta
2021-03-25 11:33:32 -04:00
Zach Daniel
4e8bd5bfbc fix: exception on invalid query arguments 2021-03-21 14:19:45 -04:00
Zach Daniel
b98650aeb7 fix: avoid exception in Changeset.new/2 for bad attribute 2021-03-20 17:16:57 -04:00
Zach Daniel
a1c5f1d06f fix: validate required attributes *after* before_action hooks 2021-03-16 23:09:36 -04:00
Zach Daniel
f6026c6895 fix: allow_nil?: false + default interaction 2021-03-14 23:06:18 -04:00
Zach Daniel
db47a15cf7 fix: properly validate allow_nil?: false on update
fix: properly validate `allow_nil?: false` private attributes
2021-03-13 09:25:13 -05:00
Zach Daniel
72b5a57a25 feat: functional interface on the Api module
feat: resource aliases
improvement: require completely unique action names
2021-03-08 00:59:32 -05:00
Zach Daniel
e90fdad34a feat: support Ash.Query.select/3 and Ash.Changeset.select/3 2021-03-07 14:09:51 -05:00
Zach Daniel
c2cb843be9 improvement: ignore destination field on some relationship inputs 2021-03-05 10:39:06 -05:00
Zach Daniel
e60e5bf281 fix: treat empty string as nil in manage_relationship
fix: be more conservative (and more correct) when optimizing predicates
2021-02-24 11:13:35 -05:00
zimt28
e10b273ce4
Ecto.UUID -> Ash.UUID (#188) 2021-02-23 12:27:49 -05:00
Zach Daniel
d42c778a0d improvement: many compile time fixes via code splitting
feat: refactored manage_relationship options/behavior
2021-02-22 20:44:03 -05:00
zimt28
db533450ed
improvement: Guess destination_field for has many relationships (#187) 2021-02-15 13:32:44 -05:00
Darren Black
983a711837
improvement: Implement string length validation (#183)
Co-authored-by: Darren Black <darren@ifixsystems.com.au>
2021-02-08 18:16:32 -05:00
Zach Daniel
03b6714e6f improvement: set_context change/preparation
fix: support `manage_relationship` for `belongs_to`
2021-02-05 18:56:56 -05:00
Zach Daniel
142b3bf7f9 feat: add default_context
feat: add `manage_relationship/4`

feat: add relationship specific context (for postgres polymorphism)

feat: add `reject` (opposite of `accept`)

improvement: set `accept` by default
2021-02-04 17:15:15 -05:00
Zach Daniel
dd26beb79b chore: add more authorization tests
chore: improve authorization test helper

improvement: support `{:filter, _}` authorization results for changesets
2021-01-28 14:49:08 -05:00
Zach Daniel
8e74ff62a6 fix: remove invalid boolean expression optimization
improvement: make form errors work better with phoenix

this involves temporarily making embed error messages *worse*
but we can improve them as we get more usage
2021-01-24 13:47:10 -05:00
Zach Daniel
61e6b7c80c fix: various ci_string improvements
feat: add `contains/2` query function
2021-01-23 22:28:56 -05:00
Zach Daniel
bb91fd4bc7 fix: add action filters in for_read/3
fix: don't let local runner processes mix up messages

fix: runtime filter filters properly
2021-01-22 16:41:32 -05:00
Zach Daniel
f6f5d194bf feat: freeform expressions
feat: validatiosn in actions

feat: query arguments

feat: add `Ash.Query.for_read/3`

feat: return changeset with API errors

feat: add case insensitive string `CiString`/`:ci_string`

feat: support `context/1` and `arg/1` in filter templates

feat: support targeting notifications with the `for` option

feat: add `ago/2` query function

feat: add basic arithmetic operators (+, *, -, /)

feat: `sensitive?` option for attributes

feat: `sensitive?` option for arguments

feat: `private` arguments, which can’t be set using `for_<action>`

feat: add `prevent_change` which will erase changes just before the changeset is committed

feat: add `match?` validation that supports a custom error message

feat: add `interval` type to support `ago/2` function

feat: add `url_encoded_binary` type

feat: add `function` type

improvement: `changing?` is now a validation

improvement: add `Transformer.get_persisted/3`

improvement: add `api` field to `Notification`

improvement: standardize errors, add `to_error_class`

improvement: use `Comp` everywhere

Improvement: use action on changeset if set by `for_<action_type>`

improvement: `action_failed?` field on change sets

improvement: remove ability for data layers to add operators (for now at least)

Improvement: Changeset.apply_attributes/2 now returns an error tuple

Improvement: add a bunch of new/informative errors

improvement: runtime filter now uses left join logic (a naive implementation of it)

improvement: support more filter templates in resources

Improvement: basic/naive type system for operators/functions

Fix: properly expand module aliases for options w/o compile time dependency

chore(engine): track changeset changes for the request with `manage_changeset?: true`
2021-01-21 15:22:50 -05:00
zimt28
6ddae6850f
improvement: Add trim/allow_empty to string type (#171) 2021-01-15 20:41:21 -05:00
zimt28
31cb4f4be3
improvement: Improve attribute defaults (#164) 2021-01-12 15:40:55 -05:00
Zach Daniel
f2650d6d48 chore: use uuid_primary_key in sort_test 2021-01-12 15:40:21 -05:00
Zach Daniel
6a26a583de
feat: Add Embedded Resources (#170) 2021-01-12 15:05:56 -05:00
zimt28
4404da93ce
fix: Correct error message (#163) 2021-01-09 11:36:01 -05:00
Zach Daniel
dbf9f82802 improvement: add Ash.Sort.parse_input/2
fix: fix small sort bugs
2021-01-08 14:22:31 -05:00