lib/yard/templates/helpers/base_helper.rb in yard-0.6.8 vs lib/yard/templates/helpers/base_helper.rb in yard-0.7.0
- old
+ new
@@ -1,60 +1,64 @@
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
+
+ # 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
+
+ # 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)
options[:verifier] ? options[:verifier].run(list) : list
end
-
+
# @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)
+ 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:file:(\S+)/
file = $1
- if File.file?(file)
+ relpath = File.relative_path(Dir.pwd, File.expand_path(file))
+ if relpath =~ /^\.\./
+ log.warn "Cannot include file from path `#{file}'"
+ ""
+ elsif File.file?(file)
link_include_file(file)
else
log.warn "Cannot find file at `#{file}' for inclusion"
""
end
@@ -64,79 +68,89 @@
link_include_object(obj)
else
log.warn "Cannot find object at `#{path}' for inclusion"
""
end
+ when /^render:(\S+)/
+ path = $1
+ if obj = YARD::Registry.resolve(object, path)
+ opts = options.dup
+ opts.delete(:serializer)
+ obj.format(opts)
+ else
+ ''
+ end
when /^file:(\S+?)(?:#(\S+))?$/
- link_file($1, args[1] ? args[1] : $1, $2)
+ link_file($1, args[1] ? args[1] : nil, $2)
else
link_object(*args)
end
else
link_object(*args)
end
end
-
+
# Includes an object's docstring into output.
# @since 0.6.0
# @param [CodeObjects::Base] object the object to include
# @return [String] the object's docstring (no tags)
def link_include_object(object)
object.docstring
end
-
+
# Include a file as a docstring in output
# @since 0.7.0
# @param [String] file the filename to include
# @return [String] the file's contents
def link_include_file(file)
File.read(file)
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
object.path
when String, Symbol
P(object).path
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
- #
+
+ # 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)
+ return filename.filename if CodeObjects::ExtraFileObject === filename
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
@@ -152,21 +166,21 @@
# 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}
+ # @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
@@ -176,12 +190,12 @@
"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