Module: GraphQLDocs

Defined in:
lib/graphql-docs.rb,
lib/graphql-docs/parser.rb,
lib/graphql-docs/helpers.rb,
lib/graphql-docs/version.rb,
lib/graphql-docs/renderer.rb,
lib/graphql-docs/generator.rb,
lib/graphql-docs/configuration.rb

Defined Under Namespace

Modules: Configuration, Helpers Classes: Generator, Parser, Renderer

Constant Summary collapse

VERSION =
'4.0.0'

Class Method Summary collapse

Class Method Details

.build(options) ⇒ Object

Raises:

  • (ArgumentError)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/graphql-docs.rb', line 12

def build(options)
  # do not let user provided values overwrite every single value
  %i[templates landing_pages].each do |opt|
    next unless options.key?(opt)

    GraphQLDocs::Configuration::GRAPHQLDOCS_DEFAULTS[opt].each_pair do |key, value|
      options[opt][key] = value unless options[opt].key?(key)
    end
  end

  options = GraphQLDocs::Configuration::GRAPHQLDOCS_DEFAULTS.merge(options)

  filename = options[:filename]
  schema = options[:schema]

  raise ArgumentError, 'Pass in `filename` or `schema`, but not both!' if !filename.nil? && !schema.nil?

  raise ArgumentError, 'Pass in either `filename` or `schema`' if filename.nil? && schema.nil?

  if filename
    raise TypeError, "Expected `String`, got `#{filename.class}`" unless filename.is_a?(String)

    raise ArgumentError, "#{filename} does not exist!" unless File.exist?(filename)

    schema = File.read(filename)
  else
    raise TypeError, "Expected `String` or `GraphQL::Schema`, got `#{schema.class}`" if !schema.is_a?(String) && !schema_type?(schema)

    schema = schema
  end

  parser = GraphQLDocs::Parser.new(schema, options)
  parsed_schema = parser.parse

  generator = GraphQLDocs::Generator.new(parsed_schema, options)

  generator.generate
end