class JsDuck::GuideWriter

Writes guide data into files in JSON or JSONP format or to STDOUT.

Public Class Methods

new(exporter_class, guides, opts) click to toggle source
# File lib/jsduck/guide_writer.rb, line 11
def initialize(exporter_class, guides, opts)
  @guides = guides
  @exporter = exporter_class.new(guides, opts)
end

Public Instance Methods

write(dir, extension) click to toggle source

Writes guide data into given directory or STDOUT when dir == :stdout.

Extension is either “.json” for normal JSON output or “.js” for JsonP output.

# File lib/jsduck/guide_writer.rb, line 20
def write(dir, extension)
  dir == :stdout ? write_stdout : write_dir(dir, extension)
end

Private Instance Methods

all_guides() click to toggle source
# File lib/jsduck/guide_writer.rb, line 50
def all_guides
  arr = []
  @guides.each_item {|g| arr << g }
  arr
end
write_dir(dir, extension) click to toggle source
# File lib/jsduck/guide_writer.rb, line 31
def write_dir(dir, extension)
  FileUtils.mkdir(dir) unless File.exists?(dir)
  Util::Parallel.each(all_guides) do |guide|
    filename = dir + "/" + guide["name"] + extension
    Logger.log("Writing guide", filename)
    json = @exporter.export_guide(guide)
    # skip file if exporter returned nil
    if json
      if extension == ".json"
        Util::Json.write_json(filename, json)
      elsif extension == ".js"
        Util::Json.write_jsonp(filename, guide["name"], json)
      else
        throw "Unexpected file extension: #{extension}"
      end
    end
  end
end
write_stdout() click to toggle source
# File lib/jsduck/guide_writer.rb, line 26
def write_stdout
  json = ParallelWrap.map(all_guides) {|guide| @exporter.export_guide(guide) }.compact
  Util::Stdout.add(json)
end