class JsDuck::Process::Overrides
Public Class Methods
new(classes_hash, opts = OpenStruct.new(:external => []))
click to toggle source
# File lib/jsduck/process/overrides.rb, line 8 def initialize(classes_hash, opts = OpenStruct.new(:external => [])) @classes_hash = classes_hash @opts = opts end
Public Instance Methods
process_all!()
click to toggle source
Applies all override classes to target classes, then deletes the overrides themselves from classes hash and adds the names of all the processed overrides to external classes list in options object.
# File lib/jsduck/process/overrides.rb, line 17 def process_all! overrides = [] @classes_hash.each_value do |cls| if cls[:override] process(cls) overrides << cls end end # discard each override class overrides.each do |cls| @classes_hash.delete(cls[:name]) end @opts.external += overrides.map {|c| c[:name] } end
Private Instance Methods
add_doc(m, doc)
click to toggle source
# File lib/jsduck/process/overrides.rb, line 93 def add_doc(m, doc) m[:doc] = (m[:doc] + "\n\n" + doc).strip end
add_member(cls, m)
click to toggle source
# File lib/jsduck/process/overrides.rb, line 89 def add_member(cls, m) cls[:members] << m end
each_member(cls) { |m| ... }
click to toggle source
# File lib/jsduck/process/overrides.rb, line 85 def each_member(cls) cls[:members].each {|m| yield m } end
get_name(override)
click to toggle source
helpers
# File lib/jsduck/process/overrides.rb, line 77 def get_name(override) if override[:name] != "" override[:name] else override[:files][0][:filename] end end
process(override)
click to toggle source
Applies override class to target class
# File lib/jsduck/process/overrides.rb, line 38 def process(override) target = @classes_hash[override[:override]] unless target return Logger.warn(:extend, "Class #{override[:override]} not found", override[:files][0]) end # Combine comments of classes if override[:doc].length > 0 add_doc(target, "**From override #{get_name(override)}:** " + override[:doc]) end target[:files] += override[:files] # Build lookup table of existing members existing = {} each_member(target) do |m| existing[m[:id]] = m end # When the same member exists in overridden class, just append # the docs. Otherwise add the member as a whole to the class. each_member(override) do |m| ex = existing[m[:id]] if ex if m[:doc].length > 0 add_doc(ex, "**From override #{get_name(override)}:** " + m[:doc]) else add_doc(ex, "**Overridden in #{get_name(override)}.**") end ex[:files] += m[:files] else add_member(target, m) add_doc(m, "**Defined in override #{get_name(override)}.**") m[:owner] = target[:name] end end end