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 a regular method, see {tag:!method}
@note This directive should only be used if there is no explicit attr_*
declaration for the attribute in any source files (i.e., the attribute is declared dynamically via meta-programming). In all other cases, add documentation to the attribute declaration itself.
@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 462 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 470 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 476 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 486 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] attrs[clean_name][:read] = object if readable? 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]] writer.docstring = object.base_docstring 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 516 def readable? !tag.types || tag.types.join =~ /(?!w)r/ end
writable?()
click to toggle source
# File lib/yard/tags/directives.rb, line 512 def writable? !tag.types || tag.types.join.include?('w') end