Speakeasy.Resolve (Speakeasy v0.3.2)
Resolution middleware for Absinthe.
See the README for a complete example in a Absinthe Schema.
Link to this section Summary
Functions
The Resolve
middleware will fetch a resource and mark the Absinthe.Resolution
as resolved.
Link to this section Functions
call(res, fun)
The Resolve
middleware will fetch a resource and mark the Absinthe.Resolution
as resolved.
It expects a return signature of: {any | {:ok, any}, {:errors, any}
Speakeasy.Resolve
has 4 forms:
No arguments
Providing no arguments to the callback will simply return the resource retreived by Speakeasy.LoadResource
if it was called:
field :post, type: :post do
arg(:id, non_null(:string))
middleware(Speakeasy.Authn)
middleware(Speakeasy.LoadResourceByID, &Posts.get_post/1)
middleware(Speakeasy.Authz, {Posts, :get_post})
middleware(Speakeasy.Resolve)
end
0 arity function
Functions with an arity of 0 will simply be called:
field :post, type: :post do
arg(:id, non_null(:string))
middleware(Speakeasy.Authn)
middleware(Speakeasy.LoadResourceByID, &Posts.get_post/1)
middleware(Speakeasy.Authz, {Posts, :get_post})
middleware(Speakeasy.Resolve, fn() -> MyApp.Posts.something() end)
end
1 arity function
Functions with an arity of 1 will receive the Absinthe arguments:
field :post, type: :post do
arg(:id, non_null(:string))
middleware(Speakeasy.Authn)
middleware(Speakeasy.LoadResourceByID, &Posts.get_post/1)
middleware(Speakeasy.Authz, {Posts, :get_post})
middleware(Speakeasy.Resolve, fn(attrs) -> MyApp.Posts.get_post(attrs) end)
end
2 arity function
This is a good form to use when creating a resource if your code takes the user
in additional to the attributes.
Functions with an arity of 2 will receive the graph will receive the Absinthe arguments and the SpeakEasy
current user:
field :post, type: :post do
arg(:id, non_null(:string))
middleware(Speakeasy.Authn)
middleware(Speakeasy.LoadResourceByID, &Posts.get_post/1)
middleware(Speakeasy.Authz, {Posts, :create_post})
middleware(Speakeasy.Resolve, fn(attrs, user) -> MyApp.Posts.create_post(attrs, user) end)
end
3 arity function
This is a good form to use when needing to update a resource.
Functions with an arity of 3 will receive the graph will receive the resource retreived by Speakeasy.LoadResource
(if it was called), the Absinthe arguments, and the SpeakEasy
current user:
field :post, type: :post do
arg(:id, non_null(:string))
middleware(Speakeasy.Authn)
middleware(Speakeasy.LoadResourceByID, &Posts.get_post/1)
middleware(Speakeasy.Authz, {Posts, :update_posts})
middleware(Speakeasy.Resolve, fn(resource, attrs, _user) -> MyApp.Posts.update_post(resource, attrs) end)
# middleware(Speakeasy.Resolve, &MyApp.Posts.update_posts/3)
end