Zach Daniel 09/04/2020
A declarative, resource-oriented application framework for Elixir
www.ash-elixir.org
Currently in early alpha, targeting stable release in early 2021
Ash Framework
Introduction to the
Slide 2
Slide 2 text
The #1 solution for driving software adoption and digital
transformation with your remote engineering team
www.variance.com
Your documentation dies in the dark
Authentication
@ashframework
• Not handled by Ash yet
• An “actor” is provided on the way in
• Eventually, extensions will likely support it
Slide 67
Slide 67 text
FakeUser plug
@ashframework
Slide 68
Slide 68 text
Adding AshPolicyAuthorizer
@ashframework
Slide 69
Slide 69 text
Adding our Resources
Slide 70
Slide 70 text
Adding our Resources
Slide 71
Slide 71 text
Adding our Resources
Slide 72
Slide 72 text
Adding our Resources
Slide 73
Slide 73 text
Adding our Resources
Slide 74
Slide 74 text
Adding our Resources
Slide 75
Slide 75 text
GET /api/users
@ashframework
Slide 76
Slide 76 text
POST /api/tickets
Slide 77
Slide 77 text
POST /api/tickets
Slide 78
Slide 78 text
POST /api/tickets
Slide 79
Slide 79 text
POST /api/tickets
Slide 80
Slide 80 text
POST /api/tickets
Slide 81
Slide 81 text
More specific actions
@ashframework
Slide 82
Slide 82 text
More specific actions
@ashframework
Slide 83
Slide 83 text
Reacting to the Actor
@ashframework
• Customize changes based on the actor
• Use policies to prevent/allow specific actors
Slide 84
Slide 84 text
Using `changes`
@ashframework
Slide 85
Slide 85 text
Using `changes`
@ashframework
Slide 86
Slide 86 text
Using `changes`
@ashframework
Slide 87
Slide 87 text
Using `changes`
@ashframework
Slide 88
Slide 88 text
Using it in code
Slide 89
Slide 89 text
Using it in code
@ashframework
Slide 90
Slide 90 text
Using it in code
@ashframework
Slide 91
Slide 91 text
Via the API
@ashframework
Slide 92
Slide 92 text
Via the API
@ashframework
Slide 93
Slide 93 text
POST /api/tickets/open?include=reporter
Slide 94
Slide 94 text
POST /api/tickets/open?include=reporter
Slide 95
Slide 95 text
POST /api/tickets/open?include=reporter
Slide 96
Slide 96 text
Editable reporter
@ashframework
Slide 97
Slide 97 text
Editable reporter
@ashframework
Slide 98
Slide 98 text
Using `policies`
@ashframework
Slide 99
Slide 99 text
Using `policies`
@ashframework
Slide 100
Slide 100 text
Using policies
@ashframework
Slide 101
Slide 101 text
Using policies
@ashframework
Slide 102
Slide 102 text
Using policies
@ashframework
Slide 103
Slide 103 text
Using policies
@ashframework
Slide 104
Slide 104 text
Using policies
@ashframework
Slide 105
Slide 105 text
Using policies
@ashframework
Slide 106
Slide 106 text
Using policies
@ashframework
Slide 107
Slide 107 text
Bypass Policies
@ashframework
Slide 108
Slide 108 text
Using policies
@ashframework
Slide 109
Slide 109 text
Using policies
@ashframework
Slide 110
Slide 110 text
Trying it out
@ashframework
Slide 111
Slide 111 text
Trying it out
@ashframework
Slide 112
Slide 112 text
Trying it out
@ashframework
Slide 113
Slide 113 text
Trying it out
@ashframework
Slide 114
Slide 114 text
Trying it out
@ashframework
Slide 115
Slide 115 text
Trying it out
@ashframework
Slide 116
Slide 116 text
Reading Tickets
@ashframework
Slide 117
Slide 117 text
Reading Tickets
@ashframework
Slide 118
Slide 118 text
Reading Tickets
@ashframework
Slide 119
Slide 119 text
Reading Tickets
@ashframework
Slide 120
Slide 120 text
Reading Tickets
@ashframework
Slide 121
Slide 121 text
GET /api/tickets
@ashframework
Slide 122
Slide 122 text
GET /api/tickets
@ashframework
Slide 123
Slide 123 text
GET /api/tickets?filter[reporter]=:user_id
@ashframework
Slide 124
Slide 124 text
GET /api/tickets?filter[reporter]=:user_id
@ashframework
Slide 125
Slide 125 text
Filter Templates
@ashframework
Slide 126
Slide 126 text
Filter Templates
@ashframework
Slide 127
Slide 127 text
Filter Templates
@ashframework
Slide 128
Slide 128 text
Access Type - filter
@ashframework
Slide 129
Slide 129 text
GET /api/tickets
@ashframework
Slide 130
Slide 130 text
Calculations and Aggregates
@ashframework
Slide 131
Slide 131 text
Calculations and Aggregates
@ashframework
Slide 132
Slide 132 text
Calculations and Aggregates
@ashframework
Slide 133
Slide 133 text
Calculations and Aggregates
@ashframework
Slide 134
Slide 134 text
Calculations and Aggregates
@ashframework
Slide 135
Slide 135 text
Calculations and Aggregates
@ashframework
Slide 136
Slide 136 text
Calculations and Aggregates
@ashframework
Slide 137
Slide 137 text
Calculations and Aggregates
@ashframework
Slide 138
Slide 138 text
Calculations and Aggregates
@ashframework
Slide 139
Slide 139 text
Calculations and Aggregates
@ashframework
Slide 140
Slide 140 text
Calculations and Aggregates
@ashframework
Slide 141
Slide 141 text
Calculations and Aggregates
@ashframework
Slide 142
Slide 142 text
Calculations and Aggregates
@ashframework
Slide 143
Slide 143 text
Calculations and Aggregates
@ashframework
Slide 144
Slide 144 text
Calculations and Aggregates
@ashframework
Slide 145
Slide 145 text
Taking stock
@ashframework
• Our tickets resource has a great “open” action.
• Authorization for reads
• Missing more actions, e.g `close` and `respond`
• Calculations and aggregates that can be requested by the API
• Its all in one top level namespace
Slide 146
Slide 146 text
Multiple Apis
@ashframework
Slide 147
Slide 147 text
Multiple Apis
@ashframework
Slide 148
Slide 148 text
Multiple Apis
@ashframework
Slide 149
Slide 149 text
Router
@ashframework
Slide 150
Slide 150 text
@ashframework
Slide 151
Slide 151 text
No content
Slide 152
Slide 152 text
No content
Slide 153
Slide 153 text
But what about GraphQL?
Slide 154
Slide 154 text
AshGraphQL
Slide 155
Slide 155 text
What we missed
• ETS, Mnesia, CSV data layers, its easy to write your own
• Resources aren’t tables - CQRS/DDD
• Built in tooling for extending Ash
• Escape Hatches
• Writing an extension is easy
@ashframework
• Andrew Callahan @andrewcallahan
• Mike Binns @1stAvenger
• Paul Schoenfelder @gotbones
• Jason Goldberger @json_louis
• Andrew Summers @_asummers
• Vince Herr linkedin.com/in/vincent-herr-6b12b021/
• Cresten StClair cresten.pizza
• Percy Hatcherson linkedin.com/in/percyhatcherson/
• Meredith Bollinger @heymereb
Acknowledgements
@ashframework
Slide 158
Slide 158 text
Join the Ash Community
• Visit the community page on www.ash-elixir.org
• Book office hours
• GH issues
• Join the Slack channel and Google group
• Follow Ash on Twitter @ashframework
@ashframework