class YARD::Tags::AttributeDirective

Defines an attribute with a given name, using indented block data as the attribute's docstring. If the type specifier is supplied with “r”, “w”, or “rw”, the attribute is made readonly, writeonly or readwrite respectively. A readwrite attribute is the default, if no type is specified. 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 regular method, see {tag:!method}

@note For backwards compatibility support, you do not need to indent

the attribute's docstring text. If an +@!attribute+ directive is seen with
no indented block, the entire docstring is used as the new attribute's
docstring text.

@example Defining a simple readonly attribute

# @!attribute [r] count
#   @return [Fixnum] the size of the list

@example Defining a simple readwrite attribute

# @!attribute name
#   @return [String] the name of the user

@see tag:!method @since 0.7.0

Public Instance Methods

after_parse() click to toggle source
# File lib/yard/tags/directives.rb, line 437
def after_parse
  return unless handler
  use_indented_text
  create_attribute_data(create_object)
end

Protected Instance Methods

method_name() click to toggle source
# File lib/yard/tags/directives.rb, line 445
def method_name
  name = sanitized_tag_signature || handler.call_params.first
  name += '=' unless readable?
  name
end
method_signature() click to toggle source
# File lib/yard/tags/directives.rb, line 451
def method_signature
  if readable?
    "def #{method_name}"
  else
    "def #{method_name}(value)"
  end
end

Private Instance Methods

create_attribute_data(object) click to toggle source
# File lib/yard/tags/directives.rb, line 461
def create_attribute_data(object)
  return unless object
  clean_name = object.name.to_s.sub(/=$/, '')
  attrs = object.namespace.attributes[object.scope]
  attrs[clean_name] ||= SymbolHash[:read => nil, :write => nil]
  if readable?
    attrs[clean_name][:read] = object
  end
  if writable?
    if object.name.to_s[-1,1] == '='
      writer = object
      writer.parameters = [['value', nil]]
    else
      writer = CodeObjects::MethodObject.new(object.namespace,
        object.name.to_s + '=', object.scope)
      writer.signature = "def #{object.name}=(value)"
      writer.visibility = object.visibility
      writer.dynamic = object.dynamic
      writer.source = object.source
      writer.group = object.group
      writer.parameters = [['value', nil]]
      handler.register_file_info(writer)
    end
    attrs[clean_name][:write] = writer
  end
end
readable?() click to toggle source
# File lib/yard/tags/directives.rb, line 492
def readable?
  !tag.types || tag.types.join =~ /(?!w)r/
end
writable?() click to toggle source
# File lib/yard/tags/directives.rb, line 488
def writable?
  !tag.types || tag.types.join.include?('w')
end