Class: RDoc::Attr

Inherits:
MethodAttr show all
Defined in:
lib/rdoc/code_object/attr.rb

Overview

An attribute created by #attr, #attr_reader, #attr_writer or #attr_accessor

Constant Summary collapse

MARSHAL_VERSION =
3

RDoc 4

Added parent name and class
Added section title
4

Added type_signature_lines (serialized as joined string)

4

Constants included from Text

Text::MARKUP_FORMAT, Text::SPACE_SEPARATED_LETTER_CLASS

Instance Attribute Summary collapse

Attributes inherited from MethodAttr

#aliases, #arglists, #block_params, #call_seq, #is_alias_for, #name, #params, #singleton, #type_signature_lines, #visibility

Attributes inherited from CodeObject

#comment, #document_children, #document_self, #done_documenting, #file, #force_documentation, #line, #metadata, #mixin_from, #parent, #received_nodoc, #section, #store

Attributes included from Text

#language

Instance Method Summary collapse

Methods inherited from MethodAttr

#<=>, #add_line_numbers, #add_location_comment, #aref, #documented?, #find_method_or_attribute, #find_see, #full_name, #html_name, #initialize_copy, #initialize_visibility, #markup_code, #name_ord_range, #name_prefix, #parent_name, #path, #pretty_name, #search_record, #search_snippet, #see, #store=, #type

Methods inherited from CodeObject

#display?, #documented?, #file_name, #full_name=, #ignore, #ignored?, #initialize_visibility, #options, #parent_name, #record_location, #start_doc, #stop_doc, #suppress, #suppressed?

Methods included from Generator::Markup

#aref_to, #as_href, #canonical_url, #cvs_url, #description, #formatter

Methods included from Text

decode_legacy_label, expand_tabs, #flush_left, #markup, #normalize_comment, #parse, #snippet, #strip_hashes, #strip_newlines, #strip_stars, to_anchor, #wrap

Constructor Details

#initialize(name, rw, comment, singleton: false) ⇒ Attr

Creates a new Attr with name, read/write status rw and comment. singleton marks this as a class attribute.



27
28
29
30
31
32
# File 'lib/rdoc/code_object/attr.rb', line 27

def initialize(name, rw, comment, singleton: false)
  super(name, singleton: singleton)

  @rw = rw
  self.comment = comment
end

Instance Attribute Details

#rwObject

Is the attribute readable (‘R’), writable (‘W’) or both (‘RW’)?



21
22
23
# File 'lib/rdoc/code_object/attr.rb', line 21

def rw
  @rw
end

Instance Method Details

#==(other) ⇒ Object

Attributes are equal when their names, singleton and rw are identical



37
38
39
40
41
42
# File 'lib/rdoc/code_object/attr.rb', line 37

def ==(other)
  self.class == other.class and
    self.name == other.name and
    self.rw == other.rw and
    self.singleton == other.singleton
end

#add_alias(an_alias, context) ⇒ Object

Add an_alias as an attribute in context.



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rdoc/code_object/attr.rb', line 47

def add_alias(an_alias, context)
  access_type = an_alias.new_name.end_with?('=') ? 'W' : 'R'
  new_attr = self.class.new(an_alias.new_name, access_type, comment, singleton: singleton)
  new_attr.record_location an_alias.file
  new_attr.visibility = self.visibility
  new_attr.is_alias_for = self
  new_attr.type_signature_lines = self.type_signature_lines
  @aliases << new_attr
  context.add_attribute new_attr
  new_attr
end

#aref_prefixObject

The #aref prefix for attributes



62
63
64
# File 'lib/rdoc/code_object/attr.rb', line 62

def aref_prefix
  'attribute'
end

#calls_superObject

Attributes never call super. See RDoc::AnyMethod#calls_super

An RDoc::Attr can show up in the method list in some situations (see Gem::ConfigFile)



72
73
74
# File 'lib/rdoc/code_object/attr.rb', line 72

def calls_super # :nodoc:
  false
end

#definitionObject

Returns attr_reader, attr_writer or attr_accessor as appropriate.



79
80
81
82
83
84
85
# File 'lib/rdoc/code_object/attr.rb', line 79

def definition
  case @rw
  when 'RW' then 'attr_accessor'
  when 'R'  then 'attr_reader'
  when 'W'  then 'attr_writer'
  end
end

#inspectObject

:nodoc:



87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/rdoc/code_object/attr.rb', line 87

def inspect # :nodoc:
  alias_for = @is_alias_for ? " (alias for #{@is_alias_for.name})" : nil
  visibility = self.visibility
  visibility = "forced #{visibility}" if force_documentation
  "#<%s:0x%x %s %s (%s)%s>" % [
    self.class, object_id,
    full_name,
    rw,
    visibility,
    alias_for,
  ]
end

#marshal_dumpObject

Dumps this Attr for use by ri. See also #marshal_load



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/rdoc/code_object/attr.rb', line 103

def marshal_dump
  [ MARSHAL_VERSION,
    @name,
    full_name,
    @rw,
    @visibility,
    parse(@comment),
    singleton,
    @file.relative_name,
    @parent.full_name,
    @parent.class,
    @section.title,
    @type_signature_lines&.join("\n"),
  ]
end

#marshal_load(array) ⇒ Object

Loads this Attr from array. For a loaded Attr the following methods will return cached values:

  • #full_name

  • #parent_name



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/rdoc/code_object/attr.rb', line 126

def marshal_load(array)
  initialize_visibility

  @aliases      = []
  @parent       = nil
  @parent_name  = nil
  @parent_class = nil
  @section      = nil
  @file         = nil

  version        = array[0]
  @name          = array[1]
  @full_name     = array[2]
  @rw            = array[3]
  @visibility    = array[4]
  @comment       = RDoc::Comment.from_document array[5]
  @singleton     = array[6] || false # MARSHAL_VERSION == 0
  #                      7 handled below
  @parent_name   = array[8]
  @parent_class  = array[9]
  @section_title = array[10]
  @type_signature_lines = array[11]&.split("\n")

  @file = RDoc::TopLevel.new array[7] if version > 1

  @parent_name ||= @full_name.split('#', 2).first
end

#pretty_print(q) ⇒ Object

:nodoc:



154
155
156
157
158
159
160
161
162
163
# File 'lib/rdoc/code_object/attr.rb', line 154

def pretty_print(q) # :nodoc:
  q.group 2, "[#{self.class.name} #{full_name} #{rw} #{visibility}", "]" do
    unless comment.empty? then
      q.breakable
      q.text "comment:"
      q.breakable
      q.pp @comment
    end
  end
end

#to_sObject

:nodoc:



165
166
167
# File 'lib/rdoc/code_object/attr.rb', line 165

def to_s # :nodoc:
  "#{definition} #{name} in: #{parent}"
end

#token_streamObject

Attributes do not have token streams.

An RDoc::Attr can show up in the method list in some situations (see Gem::ConfigFile)



175
176
# File 'lib/rdoc/code_object/attr.rb', line 175

def token_stream # :nodoc:
end