Commit 840e725f authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Merge Exporter class into Json- and AppExporter classes.

The Exporter performed two different tasks, which are now
better divided between two classes.

JsonPExporter is now AppExporter - the purpose of it is to
generate data for docs app, the actual format is decided by
ClassWriter.
parent 4e90812a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ require 'jsduck/app_data'
require 'jsduck/index_html'
require 'jsduck/api_exporter'
require 'jsduck/json_exporter'
require 'jsduck/json_p_exporter'
require 'jsduck/app_exporter'
require 'fileutils'

module JsDuck
@@ -83,7 +83,7 @@ module JsDuck
        SourceWriter.write_all(parsed_files, @opts.output_dir + "/source")
        format_classes

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

        @guides.write(@opts.output_dir+"/guides")
+21 −19
Original line number Diff line number Diff line
require 'jsduck/json_exporter'
require 'jsduck/renderer'
require 'jsduck/doc_formatter'

module JsDuck

  # Export class data as hash with :cfg being replace with :cfgs and
  # including all the inherited members too.  Same for :properties,
  # :methods, and :events.
  class Exporter
    def initialize(relations)
      @relations = relations
  # Exports data for Docs app.
  class AppExporter < JsonExporter
    def initialize(relations, opts)
      super(relations, opts)

      @renderer = Renderer.new
      # Inject formatter to all meta-tags.
      doc_formatter = DocFormatter.new(relations, opts)
      opts.meta_tags.each {|tag| tag.formatter = doc_formatter }
      @renderer.meta_tags = opts.meta_tags
    end

    # Returns all data in Class object as hash.
    # Returns compacted class data hash which contains an additional
    # :html field with full HTML to show on class overview page.
    def export(cls)
      h = cls.to_hash
      h[:members] = {}
      Class.default_members_hash.each_key do |key|
        h[:members][key] = cls.members(key)
        h[:statics][key] = cls.members(key, :statics)
      end
      h[:component] = cls.inherits_from?("Ext.Component")
      h[:superclasses] = cls.superclasses.collect {|c| c.full_name }
      h[:subclasses] = @relations.subclasses(cls).collect {|c| c.full_name }
      h[:mixedInto] = @relations.mixed_into(cls).collect {|c| c.full_name }
      h[:allMixins] = cls.all_mixins.collect {|c| c.full_name }
      h
      data = super(cls)
      data[:html] = @renderer.render(data)
      return compact(data)
    end

    private

    # removes extra data from export
    def compact(cls)
      cls.delete(:doc)
+16 −5
Original line number Diff line number Diff line
require 'jsduck/exporter'
require 'jsduck/class'

module JsDuck

  # Exporter for json format
  class JsonExporter
    def initialize(relations, opts)
      @exporter = Exporter.new(relations)
      @relations = relations
    end

    # Returns full class data hash
    def export
      @exporter.export(cls)
    # Returns all data in Class object as hash.
    def export(cls)
      h = cls.to_hash
      h[:members] = {}
      Class.default_members_hash.each_key do |key|
        h[:members][key] = cls.members(key)
        h[:statics][key] = cls.members(key, :statics)
      end
      h[:component] = cls.inherits_from?("Ext.Component")
      h[:superclasses] = cls.superclasses.collect {|c| c.full_name }
      h[:subclasses] = @relations.subclasses(cls).collect {|c| c.full_name }
      h[:mixedInto] = @relations.mixed_into(cls).collect {|c| c.full_name }
      h[:allMixins] = cls.all_mixins.collect {|c| c.full_name }
      h
    end

  end

lib/jsduck/json_p_exporter.rb

deleted100644 → 0
+0 −28
Original line number Diff line number Diff line
require 'jsduck/exporter'
require 'jsduck/renderer'
require 'jsduck/doc_formatter'

module JsDuck

  # Exporter for JsonP format
  class JsonPExporter
    def initialize(relations, opts)
      @exporter = Exporter.new(relations)

      @renderer = Renderer.new
      # Inject formatter to all meta-tags.
      doc_formatter = DocFormatter.new(@relations, @opts)
      @opts.meta_tags.each {|tag| tag.formatter = doc_formatter }
      renderer.meta_tags = @opts.meta_tags
    end

    # Returns compacted class data hash
    def export(cls)
      data = @exporter.export(cls)
      data[:html] = @renderer.render(data)
      return @exporter.compact(data)
    end

  end

end