Commit 85374db3 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Rename :xtypes field in export to :aliases.

parent 36bfd15d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ module JsDuck
        old[tag] = old[tag] + new[tag]
      end
      # Merge hashes of arrays
      [:xtypes, :meta].each do |tag|
      [:aliases, :meta].each do |tag|
        new[tag].each_pair do |key, contents|
          old[tag][key] = (old[tag][key] || []) + contents
        end
+10 −10
Original line number Diff line number Diff line
@@ -123,7 +123,7 @@ module JsDuck
        :extends => detect_extends(doc_map, code),
        :mixins => detect_list(:mixins, doc_map, code),
        :alternateClassNames => detect_list(:alternateClassNames, doc_map, code),
        :xtypes => detect_xtypes(doc_map, code),
        :aliases => detect_aliases(doc_map, code),
        :singleton => detect_singleton(doc_map, code),
        :requires => detect_list(:requires, doc_map, code),
        :uses => detect_list(:uses, doc_map, code),
@@ -330,28 +330,28 @@ module JsDuck
      end
    end

    def detect_xtypes(doc_map, code)
    def detect_aliases(doc_map, code)
      if doc_map[:xtype]
        {"widget" => doc_map[:xtype].map {|tag| tag[:name] } }
      elsif code[:xtype] || code[:alias]
        xtypes = {}
        aliases = {}
        (code[:xtype] || []).each do |a|
          if xtypes["widget"]
            xtypes["widget"] << a
          if aliases["widget"]
            aliases["widget"] << a
          else
            xtypes["widget"] = [a]
            aliases["widget"] = [a]
          end
        end
        (code[:alias] || []).each do |a|
          if a =~ /^([\w.]+)\.(\w+)$/
            if xtypes[$1]
              xtypes[$1] << $2
            if aliases[$1]
              aliases[$1] << $2
            else
              xtypes[$1] = [$2]
              aliases[$1] = [$2]
            end
          end
        end
        xtypes
        aliases
      else
        {}
      end
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ module JsDuck
        :cls => cls.full_name,
        :member => cls.short_name,
        :type => :class,
        :xtypes => cls[:xtypes]
        :aliases => cls[:aliases]
      }
    end

+173 −0
Original line number Diff line number Diff line
require "jsduck/aggregator"
require "jsduck/source_file"

describe JsDuck::Aggregator do

  def parse(string)
    agr = JsDuck::Aggregator.new
    agr.aggregate(JsDuck::SourceFile.new(string))
    agr.result
  end

  shared_examples_for "single alias" do
    it "detects alias" do
      @doc[:aliases].should == {"widget" => ["foo"]}
    end
  end

  shared_examples_for "multiple aliases" do
    it "collects all aliases together" do
      @doc[:aliases].should == {"widget" => ["foo", "bar"]}
    end
  end

  describe "class with @xtype" do
    before do
      @doc = parse(<<-EOS)[0]
        /**
         * @class MyClass
         * @xtype foo
         */
      EOS
    end
    it_should_behave_like "single alias"
  end

  describe "@xtype after @constructor" do
    before do
      @doc = parse(<<-EOS)[0]
        /**
         * @class MyClass
         * Comment here.
         * @constructor
         * This constructs the class
         * @xtype foo
         */
      EOS
    end
    it_should_behave_like "single alias"
  end

  describe "class with multiple @xtypes" do
    before do
      @doc = parse(<<-EOS)[0]
        /**
         * @class MyClass
         * @xtype foo
         * @xtype bar
         * Some documentation.
         */
      EOS
    end
    it_should_behave_like "multiple aliases"
  end

  describe "Ext.define() with simple alias" do
    before do
      @doc = parse(<<-EOS)[0]
        /** */
        Ext.define('MyClass', {
          alias: 'widget.foo'
        });
      EOS
    end
    it_should_behave_like "single alias"
  end

  describe "Ext.define() with @xtype overriding alias" do
    before do
      @doc = parse(<<-EOS)[0]
        /**
         * @xtype foo
         */
        Ext.define('MyClass', {
          alias: 'widget.xxx'
        });
      EOS
    end
    it_should_behave_like "single alias"
  end

  describe "Ext.define() with array of aliases" do
    before do
      @doc = parse(<<-EOS)[0]
        /** */
        Ext.define('MyClass', {
          alias: ['widget.foo', 'widget.bar']
        });
      EOS
    end
    it_should_behave_like "multiple aliases"
  end

  describe "Ext.define() with different kinds of aliases" do
    before do
      @doc = parse(<<-EOS)[0]
        /** */
        Ext.define('MyClass', {
          alias: ['store.json', 'store.ajax', 'component.myclass']
        });
      EOS
    end
    it "collects all aliases together" do
      @doc[:aliases].should == {"store" => ["json", "ajax"], "component" => ["myclass"]}
    end
  end

  describe "Ext.define() with xtype property" do
    before do
      @doc = parse(<<-EOS)[0]
        /** */
        Ext.define('MyClass', {
          xtype: 'foo'
        });
      EOS
    end
    it_should_behave_like "single alias"
  end

  describe "Ext.define() with array xtype property" do
    before do
      @doc = parse(<<-EOS)[0]
        /** */
        Ext.define('MyClass', {
          xtype: ['foo', 'bar']
        });
      EOS
    end
    it_should_behave_like "multiple aliases"
  end

  describe "Ext.define() with both xtype and alias" do
    before do
      @doc = parse(<<-EOS)[0]
        /** */
        Ext.define('MyClass', {
          xtype: 'foo',
          alias: 'widget.bar'
        });
      EOS
    end
    it_should_behave_like "multiple aliases"
  end

  describe "one class many times" do
    before do
      @doc = parse(<<-EOS)[0]
        /**
         * @class Foo
         */
        /**
         * @class Foo
         * @xtype foo
         */
        /**
         * @class Foo
         * @xtype bar
         */
      EOS
    end
    it_should_behave_like "multiple aliases"
  end

end
+7 −7
Original line number Diff line number Diff line
@@ -167,13 +167,13 @@ Ext.define('Docs.controller.Search', {
            // Otherwise search from just the member name (e.g. "focus" or "Component")
            var name = hasDot ? r.cls + (r.type === "class" ? "" : "." + r.member) : r.member;

            if (r.xtypes && this.matchXType(r.xtypes, reFull)) {
            if (r.aliases && this.matchAlias(r.aliases, reFull)) {
                results[xFull].push(r);
            }
            else if (reFull.test(name)) {
                results[r.type === "class" ? clsFull : mFull].push(r);
            }
            else if (r.xtypes && this.matchXType(r.xtypes, reBeg)) {
            else if (r.aliases && this.matchAlias(r.aliases, reBeg)) {
                results[xBeg].push(r);
            }
            else if (reBeg.test(name)) {
@@ -187,11 +187,11 @@ Ext.define('Docs.controller.Search', {
        return Ext.Array.flatten(results);
    },

    // true if xtype, ptype, ftype, etc matches regex
    matchXType: function(xtypes, regex) {
        for (var key in xtypes) {
            if (xtypes.hasOwnProperty(key)) {
                if (Ext.Array.some(xtypes[key], function(x) {return regex.test(x);})) {
    // true if alias matches regex
    matchAlias: function(aliases, regex) {
        for (var key in aliases) {
            if (aliases.hasOwnProperty(key)) {
                if (Ext.Array.some(aliases[key], function(x) {return regex.test(x);})) {
                    return true;
                }
            }
Loading