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