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

Generate @since tags for members.

parent f6e1305e
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ module JsDuck
    end

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

    # Reads in data from all .json files in directory
@@ -55,12 +55,26 @@ module JsDuck
    # classes/members.
    def generate_since_tags(versions, relations)
      relations.each do |cls|
        cls[:meta][:since] = available_since(versions, cls)
        cls[:meta][:since] = class_since(versions, cls)
        cls.all_local_members.each do |m|
          m[:meta][:since] = member_since(versions, cls, m)
        end
      end
    end

    def member_since(versions, cls, m)
      versions.each do |ver|
        c = ver[:classes][cls[:name]]
        return ver[:version] if c && c[m[:id]]
        cls[:alternateClassNames].each do |name|
          c = ver[:classes][name]
          return ver[:version] if c && c[m[:id]]
        end
      end
    end

    # Returns name of the version since which the class is available
    def available_since(versions, cls)
    def class_since(versions, cls)
      versions.each do |ver|
        return ver[:version] if ver[:classes][cls[:name]]
        cls[:alternateClassNames].each do |name|
+22 −4
Original line number Diff line number Diff line
@@ -6,12 +6,12 @@ describe "JsDuck::OldVersions#generate_since_tags" do
    @versions = [
      {
        :version => "1.0", :classes => {
          "VeryOldClass" => {},
          "VeryOldClass" => {"cfg-foo" => true},
        },
      },
      {
        :version => "2.0", :classes => {
          "VeryOldClass" => {},
          "VeryOldClass" => {"cfg-foo" => true, "cfg-bar" => true},
          "OldClass" => {},
          "ClassWithOldName" => {},
        },
@@ -20,12 +20,18 @@ describe "JsDuck::OldVersions#generate_since_tags" do
        :version => "3.0", :classes => JsDuck::OldVersions.current_version
      }
    ]

    @relations = [
      {:name => "VeryOldClass", :meta => {}, :alternateClassNames => []},
      {:name => "VeryOldClass", :meta => {}, :alternateClassNames => [], :members => {
          :cfg => [{:id => "cfg-foo", :meta => {}}],
          :method => [{:id => "cfg-bar", :meta => {}}],
          :event => [{:id => "event-baz", :meta => {}}],
        }},
      {:name => "OldClass", :meta => {}, :alternateClassNames => []},
      {:name => "NewClass", :meta => {}, :alternateClassNames => []},
      {:name => "ClassWithNewName", :meta => {}, :alternateClassNames => ["ClassWithOldName"]},
    ]
    ].map {|cfg| JsDuck::Class.new(cfg) }

    JsDuck::OldVersions.generate_since_tags(@versions, @relations)
  end

@@ -45,4 +51,16 @@ describe "JsDuck::OldVersions#generate_since_tags" do
    @relations[3][:meta][:since].should == "2.0"
  end

  it "adds @since 1.0 to VeryOldClass#cfg-foo" do
    @relations[0][:members][:cfg][0][:meta][:since].should == "1.0"
  end

  it "adds @since 2.0 to VeryOldClass#method-bar" do
    @relations[0][:members][:method][0][:meta][:since].should == "2.0"
  end

  it "adds @since 3.0 to VeryOldClass#event-baz" do
    @relations[0][:members][:event][0][:meta][:since].should == "3.0"
  end

end