Class: JsDuck::Categories::File

Inherits:
Object
  • Object
show all
Defined in:
lib/jsduck/categories/file.rb

Overview

Reads categories info from config file

Instance Method Summary collapse

Constructor Details

#initialize(filename, relations) ⇒ File

Returns a new instance of File.



9
10
11
12
# File 'lib/jsduck/categories/file.rb', line 9

def initialize(filename, relations)
  @filename = filename
  @relations = relations
end

Instance Method Details

#expand(name) ⇒ Object

Expands class name like ‘Foo.*’ into multiple class names.



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/jsduck/categories/file.rb', line 33

def expand(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] && !cls[:deprecated]
  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

#generateObject

Parses categories in JSON file



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/jsduck/categories/file.rb', line 15

def generate
  @categories = Util::Json.read(@filename)

  # Perform expansion on all class names containing * wildcard
  @categories.each do |cat|
    cat["groups"].each do |group|
      group["classes"] = group["classes"].map do |name|
        expand(name)
      end.flatten
    end
  end

  validate

  @categories
end

#validateObject

Prints warnings for missing classes in categories file



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/jsduck/categories/file.rb', line 47

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] || cls[:deprecated]
      Logger.warn(:cat_class_missing, "Class '#{cls[:name]}' not found in categories file", @filename)
    end
  end
end