Class: GraphQL::RakeTask

Inherits:
Object
  • Object
show all
Extended by:
Rake::DSL
Includes:
Rake::DSL
Defined in:
lib/graphql/rake_task.rb,
lib/graphql/rake_task/validate.rb

Overview

A rake task for dumping a schema as IDL or JSON.

By default, schemas are looked up by name as constants using schema_name:. You can provide a load_schema function to return your schema another way.

load_context:, only: and except: are supported so that you can keep an eye on how filters affect your schema.

Examples:

Dump a Schema to .graphql + .json files

require "graphql/rake_task"
GraphQL::RakeTask.new(schema_name: "MySchema")

# $ rake graphql:schema:dump
# Schema IDL dumped to ./schema.graphql
# Schema JSON dumped to ./schema.json

Invoking the task from Ruby

require "rake"
Rake::Task["graphql:schema:dump"].invoke

Constant Summary collapse

DEFAULT_OPTIONS =
{
  namespace: "graphql",
  dependencies: nil,
  schema_name: nil,
  load_schema: ->(task) { Object.const_get(task.schema_name) },
  load_context: ->(task) { {} },
  only: nil,
  except: nil,
  directory: ".",
  idl_outfile: "schema.graphql",
  json_outfile: "schema.json",
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ RakeTask

Set the parameters of this task by passing keyword arguments or assigning attributes inside the block


78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/graphql/rake_task.rb', line 78

def initialize(options = {})
  default_dependencies = if Rake::Task.task_defined?("environment")
    [:environment]
  else
    []
  end

  all_options = DEFAULT_OPTIONS
    .merge(dependencies: default_dependencies)
    .merge(options)
  all_options.each do |k, v|
    self.public_send("#{k}=", v)
  end

  if block_given?
    yield(self)
  end

  define_task
end

Instance Attribute Details

#dependenciesArray<String>

Returns:

  • (Array<String>)

49
50
51
# File 'lib/graphql/rake_task.rb', line 49

def dependencies
  @dependencies
end

#directoryString

Returns directory for IDL & JSON files

Returns:

  • (String)

    directory for IDL & JSON files


74
75
76
# File 'lib/graphql/rake_task.rb', line 74

def directory
  @directory
end

#except<#call(member, ctx)>?

Returns A filter for this task

Returns:

  • (<#call(member, ctx)>, nil)

    A filter for this task


65
66
67
# File 'lib/graphql/rake_task.rb', line 65

def except
  @except
end

#idl_outfileString

Returns target for IDL task

Returns:

  • (String)

    target for IDL task


68
69
70
# File 'lib/graphql/rake_task.rb', line 68

def idl_outfile
  @idl_outfile
end

#json_outfileString

Returns target for JSON task

Returns:

  • (String)

    target for JSON task


71
72
73
# File 'lib/graphql/rake_task.rb', line 71

def json_outfile
  @json_outfile
end

#load_context<#call(task)>

Returns A callable for loading the query context

Returns:

  • (<#call(task)>)

    A callable for loading the query context


59
60
61
# File 'lib/graphql/rake_task.rb', line 59

def load_context
  @load_context
end

#load_schema<#call(task)>

Returns A proc for loading the target GraphQL schema

Returns:

  • (<#call(task)>)

    A proc for loading the target GraphQL schema


56
57
58
# File 'lib/graphql/rake_task.rb', line 56

def load_schema
  @load_schema
end

#namespace=(value) ⇒ String (writeonly)

Returns Namespace for generated tasks

Returns:

  • (String)

    Namespace for generated tasks


42
43
44
# File 'lib/graphql/rake_task.rb', line 42

def namespace=(value)
  @namespace = value
end

#only<#call(member, ctx)>?

Returns A filter for this task

Returns:

  • (<#call(member, ctx)>, nil)

    A filter for this task


62
63
64
# File 'lib/graphql/rake_task.rb', line 62

def only
  @only
end

#schema_nameString

Returns By default, used to find the schema as a constant.

Returns:

  • (String)

    By default, used to find the schema as a constant.

See Also:

  • for loading a schema another way

53
54
55
# File 'lib/graphql/rake_task.rb', line 53

def schema_name
  @schema_name
end

Instance Method Details

#rake_namespaceObject


44
45
46
# File 'lib/graphql/rake_task.rb', line 44

def rake_namespace
  @namespace
end