class GraphQLDocs::Renderer

Attributes

options[R]

Public Class Methods

new(parsed_schema, options) click to toggle source
# File lib/graphql-docs/renderer.rb, line 13
def initialize(parsed_schema, options)
  @parsed_schema = parsed_schema
  @options = options

  @graphql_default_layout = ERB.new(File.read(@options[:templates][:default])) unless @options[:templates][:default].nil?

  @pipeline_config = @options[:pipeline_config] || {}
  pipeline = @pipeline_config[:pipeline] || {}
  context = @pipeline_config[:context] || {}

  filters = pipeline.map do |f|
    if filter?(f)
      f
    else
      key = filter_key(f)
      filter = HTML::Pipeline.constants.find { |c| c.downcase == key }
      # possibly a custom filter
      if filter.nil?
        Kernel.const_get(f)
      else
        HTML::Pipeline.const_get(filter)
      end
    end
  end

  @pipeline = HTML::Pipeline.new(filters, context)
end

Public Instance Methods

render(contents, type: nil, name: nil, filename: nil) click to toggle source
# File lib/graphql-docs/renderer.rb, line 41
def render(contents, type: nil, name: nil, filename: nil)
  opts = { base_url: @options[:base_url], output_dir: @options[:output_dir] }.merge({ type: type, name: name, filename: filename }).merge(helper_methods)

  contents = to_html(contents, context: { filename: filename })
  return contents if @graphql_default_layout.nil?

  opts[:content] = contents
  @graphql_default_layout.result(OpenStruct.new(opts).instance_eval { binding })
end
to_html(string, context: {}) click to toggle source
# File lib/graphql-docs/renderer.rb, line 51
def to_html(string, context: {})
  @pipeline.to_html(string, context)
end

Private Instance Methods

filter?(filter) click to toggle source
# File lib/graphql-docs/renderer.rb, line 61
def filter?(filter)
  filter < HTML::Pipeline::Filter
rescue LoadError, ArgumentError
  false
end
filter_key(str) click to toggle source
# File lib/graphql-docs/renderer.rb, line 57
def filter_key(str)
  str.downcase
end