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

Merge branch 'doctests'

parents ea808d6b 9c3dfb6a
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@ class JsDuckRunner
      "--footer", "Ext JS 4.0 Docs - Generated with <a href='https://github.com/senchalabs/jsduck'>JSDuck</a> {VERSION}." +
                  " <a href='http://www.sencha.com/legal/terms-of-use/'>Terms of Use</a>",
      "--ignore-global",
      "--no-warnings",
      "--warnings", "-all",
      "--images", "#{EXT_BUILD}/docs/doc-resources",
      "--local-storage-db", "ext-4",
      "--output", "#{OUT_DIR}",
@@ -220,6 +220,17 @@ task :ext4 => :sass do
  runner.run
end

desc "Run JSDuck with example test hacks"
task :tests => :sass do |t, args|
  runner = JsDuckRunner.new
  runner.add_ext4
  runner.add_options("--tests")
  runner.add_debug
  runner.run

  system("cp -r #{EXT_BUILD} #{OUT_DIR}/extjs-build")
end

desc "Run JSDuck on Ext JS from SDK repo (for internal use at Sencha)"
task :sdk => :sass do
  runner = JsDuckRunner.new
+21 −1
Original line number Diff line number Diff line
@@ -20,6 +20,10 @@ require 'jsduck/index_html'
require 'jsduck/api_exporter'
require 'jsduck/full_exporter'
require 'jsduck/app_exporter'
require 'jsduck/examples_exporter'
require 'jsduck/inline_examples'
require 'jsduck/guide_writer'
require 'jsduck/stdout'
require 'fileutils'

module JsDuck
@@ -53,9 +57,18 @@ module JsDuck
      if @opts.export
        format_classes
        FileUtils.rm_rf(@opts.output_dir) unless @opts.output_dir == :stdout
        exporters = {:full => FullExporter, :api => ApiExporter}
        exporters = {
          :full => FullExporter,
          :api => ApiExporter,
          :examples => ExamplesExporter,
        }
        cw = ClassWriter.new(exporters[@opts.export], @relations, @opts)
        cw.write(@opts.output_dir, ".json")
        if @opts.export == :examples
          gw = GuideWriter.new(exporters[@opts.export], @assets.guides, @opts)
          gw.write(@opts.output_dir, ".json")
        end
        Stdout.instance.flush
      else
        FileUtils.rm_rf(@opts.output_dir)
        TemplateDir.new(@opts).write
@@ -73,6 +86,13 @@ module JsDuck
        end
        format_classes

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

        cw = ClassWriter.new(AppExporter, @relations, @opts)
        cw.write(@opts.output_dir+"/output", ".js")

+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ module JsDuck
          :examples => @assets.examples.to_array,
          :search => SearchData.new.create(@relations.classes, @assets),
          :stats => @opts.stats ? Stats.new.create(@relations.classes) : [],
          :tests => @opts.tests,
          :signatures => MetaTagRegistry.instance.signatures,
          :localStorageDb => @opts.local_storage_db,
          :showPrintButton => @opts.seo,
+12 −9
Original line number Diff line number Diff line
require 'jsduck/parallel_wrap'
require 'jsduck/logger'
require 'jsduck/json_duck'
require 'jsduck/stdout'
require 'fileutils'

module JsDuck
@@ -24,8 +24,8 @@ module JsDuck
    private

    def write_stdout
      json = @parallel.map(@relations.classes) {|cls| @exporter.export(cls) }
      puts JsonDuck.generate(json)
      json = @parallel.map(@relations.classes) {|cls| @exporter.export(cls) }.compact
      Stdout.instance.add(json)
    end

    def write_dir(dir, extension)
@@ -34,6 +34,8 @@ module JsDuck
        filename = dir + "/" + cls[:name] + extension
        Logger.instance.log("Writing docs", filename)
        json = @exporter.export(cls)
        # skip file if exporter returned nil
        if json
          if extension == ".json"
            JsonDuck.write_json(filename, json)
          elsif extension == ".js"
@@ -43,6 +45,7 @@ module JsDuck
          end
        end
      end
    end

  end

+56 −0
Original line number Diff line number Diff line
require 'jsduck/inline_examples'

module JsDuck

  # Exporter for inline examples.
  #
  # It produces the following structure:
  #
  # {
  #   :type => :class,  # can also be :guide
  #   :name => "Panel",
  #   :examples => [
  #     {:code => "bla bla", :options => {}},
  #     {:code => "bla bla", :options => {"raw" => true}},
  #     ...
  #   ]
  # }
  #
  class ExamplesExporter
    def initialize(relations, opts)
      # All params ignored, they're present to be compatible with
      # other exporters.
      @inline_examples = InlineExamples.new
    end

    # Returns hash of class name and inline examples
    def export(cls)
      examples = @inline_examples.extract(cls[:doc])
      if examples.length > 0
        {
          :type => :class,
          :name => cls[:name],
          :examples => examples,
        }
      else
        nil
      end
    end

    # Returns hash of guide name and inline examples
    def export_guide(guide)
      examples = @inline_examples.extract(guide[:html] || "")
      if examples.length > 0
        {
          :type => :guide,
          :name => guide["name"],
          :examples => examples,
        }
      else
        nil
      end
    end

  end

end
Loading