From 46580b51477355fece514573c88cb67030f4a502 Mon Sep 17 00:00:00 2001 From: drbrain Date: Thu, 1 Apr 2010 07:45:16 +0000 Subject: Import RDoc 2.5 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27147 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rdoc/attr.rb | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 lib/rdoc/attr.rb (limited to 'lib/rdoc/attr.rb') diff --git a/lib/rdoc/attr.rb b/lib/rdoc/attr.rb new file mode 100644 index 0000000000..43ded8e610 --- /dev/null +++ b/lib/rdoc/attr.rb @@ -0,0 +1,165 @@ +require 'rdoc/code_object' + +## +# An attribute created by \#attr, \#attr_reader, \#attr_writer or +# \#attr_accessor + +class RDoc::Attr < RDoc::CodeObject + + MARSHAL_VERSION = 0 # :nodoc: + + ## + # Name of the attribute + + attr_accessor :name + + ## + # Is the attribute readable, writable or both? + + attr_accessor :rw + + ## + # Source file token stream + + attr_accessor :text + + ## + # public, protected, private + + attr_accessor :visibility + + def initialize(text, name, rw, comment) + super() + @text = text + @name = name + @rw = rw + @visibility = :public + self.comment = comment + end + + ## + # Attributes are ordered by name + + def <=>(other) + self.name <=> other.name + end + + ## + # Attributes are equal when their names and rw is identical + + def == other + self.class == other.class and + self.name == other.name and + self.rw == other.rw + end + + ## + # Returns nil, for duck typing with RDoc::AnyMethod + + def block_params + end + + ## + # Returns nil, for duck typing with RDoc::AnyMethod + + def call_seq + end + + ## + # Partially bogus as Attr has no parent. For duck typing with + # RDoc::AnyMethod. + + def full_name + @full_name ||= "#{@parent ? @parent.full_name : '(unknown)'}##{name}" + end + + ## + # An HTML id-friendly representation of #name + + def html_name + @name.gsub(/[^a-z]+/, '-') + end + + def inspect # :nodoc: + attr = case rw + when 'RW' then :attr_accessor + when 'R' then :attr_reader + when 'W' then :attr_writer + else + " (#{rw})" + end + + "#<%s:0x%x %s.%s :%s>" % [ + self.class, object_id, + parent_name, attr, @name, + ] + end + + ## + # Dumps this Attr for use by ri. See also #marshal_load + + def marshal_dump + [ MARSHAL_VERSION, + @name, + full_name, + @rw, + @visibility, + parse(@comment), + ] + end + + ## + # Loads this AnyMethod from +array+. For a loaded AnyMethod the following + # methods will return cached values: + # + # * #full_name + # * #parent_name + + def marshal_load array + @name = array[1] + @full_name = array[2] + @rw = array[3] + @visibility = array[4] + @comment = array[5] + + @parent_name = @full_name + end + + ## + # Name of our parent with special handling for un-marshaled methods + + def parent_name + @parent_name || super + end + + ## + # URL path for this attribute + + def path + "#{@parent.path}##{@name}" + end + + ## + # For duck typing with RDoc::AnyMethod + + def singleton + false + end + + def to_s # :nodoc: + "#{type} #{name}\n#{comment}" + end + + ## + # Returns attr_reader, attr_writer or attr_accessor as appropriate + + def type + case @rw + when 'RW' then 'attr_accessor' + when 'R' then 'attr_reader' + when 'W' then 'attr_writer' + end + end + +end + -- cgit v1.2.3