Class: GraphQLDocs::Generator

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/graphql-docs/generator.rb

Constant Summary

Constants included from Helpers

Helpers::SLUGIFY_PRETTY_REGEXP

Instance Attribute Summary collapse

Attributes included from Helpers

#templates

Instance Method Summary collapse

Methods included from Helpers

#format_type, #graphql_enum_types, #graphql_input_object_types, #graphql_interface_types, #graphql_mutation_types, #graphql_object_types, #graphql_scalar_types, #graphql_union_types, #include, #markdown, #slugify

Constructor Details

#initialize(parsed_schema, options) ⇒ Generator

Returns a new instance of Generator.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/graphql-docs/generator.rb', line 10

def initialize(parsed_schema, options)
  @parsed_schema = parsed_schema
  @options = options

  @renderer = @options[:renderer].new(@options, @parsed_schema)

  @graphql_object_template = ERB.new(File.read(@options[:templates][:objects]))
  @graphql_mutations_template = ERB.new(File.read(@options[:templates][:mutations]))
  @graphql_interfaces_template = ERB.new(File.read(@options[:templates][:interfaces]))
  @graphql_enums_template = ERB.new(File.read(@options[:templates][:enums]))
  @graphql_unions_template = ERB.new(File.read(@options[:templates][:unions]))
  @graphql_input_objects_template = ERB.new(File.read(@options[:templates][:input_objects]))
  @graphql_scalars_template = ERB.new(File.read(@options[:templates][:scalars]))
end

Instance Attribute Details

#parsed_schemaObject

Returns the value of attribute parsed_schema.



8
9
10
# File 'lib/graphql-docs/generator.rb', line 8

def parsed_schema
  @parsed_schema
end

Instance Method Details

#create_graphql_enum_pagesObject



86
87
88
89
90
91
92
93
# File 'lib/graphql-docs/generator.rb', line 86

def create_graphql_enum_pages
  graphql_enum_types.each do |enum_type|
    opts = default_generator_options({ type: enum_type })

    contents = @graphql_enums_template.result(OpenStruct.new(opts).instance_eval { binding })
    write_file('enum', enum_type['name'], contents)
  end
end

#create_graphql_input_object_pagesObject



104
105
106
107
108
109
110
111
# File 'lib/graphql-docs/generator.rb', line 104

def create_graphql_input_object_pages
  graphql_input_object_types.each do |input_object_type|
    opts = default_generator_options({ type: input_object_type })

    contents = @graphql_input_objects_template.result(OpenStruct.new(opts).instance_eval { binding })
    write_file('input_object', input_object_type['name'], contents)
  end
end

#create_graphql_interface_pagesObject



77
78
79
80
81
82
83
84
# File 'lib/graphql-docs/generator.rb', line 77

def create_graphql_interface_pages
  graphql_interface_types.each do |interface_type|
    opts = default_generator_options({ type: interface_type })

    contents = @graphql_interfaces_template.result(OpenStruct.new(opts).instance_eval { binding })
    write_file('interface', interface_type['name'], contents)
  end
end

#create_graphql_mutation_pagesObject



63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/graphql-docs/generator.rb', line 63

def create_graphql_mutation_pages
  graphql_mutation_types.each do |mutation|
    input_name = mutation['args'].first['type']['ofType']['name']
    return_name = mutation['type']['name']
    input = graphql_input_object_types.find { |t| t['name'] == input_name }
    payload = graphql_object_types.find { |t| t['name'] == return_name }

    opts = default_generator_options({ type: mutation, input_fields: input, return_fields: payload })

    contents = @graphql_mutations_template.result(OpenStruct.new(opts).instance_eval { binding })
    write_file('mutation', mutation['name'], contents)
  end
end

#create_graphql_object_pagesObject



54
55
56
57
58
59
60
61
# File 'lib/graphql-docs/generator.rb', line 54

def create_graphql_object_pages
  graphql_object_types.each do |object_type|
    next if object_type['name'].start_with?('__')
    opts = default_generator_options(type: object_type)
    contents = @graphql_object_template.result(OpenStruct.new(opts).instance_eval { binding })
    write_file('object', object_type['name'], contents)
  end
end

#create_graphql_scalar_pagesObject



113
114
115
116
117
118
119
120
# File 'lib/graphql-docs/generator.rb', line 113

def create_graphql_scalar_pages
  graphql_scalar_types.each do |scalar_type|
    opts = default_generator_options({ type: scalar_type })

    contents = @graphql_scalars_template.result(OpenStruct.new(opts).instance_eval { binding })
    write_file('scalar', scalar_type['name'], contents)
  end
end

#create_graphql_union_pagesObject



95
96
97
98
99
100
101
102
# File 'lib/graphql-docs/generator.rb', line 95

def create_graphql_union_pages
  graphql_union_types.each do |union_type|
    opts = default_generator_options({ type: union_type })

    contents = @graphql_unions_template.result(OpenStruct.new(opts).instance_eval { binding })
    write_file('union', union_type['name'], contents)
  end
end

#generateObject



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
50
51
52
# File 'lib/graphql-docs/generator.rb', line 25

def generate
  FileUtils.rm_rf(@options[:output_dir]) if @options[:delete_output]

  create_graphql_object_pages
  create_graphql_mutation_pages
  create_graphql_interface_pages
  create_graphql_enum_pages
  create_graphql_union_pages
  create_graphql_input_object_pages
  create_graphql_scalar_pages

  unless @options[:templates][:index].nil?
    write_file('static', 'index', File.read(@options[:templates][:index]))
  end

  if @options[:use_default_styles]
    assets_dir = File.join(File.dirname(__FILE__), 'layouts', 'assets')
    FileUtils.mkdir_p(File.join(@options[:output_dir], 'assets'))

    sass = File.join(assets_dir, 'css', 'screen.scss')
    system `sass --sourcemap=none #{sass}:#{@options[:output_dir]}/assets/style.css`

    FileUtils.cp_r(File.join(assets_dir, 'images'), File.join(@options[:output_dir], 'assets'))
    FileUtils.cp_r(File.join(assets_dir, 'webfonts'), File.join(@options[:output_dir], 'assets'))
  end

  true
end