Loading lib/jsduck/aggregator.rb +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading lib/jsduck/merger.rb +10 −10 Original line number Diff line number Diff line Loading @@ -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), Loading Loading @@ -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 Loading lib/jsduck/search_data.rb +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ module JsDuck :cls => cls.full_name, :member => cls.short_name, :type => :class, :xtypes => cls[:xtypes] :aliases => cls[:aliases] } end Loading spec/aggregator_aliases_spec.rb 0 → 100644 +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 template/app/controller/Search.js +7 −7 Original line number Diff line number Diff line Loading @@ -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)) { Loading @@ -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 Loading
lib/jsduck/aggregator.rb +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
lib/jsduck/merger.rb +10 −10 Original line number Diff line number Diff line Loading @@ -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), Loading Loading @@ -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 Loading
lib/jsduck/search_data.rb +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ module JsDuck :cls => cls.full_name, :member => cls.short_name, :type => :class, :xtypes => cls[:xtypes] :aliases => cls[:aliases] } end Loading
spec/aggregator_aliases_spec.rb 0 → 100644 +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
template/app/controller/Search.js +7 −7 Original line number Diff line number Diff line Loading @@ -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)) { Loading @@ -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