Class: YARD::Tags::MethodDirective
  
  
  
Overview
  
    
  
    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.
 
   
Defines a method object with a given method signature, using indented block data as the method’s docstring. The signature is similar to the @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 @!attribute
   
 
  
    
      Parser callbacks
      collapse
    
    
      
        - SCOPE_MATCH =
          
        
 
        /\A\s*self\s*\.\s*/
 
      
    
  
  
    
      Parser callbacks
      collapse
    
    
  
  
  
  
    Instance Method Details
    
      
  
  
    #after_parse  ⇒ Object 
  
  
  
  
    
      
373
374
375
376
377 
     | 
    
      # File 'lib/yard/tags/directives.rb', line 373
def after_parse
  return unless handler
  use_indented_text
  create_object
end 
     | 
  
 
    
      
  
  
    #call  ⇒ Object 
  
  
  
  
    
      
371 
     | 
    
      # File 'lib/yard/tags/directives.rb', line 371
def call; end 
     | 
  
 
    
      
  
  
    #create_object  ⇒ Object  
  
  
  
  
    
      
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433 
     | 
    
      # File 'lib/yard/tags/directives.rb', line 413
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
     | 
  
 
    
      
  
  
    #method_name  ⇒ Object  
  
  
  
  
    
      
381
382
383
384
385
386
387
388 
     | 
    
      # File 'lib/yard/tags/directives.rb', line 381
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
     | 
  
 
    
      
  
  
    #method_signature  ⇒ Object  
  
  
  
  
    
      
390
391
392 
     | 
    
      # File 'lib/yard/tags/directives.rb', line 390
def method_signature
  "def #{sanitized_tag_signature || method_name}"
end
     | 
  
 
    
      
  
  
    #sanitized_tag_signature  ⇒ Object  
  
  
  
  
    
      
394
395
396
397
398
399
400
401 
     | 
    
      # File 'lib/yard/tags/directives.rb', line 394
def sanitized_tag_signature
  if tag.name && tag.name =~ SCOPE_MATCH
    parser.state.scope = :class
    $'
  else
    tag.name
  end
end
     | 
  
 
    
      
  
  
    #use_indented_text  ⇒ Object  
  
  
  
  
    
      
403
404
405
406
407
408
409
410
411 
     | 
    
      # File 'lib/yard/tags/directives.rb', line 403
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 
     |