class YARD::Tags::MethodDirective
Defines a method object with a given method signature, using indented block data as the method’s docstring. The signature is similar to the {tag:overload} tag. The comment containing this directive does not need to be attached to any source, but if it is, that source code will be used as the method’s source.
To define an attribute method, see {tag:!attribute}
@note This directive should only be used if there is no explicit
declaration for the method in any source files (i.e., the method is declared dynamically via meta-programming). In all other cases, add documentation to the method definition itself.
@note For backwards compatibility support, you do not need to indent
the method's docstring text. If a +@!method+ directive is seen with no indented block, the entire docstring is used as the new method's docstring text.
@example Defining a simple method
# @!method quit(username, message = "Quit") # Sends a quit message to the server for a +username+. # @param [String] username the username to quit # @param [String] message the quit message quit_message_method
@example Attaching multiple methods to the same source
# @!method method1 # @!method method2 create_methods :method1, :method2
@see tag:!attribute @since 0.7.0
Constants
- SCOPE_MATCH
Public Instance Methods
Source
# File lib/yard/tags/directives.rb, line 372 def after_parse return unless handler use_indented_text create_object end
Protected Instance Methods
Source
# File lib/yard/tags/directives.rb, line 412 def create_object name = method_name scope = parser.state.scope || handler.scope visibility = parser.state.visibility || handler.visibility ns = CodeObjects::NamespaceObject === object ? object : handler.namespace obj = CodeObjects::MethodObject.new(ns, name, scope) handler.register_file_info(obj) handler.register_source(obj) handler.register_visibility(obj, visibility) handler.register_group(obj) obj.signature = method_signature obj.parameters = OverloadTag.new(:overload, method_signature).parameters obj.docstring = Docstring.new!(parser.text, parser.tags, obj, parser.raw_text, parser.reference) handler.register_module_function(obj) old_obj = parser.object parser.object = obj parser.post_process parser.object = old_obj obj end
Source
# File lib/yard/tags/directives.rb, line 380 def method_name sig = sanitized_tag_signature if sig && sig =~ /^#{CodeObjects::METHODNAMEMATCH}(\s|\(|$)/ sig[/\A\s*([^\(; \t]+)/, 1] else handler.call_params.first end end
Source
# File lib/yard/tags/directives.rb, line 389 def method_signature "def #{sanitized_tag_signature || method_name}" end
Source
# File lib/yard/tags/directives.rb, line 393 def sanitized_tag_signature if tag.name && tag.name =~ SCOPE_MATCH parser.state.scope = :class $' else tag.name end end
Source
# File lib/yard/tags/directives.rb, line 402 def use_indented_text return if tag.text.empty? handler = parser.handler object = parser.object self.parser = parser.class.new(parser.library) parser.state.inside_directive = true parser.parse(tag.text, object, handler) parser.state.inside_directive = false end