Packages
absinthe
1.1.7
1.11.0
1.10.2
1.10.1
1.10.0
1.9.1
1.9.0
1.8.0
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.8
1.6.7
retired
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-rc.1
1.6.0-rc.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.5.0-rc.5
1.5.0-rc.4
1.5.0-rc.3
1.5.0-rc.2
1.5.0-rc.1
1.5.0-rc.0
1.5.0-beta.2
1.5.0-beta.1
1.5.0-beta.0
1.5.0-alpha.4
1.5.0-alpha.3
1.5.0-alpha.2
1.5.0-alpha.1
1.5.0-alpha.0
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
retired
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.3
1.4.0-rc.2
1.4.0-rc.1
1.4.0-rc.0
1.4.0-beta.5
1.4.0-beta.4
1.4.0-beta.3
1.4.0-beta.2
1.4.0-beta.1
1.3.2
1.3.1
1.3.0
1.3.0-rc.0
1.3.0-beta.2
1.3.0-beta.1
1.3.0-beta.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.0
1.2.0-beta.0
1.2.0-alpha0
1.2.0-alpha.2
1.2.0-alpha.1
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.2.3
0.2.2
0.2.1
0.1.0
GraphQL for Elixir
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/absinthe.schema.graphql.ex
defmodule Mix.Tasks.Absinthe.Schema.Graphql do
require Logger
use Mix.Task
import Mix.Generator
@shortdoc "Generate a schema.graphql (IDL) file for an Absinthe schema"
@default_filename "./schema.graphql"
@default_adapter Absinthe.Adapter.LanguageConventions
@default_adapter_name "Absinthe.Adapter.LanguageConventions"
@moduledoc """
Generate a schema.graphql file
## Usage
absinthe.schema.graphql [OPTIONS] [FILENAME]
## Options
--schema The schema. Default: As configured for `:absinthe` `:schema`
--adapter Sets the adapter. Default: #{@default_adapter_name}
## Examples
Write to default path `#{@default_filename}` using the `:schema` configured for
the `:absinthe` application, adapting it using the default
`#{@default_adapter_name}` adapter:
$ mix absinthe.schema.graphql
Write to default path `#{@default_filename}` using the `MySchema` schema, adapting
it using the default `#{@default_adapter_name}` adapter:
$ mix absinthe.schema.graphql --schema MySchema
Write to path `/path/to/schema.graphql` using the `MySchema` schema, adapting
it using the default `#{@default_adapter_name}` adapter:
$ mix absinthe.schema.graphql --schema MySchema /path/to/schema.graphql
Write to default path `#{@default_filename}` using the `MySchema` schema, adapting
it using the `Absinthe.Adapter.Passthrough` adapter:
$ mix absinthe.schema.graphql --schema MySchema --adapter Absinthe.Adapter.Passthrough
"""
def run(argv) do
Mix.Task.run("app.start", [])
{opts, args, _} = OptionParser.parse(argv)
adapter = find_adapter(opts)
schema = find_schema(opts)
filename = args |> List.first || @default_filename
content = schema
|> Absinthe.Language.IDL.to_idl_ast
|> adapter.dump_document
|> Absinthe.Language.IDL.to_idl_iodata
create_directory(Path.dirname(filename))
create_file(filename, content, force: true)
end
defp find_adapter(opts) do
Keyword.get(opts, :adapter, fallback_adapter)
|> List.wrap
|> Module.safe_concat
end
defp fallback_adapter do
Application.get_env(:absinthe, :adapter) || @default_adapter
end
defp find_schema(opts) do
case Keyword.get(opts, :schema, Application.get_env(:absinthe, :schema)) do
nil ->
raise "No --schema given or :schema configured for the :absinthe application"
value ->
[value] |> Module.safe_concat
end
end
end