Class: YARD::CodeObjects::ClassObject
- Inherits:
-
NamespaceObject
- Object
- Base
- NamespaceObject
- YARD::CodeObjects::ClassObject
- Defined in:
- lib/yard/code_objects/class_object.rb
Overview
A ClassObject represents a Ruby class in source code. It is a ModuleObject with extra inheritance semantics through the superclass.
Instance Attribute Summary collapse
-
#superclass ⇒ ClassObject
The ClassObject that this class object inherits from in Ruby source.
Attributes inherited from NamespaceObject
#aliases, #attributes, #child, #children, #class_attributes, #class_mixins, #cvars, #groups, #included_constants, #included_meths, #instance_attributes, #instance_mixins, #mixins
Attributes inherited from Base
#docstring, #dynamic, #files, #group, #namespace, #signature, #source, #source_type
Instance Method Summary collapse
-
#constants(opts = {}) ⇒ Array<ConstantObject>
Returns the list of constants matching the options hash.
-
#inheritance_tree(include_mods = false) ⇒ Array<NamespaceObject>
Returns the inheritance tree of the object including self.
-
#inherited_constants ⇒ Array<ConstantObject>
Returns only the constants that were inherited.
-
#inherited_meths(opts = {}) ⇒ Array<MethodObject>
Returns only the methods that were inherited.
-
#initialize(namespace, name, *args, &block) ⇒ ClassObject
constructor
Creates a new class object in
namespace
withname
. -
#is_exception? ⇒ Boolean
Whether or not the class is a Ruby Exception.
-
#meths(opts = {}) ⇒ Array<MethodObject>
Returns the list of methods matching the options hash.
Methods inherited from Base
===, #[], #[]=, #add_file, #dynamic?, #equal?, #file, #format, #format_source, #has_tag?, #hash, #inspect, #line, #method_missing, #name, new, #path, #relative_path, #root?, #sep, #tag, #tags, #type, #visibility
Constructor Details
#initialize(namespace, name, *args, &block) ⇒ ClassObject
Creates a new class object in namespace
with name
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/yard/code_objects/class_object.rb', line 12 def initialize(namespace, name, *args, &block) super if is_exception? self.superclass ||= "::Exception" unless P(namespace, name) == P(:Exception) else case P(namespace, name).path when "BasicObject" nil when "Object" self.superclass ||= "::BasicObject" else self.superclass ||= "::Object" end end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class YARD::CodeObjects::Base
Instance Attribute Details
#superclass ⇒ ClassObject
The YARD::CodeObjects::ClassObject that this class object inherits from in Ruby source.
7 8 9 |
# File 'lib/yard/code_objects/class_object.rb', line 7 def superclass @superclass end |
Instance Method Details
#constants(opts = {}) ⇒ Array<ConstantObject>
Returns the list of constants matching the options hash.
97 98 99 100 |
# File 'lib/yard/code_objects/class_object.rb', line 97 def constants(opts = {}) opts = SymbolHash[:inherited => true].update(opts) super(opts) + (opts[:inherited] ? inherited_constants : []) end |
#inheritance_tree(include_mods = false) ⇒ Array<NamespaceObject>
Returns the inheritance tree of the object including self.
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/yard/code_objects/class_object.rb', line 42 def inheritance_tree(include_mods = false) list = (include_mods ? mixins(:instance, :class) : []) if superclass.is_a?(Proxy) || superclass.respond_to?(:inheritance_tree) list += [superclass] unless superclass == P(:Object) || superclass == P(:BasicObject) end [self] + list.map do |m| next m unless m.respond_to?(:inheritance_tree) m.inheritance_tree(include_mods) end.flatten.uniq end |
#inherited_constants ⇒ Array<ConstantObject>
Returns only the constants that were inherited.
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/yard/code_objects/class_object.rb', line 105 def inherited_constants inheritance_tree[1..-1].inject([]) do |list, superclass| if superclass.is_a?(Proxy) list else list += superclass.constants.reject do |o| child(:name => o.name) || list.find {|o2| o2.name == o.name } end end end end |
#inherited_meths(opts = {}) ⇒ Array<MethodObject>
Returns only the methods that were inherited.
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/yard/code_objects/class_object.rb', line 75 def inherited_meths(opts = {}) inheritance_tree[1..-1].inject([]) do |list, superclass| if superclass.is_a?(Proxy) list else list += superclass.meths(opts).reject do |o| next(false) if opts[:all] child(:name => o.name, :scope => o.scope) || list.find {|o2| o2.name == o.name && o2.scope == o.scope } end end end end |
#is_exception? ⇒ Boolean
Whether or not the class is a Ruby Exception
32 33 34 |
# File 'lib/yard/code_objects/class_object.rb', line 32 def is_exception? inheritance_tree.reverse.any? {|o| BUILTIN_EXCEPTIONS_HASH.has_key? o.path } end |
#meths(opts = {}) ⇒ Array<MethodObject>
Returns the list of methods matching the options hash. Returns all methods if hash is empty.
62 63 64 65 66 67 68 69 70 |
# File 'lib/yard/code_objects/class_object.rb', line 62 def meths(opts = {}) opts = SymbolHash[:inherited => true].update(opts) list = super(opts) list += inherited_meths(opts).reject do |o| next(false) if opts[:all] list.find {|o2| o2.name == o.name && o2.scope == o.scope } end if opts[:inherited] list end |