Loading lib/jsduck/process/versions.rb +24 −19 Original line number Diff line number Diff line Loading @@ -16,7 +16,8 @@ module JsDuck # Loads in exported docs and generates @since and @new tags. def process_all! if @opts[:imports].length > 0 generate_since_tags(@importer.import(@opts[:imports])) @versions = @importer.import(@opts[:imports]) generate_since_tags end end Loading @@ -24,54 +25,58 @@ module JsDuck # Using the imported versions data, adds @since tags to all # classes/members/params. def generate_since_tags(versions) new_versions = build_new_versions_map(versions) def generate_since_tags @relations.each do |cls| v = cls[:since] || class_since(versions, cls) v = cls[:since] || class_since(cls) cls[:since] = v cls[:new] = true if new_versions[v] cls[:new] = true if is_new?(v) cls.all_local_members.each do |m| member_version = m[:since] || member_since(versions, cls, m) member_version = m[:since] || member_since(cls, m) if !m[:since] Array(m[:params]).each_with_index do |p, i| v = param_since(versions, cls, m, i) v = param_since(cls, m, i) if v != member_version p[:since] = v p[:new] = true if new_versions[v] p[:new] = true if is_new?(v) end end end m[:since] = member_version m[:new] = true if new_versions[member_version] m[:new] = true if is_new?(member_version) end end end # Should items introduced in given version be marked as new? def is_new?(version_nr) @new_versions = new_versions_map unless @new_versions @new_versions[version_nr] end # Generates a lookup table of versions that we are going to label # with @new tags. By default we use the latest version, otherwise # use all versions since the latest. def build_new_versions_map(versions) def new_versions_map new_versions = {} if @opts[:new_since] versions.map {|v| v[:version] }.each do |v| @versions.map {|v| v[:version] }.each do |v| if v == @opts[:new_since] || !new_versions.empty? new_versions[v] = true end end else new_versions[versions.last[:version]] = true new_versions[@versions.last[:version]] = true end new_versions end def param_since(versions, cls, m, i) versions.each do |ver| def param_since(cls, m, i) @versions.each do |ver| c = ver[:classes][cls[:name]] return ver[:version] if c && has_param?(c[m[:id]], i) cls[:alternateClassNames].each do |name| Loading @@ -87,8 +92,8 @@ module JsDuck member && member.respond_to?(:length) && member.length > param_index end def member_since(versions, cls, m) versions.each do |ver| def member_since(cls, m) @versions.each do |ver| c = ver[:classes][cls[:name]] return ver[:version] if c && c[m[:id]] cls[:alternateClassNames].each do |name| Loading @@ -99,8 +104,8 @@ module JsDuck end # Returns name of the version since which the class is available def class_since(versions, cls) versions.each do |ver| def class_since(cls) @versions.each do |ver| return ver[:version] if ver[:classes][cls[:name]] cls[:alternateClassNames].each do |name| return ver[:version] if ver[:classes][name] Loading Loading
lib/jsduck/process/versions.rb +24 −19 Original line number Diff line number Diff line Loading @@ -16,7 +16,8 @@ module JsDuck # Loads in exported docs and generates @since and @new tags. def process_all! if @opts[:imports].length > 0 generate_since_tags(@importer.import(@opts[:imports])) @versions = @importer.import(@opts[:imports]) generate_since_tags end end Loading @@ -24,54 +25,58 @@ module JsDuck # Using the imported versions data, adds @since tags to all # classes/members/params. def generate_since_tags(versions) new_versions = build_new_versions_map(versions) def generate_since_tags @relations.each do |cls| v = cls[:since] || class_since(versions, cls) v = cls[:since] || class_since(cls) cls[:since] = v cls[:new] = true if new_versions[v] cls[:new] = true if is_new?(v) cls.all_local_members.each do |m| member_version = m[:since] || member_since(versions, cls, m) member_version = m[:since] || member_since(cls, m) if !m[:since] Array(m[:params]).each_with_index do |p, i| v = param_since(versions, cls, m, i) v = param_since(cls, m, i) if v != member_version p[:since] = v p[:new] = true if new_versions[v] p[:new] = true if is_new?(v) end end end m[:since] = member_version m[:new] = true if new_versions[member_version] m[:new] = true if is_new?(member_version) end end end # Should items introduced in given version be marked as new? def is_new?(version_nr) @new_versions = new_versions_map unless @new_versions @new_versions[version_nr] end # Generates a lookup table of versions that we are going to label # with @new tags. By default we use the latest version, otherwise # use all versions since the latest. def build_new_versions_map(versions) def new_versions_map new_versions = {} if @opts[:new_since] versions.map {|v| v[:version] }.each do |v| @versions.map {|v| v[:version] }.each do |v| if v == @opts[:new_since] || !new_versions.empty? new_versions[v] = true end end else new_versions[versions.last[:version]] = true new_versions[@versions.last[:version]] = true end new_versions end def param_since(versions, cls, m, i) versions.each do |ver| def param_since(cls, m, i) @versions.each do |ver| c = ver[:classes][cls[:name]] return ver[:version] if c && has_param?(c[m[:id]], i) cls[:alternateClassNames].each do |name| Loading @@ -87,8 +92,8 @@ module JsDuck member && member.respond_to?(:length) && member.length > param_index end def member_since(versions, cls, m) versions.each do |ver| def member_since(cls, m) @versions.each do |ver| c = ver[:classes][cls[:name]] return ver[:version] if c && c[m[:id]] cls[:alternateClassNames].each do |name| Loading @@ -99,8 +104,8 @@ module JsDuck end # Returns name of the version since which the class is available def class_since(versions, cls) versions.each do |ver| def class_since(cls) @versions.each do |ver| return ver[:version] if ver[:classes][cls[:name]] cls[:alternateClassNames].each do |name| return ver[:version] if ver[:classes][name] Loading