Re-enable spec/library for full CI runs.
[rbx.git] / lib / rdoc / ri / descriptions.rb
blob0d8560323ae8c84b1a00ca2c0e0e873e3da85a59
1 require 'yaml'
2 require 'rdoc/markup/fragments'
3 require 'rdoc/ri'
5 ##
6 # Descriptions are created by RDoc (in ri_generator) and written out in
7 # serialized form into the documentation tree. ri then reads these to generate
8 # the documentation
10 class RDoc::RI::NamedThing
11   attr_reader :name
12   def initialize(name)
13     @name = name
14   end
16   def <=>(other)
17     @name <=> other.name
18   end
20   def hash
21     @name.hash
22   end
24   def eql?(other)
25     @name.eql?(other)
26   end
27 end
29 class RDoc::RI::AliasName < RDoc::RI::NamedThing; end
31 class RDoc::RI::Attribute < RDoc::RI::NamedThing
32   attr_reader :rw, :comment
34   def initialize(name, rw, comment)
35     super(name)
36     @rw = rw
37     @comment = comment
38   end
39 end
41 class RDoc::RI::Constant < RDoc::RI::NamedThing
42   attr_reader :value, :comment
44   def initialize(name, value, comment)
45     super(name)
46     @value = value
47     @comment = comment
48   end
49 end
51 class RDoc::RI::IncludedModule < RDoc::RI::NamedThing; end
53 class RDoc::RI::MethodSummary < RDoc::RI::NamedThing
54   def initialize(name="")
55     super
56   end
57 end
59 class RDoc::RI::Description
60   attr_accessor :name
61   attr_accessor :full_name
62   attr_accessor :comment
64   def serialize
65     self.to_yaml
66   end
68   def self.deserialize(from)
69     YAML.load(from)
70   end
72   def <=>(other)
73     @name <=> other.name
74   end
75 end
77 class RDoc::RI::ModuleDescription < RDoc::RI::Description
79   attr_accessor :class_methods
80   attr_accessor :instance_methods
81   attr_accessor :attributes
82   attr_accessor :constants
83   attr_accessor :includes
85   # merge in another class description into this one
86   def merge_in(old)
87     merge(@class_methods, old.class_methods)
88     merge(@instance_methods, old.instance_methods)
89     merge(@attributes, old.attributes)
90     merge(@constants, old.constants)
91     merge(@includes, old.includes)
92     if @comment.nil? || @comment.empty?
93       @comment = old.comment
94     else
95       unless old.comment.nil? or old.comment.empty? then
96         if @comment.nil? or @comment.empty? then
97           @comment = old.comment
98         else
99           @comment << RDoc::Markup::Flow::RULE.new
100           @comment.concat old.comment
101         end
102       end
103     end
104   end
106   def display_name
107       "Module"
108   end
110   # the 'ClassDescription' subclass overrides this
111   # to format up the name of a parent
112   def superclass_string
113     nil
114   end
116   private
118   def merge(into, from)
119     names = {}
120     into.each {|i| names[i.name] = i }
121     from.each {|i| names[i.name] = i }
122     into.replace(names.keys.sort.map {|n| names[n]})
123   end
126 class RDoc::RI::ClassDescription < RDoc::RI::ModuleDescription
127   attr_accessor :superclass
129   def display_name
130       "Class"
131   end
133   def superclass_string
134     if @superclass && @superclass != "Object"
135       @superclass
136     else
137       nil
138     end
139   end
142 class RDoc::RI::MethodDescription < RDoc::RI::Description
144   attr_accessor :is_class_method
145   attr_accessor :visibility
146   attr_accessor :block_params
147   attr_accessor :is_singleton
148   attr_accessor :aliases
149   attr_accessor :is_alias_for
150   attr_accessor :params