Any #ElixirLang or #AshFramework engineers within driving/commute distance of Summit, New Jersey?
In the latest release of #AshFramework, you can encapsulate sets of changes/preparations/validations as "pipelines". More related features coming, but its already a great way to clean up duplicate actions. You can even use `where` to make the whole set conditional! 😎 #ElixirLang
#AshFramework CVE: Classic atom exhaustion, highly unlikely you'd be affected. This affects those using the `:module` type, and accepting that over a public interface (probably no-one). A malicious actor could send a bunch of random values and exhaust your atom table. github.com/ash-project/...

Ash.Type.Module.cast_input/2 a...
Ash.Type.Module.cast_input/2 atom exhaustion via unchecked Module.concat allows BEAM VM crash

## Summary `Ash.Type.Module.cast_input/2` unconditionally creates a new Erlang atom via `Module.concat([value])` for any user-supplied binary string that starts with `"Elixir."`, before verifyin...

GitHub
`Ash.Validation` now supports validating batches of changesets in bulk actions. Most validations should be cheap, but every once in a while you can save some cycles by validating batches at a time. #AshFramework #ElixirLang
Calculations in #AshFramework are extremely powerful, but something that often happens is you end up adding a whole lot of them, each one taking up a field on the struct. Now you can pass `field? false` to get all the features with no struct field taken! 🎉 #ElixirLang
#AshFramework does a lot under the hood, probably more than you realize 🧙. Did you know we use type inference to cast values in critical areas of SQL queries? Now you can use that same logic to get type inference of your calculations 😎 See the before/after. #ElixirLang
This is now supported in AshGraphql and AshJsonApi, and soon for AshTypescript 🎉. #AshFramework already makes building secure applications easy with strong controls around data visibility, policies etc. This is icing on the cake, especially powerful for larger apps. #ElixirLang

RE: https://bsky.app/profile/did:plc:asqrltlnmzecxz42wklq6yy2/post/3mhjo7jnhn22h
Spark, the DSL building tool that backs #AshFramework and many other tools, now supports a functional builder pattern for defining DSLs! Before, you had to hand-roll a bunch of structs. See the before/after shots 😎 #ElixirLang
As of #AshFramework 3.20.0, actions now support the `public?` option, just like fields. It defaults to `true`, but will be flipped in 4.0. This makes it very easy to know and control what actions are available via external interfaces. Support will be rolled out to API extensions soon.
Join the Ash Framework Discord Server!

The Elixir backend framework for unparalleled productivity. Declarative tools that let you stop wasting time. Use with Phoenix LiveView or build APIs in minutes for your front-end of choice. | 2208 members

Discord