class JsDuck::Process::Enums

Public Class Methods

new(classes_hash) click to toggle source
# File lib/jsduck/process/enums.rb, line 7
def initialize(classes_hash)
  @classes_hash = classes_hash
end

Public Instance Methods

process_all!() click to toggle source

Applies additional processing to all enum-classes.

# File lib/jsduck/process/enums.rb, line 12
def process_all!
  @classes_hash.each_value do |cls|
    if cls[:enum]
      process(cls)
    end
  end
end

Private Instance Methods

each_alias(prefix) { |name, cls| ... } click to toggle source
# File lib/jsduck/process/enums.rb, line 49
def each_alias(prefix)
  @classes_hash.each_value do |cls|
    if cls[:aliases] && cls[:aliases][prefix]
      cls[:aliases][prefix].each {|name| yield(name, cls) }
    end
  end
end
expand_default(cls) click to toggle source

Expands default value like widget.* into list of properties

# File lib/jsduck/process/enums.rb, line 31
def expand_default(cls)
  if cls[:enum][:default] =~ /\A(.*)\.\*\z/
    each_alias($1) do |name, owner|
      cls[:members] << {
        :tagname => :property,
        :id => 'property-' + name,
        :name => name,
        :default => "'" + name + "'",
        :type => "String",
        :private => owner[:private],
        :files => cls[:files],
        :owner => cls[:name],
        :doc => "Alias for {@link #{owner[:name]}}.",
      }
    end
  end
end
infer_type(cls) click to toggle source

Given an enum class, returns the type infered from its values.

# File lib/jsduck/process/enums.rb, line 78
def infer_type(cls)
  if cls[:members].length > 0
    types = cls[:members].map {|p| p[:type] }
    types.sort.uniq.join("/")
  else
    "Object"
  end
end
process(cls) click to toggle source

processes single class

# File lib/jsduck/process/enums.rb, line 23
def process(cls)
  expand_default(cls)
  reject_not_properties(cls)
  strip_inheritdoc(cls)
  cls[:enum][:type] = infer_type(cls) unless cls[:enum][:type]
end
reject_not_properties(cls) click to toggle source

Only allow properties as members, throw away all others.

# File lib/jsduck/process/enums.rb, line 58
def reject_not_properties(cls)
  cls[:members].reject! do |m|
    if m[:tagname] == :property
      false
    else
      Logger.warn(:enum, "Enums can only contain properties, #{m[:tagname]} found instead.", m[:files][0])
      true
    end
  end
end
strip_inheritdoc(cls) click to toggle source

Remove the auto-inserted inheritdoc tag so the auto-detected enum values default to being public.

# File lib/jsduck/process/enums.rb, line 71
def strip_inheritdoc(cls)
  cls[:members].each do |p|
    p[:inheritdoc] = nil if p[:autodetected] && p[:autodetected][:tagname]
  end
end