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
3

Constants included from Text

Text::MARKUP_FORMAT, Text::SPACE_SEPARATED_LETTER_CLASS, Text::TO_HTML_CHARACTERS

Instance Attribute Summary collapse

Attributes inherited from MethodAttr

#aliases, #arglists, #block_params, #call_seq, #is_alias_for, #name, #param_seq, #params, #singleton, #text, #visibility

Attributes inherited from CodeObject

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

Attributes included from Text

#language

Instance Method Summary collapse

Methods inherited from MethodAttr

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

Methods inherited from CodeObject

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

Methods included from Generator::Markup

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

Methods included from Text

encode_fallback, #expand_tabs, #flush_left, #markup, #normalize_comment, #parse, #snippet, #strip_hashes, #strip_newlines, #strip_stars, #to_html, #wrap

Constructor Details

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

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



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

def initialize(text, name, rw, comment, singleton = false)
  super text, name

  @rw = rw
  @singleton = singleton
  self.comment = comment
end

Instance Attribute Details

#rwObject

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



19
20
21
# File 'lib/rdoc/code_object/attr.rb', line 19

def rw
  @rw
end

Instance Method Details

#==(other) ⇒ Object

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



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

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.



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

def add_alias(an_alias, context)
  new_attr = self.class.new(self.text, an_alias.new_name, self.rw,
                            self.comment, self.singleton)

  new_attr.record_location an_alias.file
  new_attr.visibility = self.visibility
  new_attr.is_alias_for = self
  @aliases << new_attr
  context.add_attribute new_attr
  new_attr
end

#aref_prefixObject

The #aref prefix for attributes



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

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)



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

def calls_super # :nodoc:
  false
end

#definitionObject

Returns attr_reader, attr_writer or attr_accessor as appropriate.



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

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

#inspectObject

:nodoc:



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

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



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

def marshal_dump
  [ MARSHAL_VERSION,
    @name,
    full_name,
    @rw,
    @visibility,
    parse(@comment),
    singleton,
    @file.relative_name,
    @parent.full_name,
    @parent.class,
    @section.title
  ]
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



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

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       = array[5]
  @singleton     = array[6] || false # MARSHAL_VERSION == 0
  #                      7 handled below
  @parent_name   = array[8]
  @parent_class  = array[9]
  @section_title = array[10]

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

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

#pretty_print(q) ⇒ Object

:nodoc:



151
152
153
154
155
156
157
158
159
160
# File 'lib/rdoc/code_object/attr.rb', line 151

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:



162
163
164
# File 'lib/rdoc/code_object/attr.rb', line 162

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)



172
173
# File 'lib/rdoc/code_object/attr.rb', line 172

def token_stream # :nodoc:
end