Sha256: a518f0829d8cab011231404dcfd890c2bbe14a4a75f200f0d8d04ea13441dddb

Contents?: true

Size: 1.45 KB

Versions: 21

Compression:

Stored size: 1.45 KB

Contents

require 'jsduck/util/parallel'
require 'jsduck/logger'
require 'jsduck/util/json'
require 'jsduck/util/stdout'
require 'fileutils'

module JsDuck

  # Writes class data into files in JSON or JSONP format or to STDOUT.
  class ClassWriter
    def initialize(exporter_class, relations, opts)
      @relations = relations
      @exporter = exporter_class.new(relations, opts)
    end

    # Writes class data into given directory or STDOUT when dir == :stdout.
    #
    # Extension is either ".json" for normal JSON output
    # or ".js" for JsonP output.
    def write(dir, extension)
      dir == :stdout ? write_stdout : write_dir(dir, extension)
    end

    private

    def write_stdout
      json = Util::Parallel.map(@relations.classes) {|cls| @exporter.export(cls) }.compact
      Util::Stdout.add(json)
    end

    def write_dir(dir, extension)
      FileUtils.mkdir(dir) unless File.exists?(dir)

      Util::Parallel.each(@relations.classes) do |cls|
        filename = dir + "/" + cls[:name] + extension
        Logger.log("Writing docs", filename)
        json = @exporter.export(cls)
        # 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, cls[:name].gsub(/\./, "_"), json)
          else
            throw "Unexpected file extension: #{extension}"
          end
        end
      end
    end

  end

end

Version data entries

21 entries across 21 versions & 3 rubygems

Version Path
solvas-jsduck-6.0.0.30539 lib/jsduck/class_writer.rb
solvas-jsduck-6.0.0.9571 lib/jsduck/class_writer.rb
solvas-jsduck-6.0.0.6154 lib/jsduck/class_writer.rb
solvas-jsduck-6.0.0.4021 lib/jsduck/class_writer.rb
solvas-jsduck-6.0.0.2554 lib/jsduck/class_writer.rb
solvas-jsduck-6.0.0.1891 lib/jsduck/class_writer.rb
solvas-jsduck-6.0.0.beta.1888 lib/jsduck/class_writer.rb
jsduck-troopjs-0.0.10 lib/jsduck/class_writer.rb
jsduck-troopjs-0.0.9 lib/jsduck/class_writer.rb
jsduck-troopjs-0.0.8 lib/jsduck/class_writer.rb
jsduck-troopjs-0.0.7 lib/jsduck/class_writer.rb
jsduck-troopjs-0.0.5 lib/jsduck/class_writer.rb
jsduck-troopjs-0.0.4 lib/jsduck/class_writer.rb
jsduck-troopjs-0.0.3 lib/jsduck/class_writer.rb
jsduck-troopjs-0.0.1 lib/jsduck/class_writer.rb
jsduck-6.0.0beta lib/jsduck/class_writer.rb
jsduck-5.3.4 lib/jsduck/class_writer.rb
jsduck-5.3.3 lib/jsduck/class_writer.rb
jsduck-5.3.2 lib/jsduck/class_writer.rb
jsduck-5.3.1 lib/jsduck/class_writer.rb