Class: JsDuck::Relations
- Inherits:
-
Object
- Object
- JsDuck::Relations
- Defined in:
- lib/jsduck/relations.rb
Overview
Provides information about relations between classes.
Also provides a place to look up classes by name.
The constructor is initialized with array of all available classes and list of class names to ignore. By default the latter list contains only JavaScript base class “Object”.
Instance Attribute Summary collapse
-
#classes ⇒ Object
readonly
Returns list of all classes.
Instance Method Summary collapse
-
#[](classname) ⇒ Object
Looks up class by name, nil if not found.
- #each(&block) ⇒ Object
-
#ignore?(classname) ⇒ Boolean
Returns true if class is in list of ignored classes.
-
#initialize(classes = [], ignorables = []) ⇒ Relations
constructor
A new instance of Relations.
-
#mixed_into(cls) ⇒ Object
Returns classes having particular mixin, empty array if none.
- #reg_mixed_into(cls) ⇒ Object
- #reg_subclasses(cls) ⇒ Object
-
#subclasses(cls) ⇒ Object
Returns subclasses of particular class, empty array if none.
-
#to_a ⇒ Object
Returns list of all classes.
Constructor Details
#initialize(classes = [], ignorables = []) ⇒ Relations
Returns a new instance of Relations.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/jsduck/relations.rb', line 14 def initialize(classes = [], ignorables = []) @classes = classes @ignorables = {} ignorables.each {|classname| @ignorables[classname] = true } # First build class lookup table; building lookup tables for # mixins and subclasses will depend on that. @lookup = {} @classes.each do |cls| @lookup[cls.full_name] = cls (cls[:alternateClassNames] || []).each do |alt_name| @lookup[alt_name] = cls end cls.relations = self end @subs = {} @mixes = {} @classes.each do |cls| reg_subclasses(cls) reg_mixed_into(cls) end end |
Instance Attribute Details
#classes ⇒ Object (readonly)
Returns list of all classes
12 13 14 |
# File 'lib/jsduck/relations.rb', line 12 def classes @classes end |
Instance Method Details
#[](classname) ⇒ Object
Looks up class by name, nil if not found
39 40 41 |
# File 'lib/jsduck/relations.rb', line 39 def [](classname) @lookup[classname] end |
#each(&block) ⇒ Object
48 49 50 |
# File 'lib/jsduck/relations.rb', line 48 def each(&block) @classes.each(&block) end |
#ignore?(classname) ⇒ Boolean
Returns true if class is in list of ignored classes.
44 45 46 |
# File 'lib/jsduck/relations.rb', line 44 def ignore?(classname) @ignorables[classname] end |
#mixed_into(cls) ⇒ Object
Returns classes having particular mixin, empty array if none
84 85 86 |
# File 'lib/jsduck/relations.rb', line 84 def mixed_into(cls) @mixes[cls.full_name] || [] end |
#reg_mixed_into(cls) ⇒ Object
73 74 75 76 77 78 79 80 81 |
# File 'lib/jsduck/relations.rb', line 73 def reg_mixed_into(cls) cls.mixins.each do |mix| if @mixes[mix.full_name] @mixes[mix.full_name] << cls else @mixes[mix.full_name] = [cls] end end end |
#reg_subclasses(cls) ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/jsduck/relations.rb', line 58 def reg_subclasses(cls) if !cls.parent # do nothing elsif @subs[cls.parent.full_name] @subs[cls.parent.full_name] << cls else @subs[cls.parent.full_name] = [cls] end end |
#subclasses(cls) ⇒ Object
Returns subclasses of particular class, empty array if none
69 70 71 |
# File 'lib/jsduck/relations.rb', line 69 def subclasses(cls) @subs[cls.full_name] || [] end |
#to_a ⇒ Object
Returns list of all classes. This method allows us to treat Relations as array and therefore easily mock it
54 55 56 |
# File 'lib/jsduck/relations.rb', line 54 def to_a @classes end |