lib/yard/templates/helpers/base_helper.rb in yard-0.5.8 vs lib/yard/templates/helpers/base_helper.rb in yard-0.6.0
- old
+ new
@@ -1,35 +1,85 @@
module YARD::Templates::Helpers
+ # The base helper module included in all templates.
module BaseHelper
attr_accessor :object, :serializer
+ # @group Managing Global Template State
+
+ # An object that keeps track of global state throughout the entire template
+ # rendering process (including any sub-templates).
+ #
+ # @return [OpenStruct] a struct object that stores state
+ # @since 0.6.0
+ def globals; options[:__globals] end
+
+ # @group Running the Verifier
+
+ # Runs a list of objects against the {Verifier} object passed into the
+ # template and returns the subset of verified objects.
+ #
+ # @param [Array<CodeObjects::Base>] list a list of code objects
+ # @return [Array<CodeObjects::Base>] a list of code objects that match
+ # the verifier. If no verifier is supplied, all objects are returned.
def run_verifier(list)
- return list unless options[:verifier]
- list.reject {|item| options[:verifier].call(item).is_a?(FalseClass) }
+ options[:verifier] ? options[:verifier].run(list) : list
end
- # This is used a lot by the HtmlHelper and there should
+ # @group Escaping Text
+
+ # Escapes text. This is used a lot by the HtmlHelper and there should
# be some helper to "clean up" text for whatever, this is it.
def h(text)
text
end
+ # @group Linking Objects and URLs
+
+ # Links objects or URLs. This method will delegate to the correct +link_+
+ # method depending on the arguments passed in.
+ #
+ # @example Linking a URL
+ # linkify('http://example.com')
+ # @example Including docstring contents of an object
+ # linkify('include:YARD::Docstring')
+ # @example Linking to an extra file
+ # linkify('file:README')
+ # @example Linking an object by path
+ # linkify('YARD::Docstring')
def linkify(*args)
if args.first.is_a?(String)
case args.first
when %r{://}, /^mailto:/
link_url(args[0], args[1], {:target => '_parent'}.merge(args[2]||{}))
+ when /^include:(\S+)/
+ path = $1
+ if obj = YARD::Registry.resolve(object.namespace, path)
+ link_include_object(obj)
+ else
+ log.warn "Cannot find object at `#{path}' for inclusion"
+ end
when /^file:(\S+?)(?:#(\S+))?$/
link_file($1, args[1] ? args[1] : $1, $2)
else
link_object(*args)
end
else
link_object(*args)
end
end
+
+ # Includes an object's docstring into output.
+ # @since 0.6.0
+ def link_include_object(object)
+ object.docstring
+ end
+ # Links to an object with an optional title
+ #
+ # @param [CodeObjects::Base] object the object to link to
+ # @param [String] title the title to use for the link
+ # @return [String] the linked object
def link_object(object, title = nil)
return title if title
case object
when YARD::CodeObjects::Base, YARD::CodeObjects::Proxy
@@ -39,39 +89,82 @@
else
object
end
end
+ # Links to a URL
+ #
+ # @param [String] url the URL to link to
+ # @param [String] title the optional title to display the link as
+ # @param [Hash] params optional parameters for the link
+ # @return [String] the linked URL
def link_url(url, title = nil, params = nil)
url
end
+ # Links to an extra file
+ #
+ # @param [String] filename the filename to link to
+ # @param [String] title the title of the link
+ # @param [String] anchor optional anchor
+ # @return [String] the link to the file
+ # @since 0.5.5
def link_file(filename, title = nil, anchor = nil)
filename
end
+ # @group Formatting Object Attributes
+
+ # Formats a list of return types for output and links each type.
+ #
+ # @example Formatting types
+ # format_types(['String', 'Array']) #=> "(String, Array)"
+ # @example Formatting types without surrounding brackets
+ # format_types(['String', 'Array'], false) #=> "String, Array"
+ # @param [Array<String>] list a list of types
+ # @param [Boolean] brackets whether to surround the types in brackets
+ # @return [String] the formatted list of Ruby types
def format_types(list, brackets = true)
list.nil? || list.empty? ? "" : (brackets ? "(#{list.join(", ")})" : list.join(", "))
end
+ # @example Formatted type of an exception class
+ # o = ClassObject.new(:root, :MyError)
+ # o.superclass = P('RuntimeError')
+ # format_object_type(o) # => "Exception"
+ # @example Formatted type of a method
+ # o = MethodObject.new(:root, :to_s)
+ # format_object_type(o) # => "Method"
+ # @param [CodeObjects::Base] object the object to retrieve the type for
+ # @return [String] the human-readable formatted {CodeObjects::Base#type #type}
+ # for the object
def format_object_type(object)
case object
when YARD::CodeObjects::ClassObject
object.is_exception? ? "Exception" : "Class"
else
object.type.to_s.capitalize
end
end
+ # @example
+ # s = format_object_title ModuleObject.new(:root, :MyModuleName)
+ # s # => "Module: MyModuleName"
+ # @param [CodeObjects::Base] object the object to retrieve a title for
+ # @return [String] the page title name for a given object
def format_object_title(object)
case object
when YARD::CodeObjects::RootObject
"Top Level Namespace"
else
format_object_type(object) + ": " + object.path
end
end
+ # Indents and formats source code
+ #
+ # @param [String] value the input source code
+ # @return [String] formatted source code
def format_source(value)
sp = value.split("\n").last[/^(\s+)/, 1]
num = sp ? sp.size : 0
value.gsub(/^\s{#{num}}/, '')
end