Commit 8af897f3 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Move all exporter classes to exporter/ subdir.

parent 4913e2ab
Loading
Loading
Loading
Loading

lib/jsduck/api_exporter.rb

deleted100644 → 0
+0 −48
Original line number Diff line number Diff line
require 'jsduck/json_duck'
require 'jsduck/class'

module JsDuck

  # Exporter for simple JSON format listing only class name and names
  # of all of its members.
  #
  # It produces the following structure:
  #
  # {
  #   :name => "Panel",
  #   :members => {
  #     :cfg => ["width", "height", "title"],
  #     :method => ["getWidth", "setWidth"],
  #     ...
  #   },
  #   :statics => { ... }
  # }
  #
  class ApiExporter
    def initialize(relations, opts)
      # All params ignored, they're present to be compatible with
      # other exporters.
    end

    # Returns hash of class name and member names
    def export(cls)
      {
        :name => cls[:name],
        :members => export_members(cls, false),
        :statics => export_members(cls, true),
      }
    end

    private

    def export_members(cls, static)
      h = {}
      Class.each_member_type do |tagname|
        h[tagname] = cls.find_members(:tagname => tagname, :static => static).map {|m| m[:name] }
      end
      h
    end

  end

end
+8 −8
Original line number Diff line number Diff line
@@ -19,10 +19,10 @@ require 'jsduck/class_writer'
require 'jsduck/source_writer'
require 'jsduck/app_data'
require 'jsduck/index_html'
require 'jsduck/api_exporter'
require 'jsduck/full_exporter'
require 'jsduck/app_exporter'
require 'jsduck/examples_exporter'
require 'jsduck/exporter/api'
require 'jsduck/exporter/full'
require 'jsduck/exporter/app'
require 'jsduck/exporter/examples'
require 'jsduck/inline_examples'
require 'jsduck/guide_writer'
require 'jsduck/stdout'
@@ -62,9 +62,9 @@ module JsDuck
        format_classes
        FileUtils.rm_rf(@opts.output_dir) unless @opts.output_dir == :stdout
        exporters = {
          :full => FullExporter,
          :api => ApiExporter,
          :examples => ExamplesExporter,
          :full => Exporter::Full,
          :api => Exporter::Api,
          :examples => ExamplesExporter::Examples,
        }
        cw = ClassWriter.new(exporters[@opts.export], @relations, @opts)
        cw.write(@opts.output_dir, ".json")
@@ -97,7 +97,7 @@ module JsDuck
          examples.write(@opts.output_dir+"/inline-examples.js")
        end

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

        @assets.write

lib/jsduck/app_exporter.rb

deleted100644 → 0
+0 −60
Original line number Diff line number Diff line
require 'jsduck/full_exporter'
require 'jsduck/renderer'
require 'jsduck/doc_formatter'

module JsDuck

  # Exports data for Docs app.
  class AppExporter < FullExporter
    def initialize(relations, opts)
      super(relations, opts)
      @renderer = Renderer.new(opts)
    end

    # Returns compacted class data hash which contains an additional
    # :html field with full HTML to show on class overview page.
    def export(cls)
      data = super(cls)
      data[:html] = @renderer.render(data)
      return compact(data)
    end

    private

    # removes extra data from export
    def compact(cls)
      cls.delete(:doc)
      cls[:members] = compact_members_group(cls[:members])
      cls[:statics] = compact_members_group(cls[:statics])
      cls[:files] = compact_files(cls[:files])
      cls
    end

    def compact_members_group(group)
      c_group = {}
      group.each_pair do |type, members|
        c_group[type] = members.map {|m| compact_member(m) }
      end
      c_group
    end

    def compact_member(m)
      m_copy = {}
      [:name, :tagname, :owner, :meta, :id].each do |key|
        m_copy[key] = m[key]
      end
      m_copy
    end

    # 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.
    def compact_files(files)
      files.map do |f|
        {:filename => File.basename(f[:filename]), :href => f[:href]}
      end
    end

  end

end

lib/jsduck/examples_exporter.rb

deleted100644 → 0
+0 −56
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
+50 −0
Original line number Diff line number Diff line
require 'jsduck/json_duck'
require 'jsduck/class'

module JsDuck
  module Exporter

    # Exporter for simple JSON format listing only class name and names
    # of all of its members.
    #
    # It produces the following structure:
    #
    # {
    #   :name => "Panel",
    #   :members => {
    #     :cfg => ["width", "height", "title"],
    #     :method => ["getWidth", "setWidth"],
    #     ...
    #   },
    #   :statics => { ... }
    # }
    #
    class Api
      def initialize(relations, opts)
        # All params ignored, they're present to be compatible with
        # other exporters.
      end

      # Returns hash of class name and member names
      def export(cls)
        {
          :name => cls[:name],
          :members => export_members(cls, false),
          :statics => export_members(cls, true),
        }
      end

      private

      def export_members(cls, static)
        h = {}
        Class.each_member_type do |tagname|
          h[tagname] = cls.find_members(:tagname => tagname, :static => static).map {|m| m[:name] }
        end
        h
      end

    end

  end
end
Loading