Sha256: 64316ec272d11d4665310638e822c098aed26339ecfd8f2dcaf7f14ce87e2519

Contents?: true

Size: 1.95 KB

Versions: 12

Compression:

Stored size: 1.95 KB

Contents

require 'jsduck/util/json'
require 'jsduck/util/null_object'
require 'jsduck/util/parallel'
require 'jsduck/logger'

module JsDuck
  module Process

    # Reads in JSDuck exports of different versions of docs.
    class Importer
      # Reads in data for all versions, returning array of
      # version/class-data pairs.  We don't use a hash to preserve the
      # order of versions (from oldest to newest).
      def import(versions)
        versions.map do |ver|
          {
            :version => ver[:version],
            :classes => ver[:path] ? read(ver) : current_version,
          }
        end
      end

      private

      def current_version
        Util::NullObject.new(:[] => Util::NullObject.new(:[] => true))
      end

      # Reads in data from all .json files in directory
      def read(ver)
        ensure_correct_format(ver[:path])

        # Map list of files into pairs of (classname, members-hash)
        pairs = Util::Parallel.map(Dir[ver[:path] + "/*.json"]) do |filename|
          Logger.log("Importing #{ver[:version]}", filename)
          json = Util::Json.read(filename)
          [json["name"],  members_id_index(json)]
        end

        # Turn key-value pairs array into hash
        return Hash[ pairs ]
      end

      def ensure_correct_format(path)
        # Read first JSON file in import dir
        json = Util::Json.read(Dir[path + "/*.json"].first)

        unless correct_format?(json)
          Logger.fatal("Bad format for importing: #{path}")
          Logger.fatal("Export format changed in 5.0.0 beta 2.")
          Logger.fatal("Maybe you forgot to re-generate the exports with new JSDuck.")
          exit(1)
        end
      end

      def correct_format?(json)
        json["members"].is_a?(Array)
      end

      # creates index of all class members
      def members_id_index(json)
        index = {}
        json["members"].each do |m|
          index[m["id"]] = true
        end
        index
      end

    end

  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
jsduck-5.3.4 lib/jsduck/process/importer.rb
jsduck-5.3.3 lib/jsduck/process/importer.rb
jsduck-5.3.2 lib/jsduck/process/importer.rb
jsduck-5.3.1 lib/jsduck/process/importer.rb
jsduck-5.3.0 lib/jsduck/process/importer.rb
jsduck-5.2.0 lib/jsduck/process/importer.rb
jsduck-5.1.0 lib/jsduck/process/importer.rb
jsduck-5.0.1 lib/jsduck/process/importer.rb
jsduck-5.0.0 lib/jsduck/process/importer.rb
jsduck-5.0.0.beta5 lib/jsduck/process/importer.rb
jsduck-5.0.0.beta4 lib/jsduck/process/importer.rb
jsduck-5.0.0.beta3 lib/jsduck/process/importer.rb