Class: JsDuck::FileCategories
- Inherits:
-
Object
- Object
- JsDuck::FileCategories
- Defined in:
- lib/jsduck/file_categories.rb
Overview
Reads categories info from config file
Instance Method Summary collapse
- #deprecated?(cls) ⇒ Boolean
-
#expand(name) ⇒ Object
Expands class name like ‘Foo.*’ into multiple class names.
-
#generate ⇒ Object
Parses categories in JSON file.
-
#initialize(filename, relations) ⇒ FileCategories
constructor
A new instance of FileCategories.
-
#validate ⇒ Object
Prints warnings for missing classes in categories file.
Constructor Details
#initialize(filename, relations) ⇒ FileCategories
Returns a new instance of FileCategories.
8 9 10 11 |
# File 'lib/jsduck/file_categories.rb', line 8 def initialize(filename, relations) @filename = filename @relations = relations end |
Instance Method Details
#deprecated?(cls) ⇒ Boolean
71 72 73 |
# File 'lib/jsduck/file_categories.rb', line 71 def deprecated?(cls) cls[:meta] && cls[:meta][:deprecated] end |
#expand(name) ⇒ Object
Expands class name like ‘Foo.*’ into multiple class names.
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/jsduck/file_categories.rb', line 38 def (name) re = Regexp.new("^" + name.split(/\*/, -1).map {|part| Regexp.escape(part) }.join('.*') + "$") classes = @relations.to_a.find_all do |cls| re =~ cls[:name] && !cls[:private] && !deprecated?(cls) end.map {|cls| cls[:name] }.sort if classes.length == 0 Logger.warn(:cat_no_match, "No class found matching a pattern '#{name}' in categories file", @filename) end classes end |
#generate ⇒ Object
Parses categories in JSON file
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/jsduck/file_categories.rb', line 14 def generate @categories = Util::Json.read(@filename) # Don't crash if old syntax is used. if @categories.is_a?(Hash) && @categories["categories"] Logger.warn(nil, 'Update categories file to contain just the array inside {"categories": [...]}', @filename) @categories = @categories["categories"] end # Perform expansion on all class names containing * wildcard @categories.each do |cat| cat["groups"].each do |group| group["classes"] = group["classes"].map do |name| (name) end.flatten end end validate @categories end |
#validate ⇒ Object
Prints warnings for missing classes in categories file
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/jsduck/file_categories.rb', line 52 def validate # Build a map of all classes listed in categories listed_classes = {} @categories.each do |cat| cat["groups"].each do |group| group["classes"].each do |cls_name| listed_classes[cls_name] = true end end end # Check that each existing non-private & non-deprecated class is listed @relations.each do |cls| unless listed_classes[cls[:name]] || cls[:private] || deprecated?(cls) Logger.warn(:cat_class_missing, "Class '#{cls[:name]}' not found in categories file", @filename) end end end |