class JsDuck::Exporter::App

Exports data for Docs app.

Public Class Methods

new(relations, opts) click to toggle source
# File lib/jsduck/exporter/app.rb, line 11
def initialize(relations, opts)
  @full_exporter = Exporter::Full.new(relations, opts)
  @relations = relations
  @renderer = Render::Class.new(opts)
end

Public Instance Methods

export(cls) click to toggle source

Returns compacted class data hash which contains an additional :html field with full HTML to show on class overview page.

# File lib/jsduck/exporter/app.rb, line 19
def export(cls)
  data = @full_exporter.export(cls)

  data[:classIcon] = Web::ClassIcons.get(cls)
  data[:superclasses] = cls.superclasses.collect {|c| c[:name] }
  data[:subclasses] = @relations.subclasses(cls).collect {|c| c[:name] }.sort
  data[:mixedInto] = @relations.mixed_into(cls).collect {|c| c[:name] }.sort
  data[:alternateClassNames] = cls[:alternateClassNames].sort if cls[:alternateClassNames]

  data[:mixins] = cls.deps(:mixins).collect {|c| c[:name] }.sort
  data[:parentMixins] = cls.parent_deps(:mixins).collect {|c| c[:name] }.sort
  data[:requires] = cls.deps(:requires).collect {|c| c[:name] }.sort
  data[:uses] = cls.deps(:uses).collect {|c| c[:name] }.sort

  data[:html] = @renderer.render(data)

  return compact(data)
end

Private Instance Methods

combine_meta(m) click to toggle source

Add data for builtin tags with signatures to :meta field.

# File lib/jsduck/exporter/app.rb, line 59
def combine_meta(m)
  meta = {}
  TagRegistry.signatures.each do |s|
    name = s[:tagname]
    meta[name] = m[name] if m[name]
  end
  meta
end
compact(cls) click to toggle source

removes extra data from export

# File lib/jsduck/exporter/app.rb, line 41
def compact(cls)
  cls.delete(:doc)
  cls[:members] = cls[:members].map {|m| compact_member(m) }
  cls[:files] = compact_files(cls[:files])
  cls[:meta] = combine_meta(cls)
  cls
end
compact_files(files) click to toggle source

Remove full path from filename for privacy considerations as the path can reveal information about the system where JSDuck was run. The docs app doesn't need to have this information.

# File lib/jsduck/exporter/app.rb, line 71
def compact_files(files)
  files.map do |f|
    {:filename => File.basename(f[:filename]), :href => f[:href]}
  end
end
compact_member(m) click to toggle source
# File lib/jsduck/exporter/app.rb, line 49
def compact_member(m)
  m_copy = {}
  [:name, :tagname, :owner, :id].each do |key|
    m_copy[key] = m[key]
  end
  m_copy[:meta] = combine_meta(m)
  m_copy
end