class Scopedog::Directives::Base

@abstract

Attributes

abstract_class[RW]

Public Class Methods

abstract_class?() click to toggle source
# File lib/scopedog/directives/base.rb, line 9
def abstract_class?
  defined?(@abstract_class) && @abstraact_class == true
end
directive_name() click to toggle source
# File lib/scopedog/directives/base.rb, line 19
def directive_name
  name.demodulize.underscore.gsub(/_directive$/, '')
end
inherited(klass) click to toggle source
# File lib/scopedog/directives/base.rb, line 13
def inherited(klass)
  return if klass.abstract_class?

  YARD::Tags::Library.define_directive klass.directive_name, :with_name, klass
end

Public Instance Methods

call() click to toggle source

@!override YARD::Tags::Directive#after_parse

# File lib/scopedog/directives/base.rb, line 27
def call; end

Protected Instance Methods

add_method!(name = nil, tags: []) click to toggle source
# File lib/scopedog/directives/base.rb, line 31
def add_method!(name = nil, tags: [])
  name = handler.call_params.first if name.nil?

  obj = create_method_object(name)
  visibility = parser.state.visibility || handler.visibility

  handler.register_file_info(obj)
  handler.register_source(obj)
  handler.register_visibility(obj, visibility)
  handler.register_group(obj)
  handler.register_module_function(obj)

  old_obj = parser.object
  parser.object = obj
  parser.post_process
  parser.object = old_obj
  obj
end
create_method_object(name) click to toggle source

@return [YARD::CodeObjects::MethodObject]

# File lib/scopedog/directives/base.rb, line 51
def create_method_object(name)
  scope = parser.state.scope || handler.scope
  ns = YARD::CodeObjects::NamespaceObject === object ? object : handler.namespace
  signature = "def #{tag.name}"

  YARD::CodeObjects::MethodObject.new(ns, name, scope).tap do |obj|
    obj.signature = signature
    obj.parameters = YARD::Tags::OverloadTag.new(:overload, signature).parameters
    obj.docstring = YARD::Docstring.new!(parser.text, parser.tags, obj, parser.raw_text, parser.reference)
  end
end