Skip to content

Commit 463619e

Browse files
authored
Update absinthe_federation to v0.5.2 (#612)
This version brings support for the @interfaceObject directive
1 parent 696cc38 commit 463619e

File tree

3 files changed

+42
-30
lines changed

3 files changed

+42
-30
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
[
22
import_deps: [:phoenix, :absinthe],
3-
inputs: ["*.{ex,exs}", "{config,lib,test}/**/*.{ex,exs}"]
3+
inputs: ["*.{ex,exs}", "{config,lib,test}/**/*.{ex,exs}"],
4+
line_length: 120
45
]

implementations/absinthe-federation/lib/products_web/schema.ex

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ defmodule ProductsWeb.Schema do
4040
directive :link, url: "https://divvypay.com/test/v2.4", import: ["@custom"]
4141

4242
directive :link,
43-
url: "https://specs.apollo.dev/federation/v2.1",
43+
url: "https://specs.apollo.dev/federation/v2.3",
4444
import: [
4545
"@extends",
4646
"@external",
@@ -51,7 +51,8 @@ defmodule ProductsWeb.Schema do
5151
"@requires",
5252
"@shareable",
5353
"@tag",
54-
"@composeDirective"
54+
"@composeDirective",
55+
"@interfaceObject"
5556
]
5657
end
5758

@@ -117,7 +118,7 @@ defmodule ProductsWeb.Schema do
117118
end
118119

119120
field :_resolve_reference, :deprecated_product do
120-
resolve(&resolve_deprecated_product_reference/2)
121+
resolve(&resolve_deprecated_product/2)
121122
end
122123
end
123124

@@ -256,6 +257,23 @@ defmodule ProductsWeb.Schema do
256257
end
257258
end
258259

260+
@desc """
261+
type Inventory @interfaceObject @key(fields: "id") {
262+
id: ID! @external
263+
deprecatedProducts: [DeprecatedProduct!]!
264+
}
265+
"""
266+
object :inventory do
267+
key_fields("id")
268+
interface_object()
269+
270+
field :id, non_null(:id), do: external()
271+
272+
field :deprecated_products, non_null(list_of(non_null(:deprecated_product))) do
273+
resolve &resolve_deprecated_products_for_inventory/3
274+
end
275+
end
276+
259277
defp resolve_product(_parent, %{id: id}, _ctx) do
260278
{:ok, Enum.find(products(), &(&1.id == id))}
261279
end
@@ -307,32 +325,12 @@ defmodule ProductsWeb.Schema do
307325
end
308326
end
309327

310-
defp resolve_deprecated_product_reference(
311-
%{sku: "apollo-federation-v1", package: "@apollo/federation-v1"},
312-
_ctx
313-
) do
314-
{:ok,
315-
%DeprecatedProduct{
316-
sku: "apollo-federation-v1",
317-
package: "@apollo/federation-v1",
318-
reason: "Migrate to Federation V2"
319-
}}
328+
defp resolve_deprecated_product(%{sku: sku}, _ctx) do
329+
{:ok, Enum.find(deprecated_products(), &(&1.sku == sku))}
320330
end
321331

322-
defp resolve_deprecated_product_reference(_args, _ctx) do
323-
{:ok, nil}
324-
end
325-
326-
defp resolve_deprecated_product(
327-
%{sku: "apollo-federation-v1", package: "@apollo/federation-v1"},
328-
_ctx
329-
) do
330-
{:ok,
331-
%DeprecatedProduct{
332-
sku: "apollo-federation-v1",
333-
package: "@apollo/federation-v1",
334-
reason: "Migrate to Federation V2"
335-
}}
332+
defp resolve_deprecated_product(%{package: package}, _ctx) do
333+
{:ok, Enum.find(deprecated_products(), &(&1.package == package))}
336334
end
337335

338336
defp resolve_deprecated_product(_args, _ctx) do
@@ -343,6 +341,10 @@ defmodule ProductsWeb.Schema do
343341
{:ok, List.first(users())}
344342
end
345343

344+
defp resolve_deprecated_products_for_inventory(%{__typename: "Inventory"} = _parent, _args, _ctx) do
345+
{:ok, deprecated_products()}
346+
end
347+
346348
defp products(),
347349
do: [
348350
%Product{
@@ -363,6 +365,15 @@ defmodule ProductsWeb.Schema do
363365
}
364366
]
365367

368+
defp deprecated_products(),
369+
do: [
370+
%DeprecatedProduct{
371+
sku: "apollo-federation-v1",
372+
package: "@apollo/federation-v1",
373+
reason: "Migrate to Federation V2"
374+
}
375+
]
376+
366377
defp product_research(),
367378
do: [
368379
%ProductResearch{

implementations/absinthe-federation/mix.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
%{
2-
"absinthe": {:hex, :absinthe, "1.7.1", "aca6f64994f0914628429ddbdfbf24212747b51780dae189dd98909da911757b", [:mix], [{:dataloader, "~> 1.0.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 1.2.2 or ~> 1.3.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c0c4dbd93881fa3bfbad255608234b104b877c2a901850c1fe8c53b408a72a57"},
3-
"absinthe_federation": {:hex, :absinthe_federation, "0.5.0", "c2cd99f6e0f04c057f81b753b83be7a1ba0a5eccc2cc63e2168dbbe8355440c9", [:mix], [{:absinthe, "~> 1.7", [hex: :absinthe, repo: "hexpm", optional: false]}, {:dataloader, "~> 1.0.9 or ~> 2.0", [hex: :dataloader, repo: "hexpm", optional: false]}], "hexpm", "a2b1b512123bb691e466a7f625c2fae34bfe7c6bccd4f69de12e43c4bba44a6f"},
2+
"absinthe": {:hex, :absinthe, "1.7.6", "0b897365f98d068cfcb4533c0200a8e58825a4aeeae6ec33633ebed6de11773b", [:mix], [{:dataloader, "~> 1.0.0 or ~> 2.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:opentelemetry_process_propagator, "~> 0.2.1", [hex: :opentelemetry_process_propagator, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7626951ca5eec627da960615b51009f3a774765406ff02722b1d818f17e5778"},
3+
"absinthe_federation": {:hex, :absinthe_federation, "0.5.2", "62bfc7cefccc719e5001c93dc142b141cc6aa8f3b96883b245a40778e9c50020", [:mix], [{:absinthe, "~> 1.7", [hex: :absinthe, repo: "hexpm", optional: false]}, {:dataloader, "~> 1.0.9 or ~> 2.0", [hex: :dataloader, repo: "hexpm", optional: false]}], "hexpm", "ad5c1d78bc91df431ac813cf3eeb2b356eaf81c4bda2d342d9204bece3c99509"},
44
"absinthe_plug": {:hex, :absinthe_plug, "1.5.8", "38d230641ba9dca8f72f1fed2dfc8abd53b3907d1996363da32434ab6ee5d6ab", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:plug, "~> 1.4", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bbb04176647b735828861e7b2705465e53e2cf54ccf5a73ddd1ebd855f996e5a"},
55
"castore": {:hex, :castore, "1.0.0", "c25cd0794c054ebe6908a86820c8b92b5695814479ec95eeff35192720b71eec", [:mix], [], "hexpm", "577d0e855983a97ca1dfa33cbb8a3b6ece6767397ffb4861514343b078fc284b"},
66
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},

0 commit comments

Comments
 (0)