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