Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

billperegoy/graphql_builder

Library to build GraphQL queries and mutations from Elixir structs

billperegoy/graphql_builder.json
{
"createdAt": "2019-06-02T04:44:54Z",
"defaultBranch": "master",
"description": "Library to build GraphQL queries and mutations from Elixir structs",
"fullName": "billperegoy/graphql_builder",
"homepage": null,
"language": "Elixir",
"name": "graphql_builder",
"pushedAt": "2023-08-29T15:30:01Z",
"stargazersCount": 36,
"topics": [],
"updatedAt": "2025-02-24T11:32:05Z",
"url": "https://github.com/billperegoy/graphql_builder"
}

Module Version Hex Docs Total Download License Last Updated

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.

The package can be installed by adding :graphql_builder to your list of dependencies in mix.exs:

def deps do
[
{:graphql_builder, "~> 0.3.0"}
]
end

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
}
}

Copyright (c) 2019 Bill Peregoy

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.