GraphqlQuery.Document (graphql_query v0.3.7)
View SourceStruct representation of a GraphQL query or mutation.
If you need to build documents or fragments manually, you can use this methods.
Example
# Fragments
iex> fragment = GraphqlQuery.Document.new("fragment UserFields on User { id name }", name: "UserFields", type: :fragment)
iex> fragment.__struct__ == GraphqlQuery.Fragment
true
iex> fragment.name
"UserFields"
iex> fragment.name
"UserFields"
iex> fragment.fragment
"fragment UserFields on User { id name }"
# Queries
iex> fragment = GraphqlQuery.Document.new("fragment UserFields on User { id name }", name: "UserFields", type: :fragment)
iex> query = GraphqlQuery.Document.new("query { user { ...UserFields } }", fragments: [fragment])
iex> query.query
"query { user { ...UserFields } }"
# Schemas
iex> schema = GraphqlQuery.Document.new("schema { query: Query }", type: :schema)
iex> schema.query
"schema { query: Query }"
iex> schema.type
:schema
# Manupilate the documents
iex> query = GraphqlQuery.Document.new("query U(userId: ID!) { user(id: $userId) { ...UserFragment } }")
iex> query = GraphqlQuery.Document.add_variable(query, :userId, 1)
iex> query.variables
%{userId: 1}
iex> query = GraphqlQuery.Document.add_variables(query, [userId: 2, anotherVar: "test"])
iex> query.variables
%{userId: 2, anotherVar: "test"}
iex> fragment = GraphqlQuery.Document.new("fragment UserFields on User { id name }", name: "UserFields", type: :fragment)
iex> query = GraphqlQuery.Document.add_fragment(query, fragment)
iex> query.fragments == [fragment]
true
iex> query = GraphqlQuery.Document.add_fragments(query, [fragment])
iex> query.fragments == [fragment]
true
iex> query = GraphqlQuery.Document.set_schema(query, MyApp.Schema)
iex> query.schema
MyApp.Schema
# Convert to string or encode as JSON
iex> fragment = GraphqlQuery.Document.new("fragment UserFragment on User { id name }", name: "UserFragment", type: :fragment)
iex> query = GraphqlQuery.Document.new("query User(userId: ID!) { user(id: $userId) { ...UserFragment } }", fragments: [fragment])
iex> query = GraphqlQuery.Document.add_variable(query, :userId, 1)
iex> to_string(query) # String representation
"query User(userId: ID!) { user(id: $userId) { ...UserFragment } }\nfragment UserFragment on User { id name }"
iex> query |> Jason.encode!() |> Jason.decode!() # JSON encoding (works with Jason and JSON libraries)
%{"query" => "query User(userId: ID!) { user(id: $userId) { ...UserFragment } }\nfragment UserFragment on User { id name }", "variables" => %{"userId" => 1}}
Summary
Functions
Add a fragment to the document, if it's not a Fragment struct, it will be ignored.
Add multiple fragments to the document, if they are not Fragment structs, they will be ignored.
Add a variable to the document
Add multiple variables to the document
Format a query with its fragments into a single string.
Create a new GraphQL document or fragment from a document string and options.
Set the name of the document
Set schema to the document
Types
@type document() :: t() | GraphqlQuery.Fragment.t()
@type t() :: %GraphqlQuery.Document{ document_info: GraphqlQuery.DocumentInfo.t() | nil, format: boolean(), fragments: [GraphqlQuery.Fragment.t()], ignore?: boolean(), location: keyword() | nil, name: String.t() | nil, path: String.t() | nil, query: String.t(), schema: module() | nil, type: :query | :schema, variables: map() | keyword() }
Functions
@spec add_fragment(t(), GraphqlQuery.Fragment.t() | any()) :: t()
Add a fragment to the document, if it's not a Fragment struct, it will be ignored.
@spec add_fragments(t(), [GraphqlQuery.Fragment.t() | any()]) :: t()
Add multiple fragments to the document, if they are not Fragment structs, they will be ignored.
Add a variable to the document
Add multiple variables to the document
Format a query with its fragments into a single string.
@spec new(String.t(), new_options()) :: document()
Create a new GraphQL document or fragment from a document string and options.
@spec set_document_info(document(), GraphqlQuery.DocumentInfo.t() | nil) :: t()
Set the name of the document
Set schema to the document