Commit a521915a authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Extract WebWriter class from App.

Finally the App class is now relatively simple.
parent 1cd60c00
Loading
Loading
Loading
Loading
+12 −72
Original line number Diff line number Diff line
require 'rubygems'
require 'jsduck/util/parallel'
require 'jsduck/util/json'
require 'jsduck/source/writer'
require 'jsduck/exporter/app'
require 'jsduck/batch_parser'
require 'jsduck/batch_formatter'
require 'jsduck/export_writer'
require 'jsduck/inherit_doc'
require 'jsduck/assets'
require 'jsduck/importer'
require 'jsduck/return_values'
require 'jsduck/lint'
require 'jsduck/template_dir'
require 'jsduck/class_writer'
require 'jsduck/app_data'
require 'jsduck/index_html'
require 'jsduck/inline_examples'
require 'fileutils'
require 'jsduck/assets'
require 'jsduck/export_writer'
require 'jsduck/web_writer'

module JsDuck

@@ -32,10 +23,11 @@ module JsDuck
      Util::Json.pretty = @opts.pretty_json
    end

    # Main App logic.
    #
    # Call this after input parameters set
    def run
      @batch_parser = BatchParser.new(@opts)
      @relations = @batch_parser.run
      parse

      apply_extra_processing

@@ -50,6 +42,11 @@ module JsDuck

    private

    def parse
      @batch_parser = BatchParser.new(@opts)
      @relations = @batch_parser.run
    end

    def apply_extra_processing
      InheritDoc.new(@relations).resolve_all
      Importer.import(@opts.imports, @relations, @opts.new_since)
@@ -66,69 +63,12 @@ module JsDuck
    end


    # -- export --


    def generate_export
      ExportWriter.new(@relations, @assets, @opts).write
    end

    # -- web page --


    def generate_web_page
      clean_output_dir

      write_template_files
      write_app_data

      # class-formatting is done in parallel which breaks the links
      # between source files and classes. Therefore it MUST to be done
      # after writing sources which needs the links to work.
      write_source if @opts.source
      format_classes

      write_inline_examples if @opts.tests

      write_classes

      @assets.write
    end

    def write_template_files
      TemplateDir.new(@opts).write
      IndexHtml.new(@assets, @opts).write
    end

    def write_app_data
      AppData.new(@relations, @assets, @opts).write(@opts.output_dir+"/data.js")
    end

    def write_source
      source_writer = Source::Writer.new(@batch_parser.parsed_files)
      source_writer.write(@opts.output_dir + "/source")
    end

    def write_inline_examples
      examples = InlineExamples.new
      examples.add_classes(@relations)
      examples.add_guides(@assets.guides)
      examples.write(@opts.output_dir+"/inline-examples.js")
    end

    def write_classes
      class_writer = ClassWriter.new(Exporter::App, @relations, @opts)
      class_writer.write(@opts.output_dir+"/output", ".js")
    end

    # -- util routines --

    def clean_output_dir
      FileUtils.rm_rf(@opts.output_dir)
    end

    def format_classes
      BatchFormatter.format_all!(@relations, @assets, @opts)
      WebWriter.new(@relations, @assets, @batch_parser.parsed_files, @opts).write
    end

  end
+79 −0
Original line number Diff line number Diff line
require 'jsduck/exporter/app'
require 'jsduck/batch_formatter'
require 'jsduck/template_dir'
require 'jsduck/index_html'
require 'jsduck/app_data'
require 'jsduck/class_writer'
require 'jsduck/source/writer'
require 'jsduck/inline_examples'
require 'fileutils'

module JsDuck

  # Performs the generation of docs web app.
  class WebWriter
    def initialize(relations, assets, parsed_files, opts)
      @relations = relations
      @assets = assets
      @parsed_files = parsed_files
      @opts = opts
    end

    def write
      clean_output_dir

      write_template_files
      write_app_data

      # class-formatting is done in parallel which breaks the links
      # between source files and classes. Therefore it MUST to be done
      # after writing sources which needs the links to work.
      write_source if @opts.source
      format_classes

      write_inline_examples if @opts.tests

      write_classes

      @assets.write
    end

    def write_template_files
      TemplateDir.new(@opts).write
      IndexHtml.new(@assets, @opts).write
    end

    def write_app_data
      AppData.new(@relations, @assets, @opts).write(@opts.output_dir+"/data.js")
    end

    def write_source
      source_writer = Source::Writer.new(@parsed_files)
      source_writer.write(@opts.output_dir + "/source")
    end

    def write_inline_examples
      examples = InlineExamples.new
      examples.add_classes(@relations)
      examples.add_guides(@assets.guides)
      examples.write(@opts.output_dir+"/inline-examples.js")
    end

    def write_classes
      class_writer = ClassWriter.new(Exporter::App, @relations, @opts)
      class_writer.write(@opts.output_dir+"/output", ".js")
    end

    # -- util routines --

    def clean_output_dir
      FileUtils.rm_rf(@opts.output_dir)
    end

    def format_classes
      BatchFormatter.format_all!(@relations, @assets, @opts)
    end

  end

end