This package allows creation of a GraphQL query or mutation string to be created from an Elixir structure. This allows a more "correct by construction" string versus manually creating the string by hand. This is currently a very minimal package only intended to make it easier to generate query strings to be used in Elixir unit tests. The idea for this package was taken from the gql-query-builder package written for node development.
Here are some usage examples:
iex> query = %Query{operation: :thoughts, fields: [:id, :name, :thought]}
iex> GraphqlBuilder.query(query)
query {
thoughts {
id,
name,
thought
}
}
iex> query = %Query{
...> operation: :thoughts,
...> fields: [:name, :thought],
...> variables: [id: 12]
...> }
iex> GraphqlBuilder.query(query)
query {
thoughts(id: 12) {
name,
thought
}
}
iex> query = %Query{
...> operation: :orders,
...> fields: [:id, :amount, user: [:id, :name, :email, address: [:city, :country]]]
...> }
iex> GraphqlBuilder.query(query)
query {
orders {
id,
amount,
user {
id,
name,
email,
address {
city,
country
}
}
}
}
iex> query = %Query{
...> operation: :thought_create,
...> variables: [
...> name: "Tyrion Lannister'",
...> thought: "I drink and I know things."
...> ],
...> fields: [:id]
...>}
iex> GraphqlBuilder.mutation(query)
mutation {
thought_create(name: "Tyrion Lannister'", thought: "I drink and I know things.") {
id
}
}
iex> query = %Query{
...> operation: :update_breed,
...> variables: [
...> id: 12,
...> params: [label: "label", abbreviation: "abbreviation"]
...> ],
...> fields: [:label, :abbreviation]
...> }
iex> GraphqlBuilder.mutation(query)
mutation {
update_breed(id: 12, params: {label: "label", abbreviation: "abbreviation"}) {
label,
abbreviation
}
}
If available in Hex, the package can be installed
by adding graphql_builder
to your list of dependencies in mix.exs
:
def deps do
[
{:graphql_builder, "~> 0.1.0"}
]
end
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/graphql_builder.