Loading lib/jsduck.rb +6 −5 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ require 'jsduck/lexer' require 'jsduck/parser' require 'jsduck/doc_parser' require 'jsduck/merger' require 'jsduck/class' require 'jsduck/tree' require 'jsduck/page' require 'json' Loading Loading @@ -46,13 +47,13 @@ module JsDuck docs end # Filters out class-documentations # Filters out class-documentations, converting them to Class objects. # For each other type, prints a warning message and discards it def JsDuck.filter_classes(docs) classes = [] docs.each do |d| if d[:tagname] == :class classes << d classes << Class.new(d) else puts "Warning: Ignoring " + d[:tagname].to_s + ": " + (d[:name] || "") end Loading Loading @@ -129,8 +130,8 @@ if __FILE__ == $0 then exit(1) end docs = JsDuck.filter_classes(JsDuck.parse_files(input_files, verbose)) JsDuck.write_tree(output_dir+"/tree.js", docs) JsDuck.write_pages(output_dir, docs, verbose) classes = JsDuck.filter_classes(JsDuck.parse_files(input_files, verbose)) JsDuck.write_tree(output_dir+"/tree.js", classes) JsDuck.write_pages(output_dir, classes, verbose) end lib/jsduck/class.rb 0 → 100644 +53 −0 Original line number Diff line number Diff line module JsDuck # Encapsulates class documentation and provides some commonly needed # methods on it. Otherwise it acts like Hash, providing the [] # method. class Class def initialize(doc) @doc = doc end def [](key) @doc[key] end # A way to access full class name with similar syntax to # package_name and short_name def full_name @doc[:name] end # Returns package name of the class. # # That is the namespace part of full class name. # # For example "My.package" is package_name of "My.package.Class" def package_name Class.package_name(@doc[:name]) end # Returns last part of full class name # # For example for "My.package.Class" it is "Class" def short_name Class.short_name(@doc[:name]) end # Static methods # Utility method that given a package or class name finds the name # of its parent package. def self.package_name(name) parts = name.split(/\./) parts.slice(0, parts.length - 1).join(".") end # Utility method that given full package or class name extracts # the last part of the name. def self.short_name(name) name.split(/\./).last end end end lib/jsduck/page.rb +3 −6 Original line number Diff line number Diff line Loading @@ -17,18 +17,15 @@ module JsDuck end def heading "<h1>Class <a href='source/sample.html#cls-#{@cls[:name]}'>#{@cls[:name]}</a></h1>" "<h1>Class <a href='source/sample.html#cls-#{@cls.full_name}'>#{@cls.full_name}</a></h1>" end def abstract parts = @cls[:name].split(/\./) namespace = parts.slice(0, parts.length - 1).join(".") short_name = parts.last [ "<table cellspacing='0'>", abstract_row("Package:", namespace), abstract_row("Package:", @cls.package_name), abstract_row("Defined In:", "sample.js"), abstract_row("Class:", "<a href='source/sample.html#cls-#{@cls[:name]}'>#{short_name}</a>"), abstract_row("Class:", "<a href='source/sample.html#cls-#{@cls.full_name}'>#{@cls.short_name}</a>"), abstract_row("Extends:", @cls[:extends] || "Object"), "</table>", ].join("\n") Loading lib/jsduck/tree.rb +6 −27 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ module JsDuck # When package for the class exists, add class node to that # package; otherwise create the package first. def add_class(cls) parent_name = package_name(cls[:name]) parent_name = cls.package_name parent = @packages[parent_name] || add_package(parent_name) parent[:children] << class_node(cls) end Loading @@ -57,7 +57,7 @@ module JsDuck # Note that the root package always exists, so we can safely # recurse knowing we will eventually stop. def add_package(name) parent_name = package_name(name) parent_name = Class.package_name(name) parent = @packages[parent_name] || add_package(parent_name) package = package_node(name) parent[:children] << package Loading @@ -65,33 +65,12 @@ module JsDuck package end # Given full class name, returns package name # # For example: # My.package.Class => My.package # My.package => My # My => "" def package_name(name) parts = name.split(/\./) parts.slice(0, parts.length - 1).join(".") end # Given full class name, returns class name # # For example: # My.package.Class => Class # My.package => package # My => My def class_name(name) name.split(/\./).last end # Given full doc object for class creates class node def class_node(cls) return { :href => "output/#{cls[:name]}.html", :text => class_name(cls[:name]), :id => cls[:name], :href => "output/#{cls.full_name}.html", :text => cls.short_name, :id => cls.full_name, :isClass => true, :iconCls => cls[:singleton] ? "icon-static" : "icon-cls", :cls => "cls", Loading @@ -103,7 +82,7 @@ module JsDuck def package_node(name) return { :id => "pkg-#{name}", :text => class_name(name), :text => Class.short_name(name), :iconCls => "icon-pkg", :cls => "package", :singleClickExpand => true, Loading test/tc_tree.rb +3 −2 Original line number Diff line number Diff line require "jsduck/class" require "jsduck/tree" require "test/unit" Loading @@ -5,8 +6,8 @@ class TestTree < Test::Unit::TestCase def test_create output = JsDuck::Tree.new.create([ {:tagname => :class, :name => "SamplePackage.SampleClass"}, {:tagname => :class, :name => "SamplePackage.Singleton", :singleton => true}, JsDuck::Class.new({:tagname => :class, :name => "SamplePackage.SampleClass"}), JsDuck::Class.new({:tagname => :class, :name => "SamplePackage.Singleton", :singleton => true}), ]) assert_equal({ :id => "apidocs", Loading Loading
lib/jsduck.rb +6 −5 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ require 'jsduck/lexer' require 'jsduck/parser' require 'jsduck/doc_parser' require 'jsduck/merger' require 'jsduck/class' require 'jsduck/tree' require 'jsduck/page' require 'json' Loading Loading @@ -46,13 +47,13 @@ module JsDuck docs end # Filters out class-documentations # Filters out class-documentations, converting them to Class objects. # For each other type, prints a warning message and discards it def JsDuck.filter_classes(docs) classes = [] docs.each do |d| if d[:tagname] == :class classes << d classes << Class.new(d) else puts "Warning: Ignoring " + d[:tagname].to_s + ": " + (d[:name] || "") end Loading Loading @@ -129,8 +130,8 @@ if __FILE__ == $0 then exit(1) end docs = JsDuck.filter_classes(JsDuck.parse_files(input_files, verbose)) JsDuck.write_tree(output_dir+"/tree.js", docs) JsDuck.write_pages(output_dir, docs, verbose) classes = JsDuck.filter_classes(JsDuck.parse_files(input_files, verbose)) JsDuck.write_tree(output_dir+"/tree.js", classes) JsDuck.write_pages(output_dir, classes, verbose) end
lib/jsduck/class.rb 0 → 100644 +53 −0 Original line number Diff line number Diff line module JsDuck # Encapsulates class documentation and provides some commonly needed # methods on it. Otherwise it acts like Hash, providing the [] # method. class Class def initialize(doc) @doc = doc end def [](key) @doc[key] end # A way to access full class name with similar syntax to # package_name and short_name def full_name @doc[:name] end # Returns package name of the class. # # That is the namespace part of full class name. # # For example "My.package" is package_name of "My.package.Class" def package_name Class.package_name(@doc[:name]) end # Returns last part of full class name # # For example for "My.package.Class" it is "Class" def short_name Class.short_name(@doc[:name]) end # Static methods # Utility method that given a package or class name finds the name # of its parent package. def self.package_name(name) parts = name.split(/\./) parts.slice(0, parts.length - 1).join(".") end # Utility method that given full package or class name extracts # the last part of the name. def self.short_name(name) name.split(/\./).last end end end
lib/jsduck/page.rb +3 −6 Original line number Diff line number Diff line Loading @@ -17,18 +17,15 @@ module JsDuck end def heading "<h1>Class <a href='source/sample.html#cls-#{@cls[:name]}'>#{@cls[:name]}</a></h1>" "<h1>Class <a href='source/sample.html#cls-#{@cls.full_name}'>#{@cls.full_name}</a></h1>" end def abstract parts = @cls[:name].split(/\./) namespace = parts.slice(0, parts.length - 1).join(".") short_name = parts.last [ "<table cellspacing='0'>", abstract_row("Package:", namespace), abstract_row("Package:", @cls.package_name), abstract_row("Defined In:", "sample.js"), abstract_row("Class:", "<a href='source/sample.html#cls-#{@cls[:name]}'>#{short_name}</a>"), abstract_row("Class:", "<a href='source/sample.html#cls-#{@cls.full_name}'>#{@cls.short_name}</a>"), abstract_row("Extends:", @cls[:extends] || "Object"), "</table>", ].join("\n") Loading
lib/jsduck/tree.rb +6 −27 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ module JsDuck # When package for the class exists, add class node to that # package; otherwise create the package first. def add_class(cls) parent_name = package_name(cls[:name]) parent_name = cls.package_name parent = @packages[parent_name] || add_package(parent_name) parent[:children] << class_node(cls) end Loading @@ -57,7 +57,7 @@ module JsDuck # Note that the root package always exists, so we can safely # recurse knowing we will eventually stop. def add_package(name) parent_name = package_name(name) parent_name = Class.package_name(name) parent = @packages[parent_name] || add_package(parent_name) package = package_node(name) parent[:children] << package Loading @@ -65,33 +65,12 @@ module JsDuck package end # Given full class name, returns package name # # For example: # My.package.Class => My.package # My.package => My # My => "" def package_name(name) parts = name.split(/\./) parts.slice(0, parts.length - 1).join(".") end # Given full class name, returns class name # # For example: # My.package.Class => Class # My.package => package # My => My def class_name(name) name.split(/\./).last end # Given full doc object for class creates class node def class_node(cls) return { :href => "output/#{cls[:name]}.html", :text => class_name(cls[:name]), :id => cls[:name], :href => "output/#{cls.full_name}.html", :text => cls.short_name, :id => cls.full_name, :isClass => true, :iconCls => cls[:singleton] ? "icon-static" : "icon-cls", :cls => "cls", Loading @@ -103,7 +82,7 @@ module JsDuck def package_node(name) return { :id => "pkg-#{name}", :text => class_name(name), :text => Class.short_name(name), :iconCls => "icon-pkg", :cls => "package", :singleClickExpand => true, Loading
test/tc_tree.rb +3 −2 Original line number Diff line number Diff line require "jsduck/class" require "jsduck/tree" require "test/unit" Loading @@ -5,8 +6,8 @@ class TestTree < Test::Unit::TestCase def test_create output = JsDuck::Tree.new.create([ {:tagname => :class, :name => "SamplePackage.SampleClass"}, {:tagname => :class, :name => "SamplePackage.Singleton", :singleton => true}, JsDuck::Class.new({:tagname => :class, :name => "SamplePackage.SampleClass"}), JsDuck::Class.new({:tagname => :class, :name => "SamplePackage.Singleton", :singleton => true}), ]) assert_equal({ :id => "apidocs", Loading