Commit 7b3111df authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Move Ext4 events processing to Ext4Events class.

parent 1a3bdbed
Loading
Loading
Loading
Loading
+0 −21
Original line number Diff line number Diff line
@@ -200,21 +200,6 @@ module JsDuck
      end
    end

    # Appends Ext4 options parameter to each event parameter list.
    def append_ext4_event_options
      options = {
        :tagname => :param,
        :name => "eOpts",
        :type => "Object",
        :doc => "The options object passed to {@link Ext.util.Observable#addListener}."
      }
      @classes.each_value do |cls|
        cls[:members].each do |m|
          m[:params] << options if m[:tagname] == :event
        end
      end
    end

    # Processes all overrides.
    # Returns list of override classes.
    def process_overrides
@@ -226,12 +211,6 @@ module JsDuck
      end
    end

    # Are we dealing with ExtJS 4?
    # True if any of the classes is defined with Ext.define()
    def ext4?
      @documentation.any? {|cls| cls[:code_type] == :ext_define }
    end

    def result
      @documentation + @orphans
    end
+2 −3
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ require 'jsduck/source/file'
require 'jsduck/aggregator'
require 'jsduck/enum'
require 'jsduck/accessors'
require 'jsduck/ext4_events'
require 'jsduck/class'
require 'jsduck/relations'
require 'jsduck/logger'
@@ -61,9 +62,7 @@ module JsDuck
      agr.create_global_class
      agr.remove_ignored_classes
      Accessors.new(agr.classes).create_all!
      if @opts.ext4_events == true || (@opts.ext4_events == nil && agr.ext4?)
        agr.append_ext4_event_options
      end
      Ext4Events.new(agr.classes, @opts).process_all!
      Enum.new(agr.classes).process_all!
      # Ignore override classes after applying them to actual classes
      @opts.external_classes += agr.process_overrides.map {|o| o[:name] }
+41 −0
Original line number Diff line number Diff line
module JsDuck

  # Appends Ext4 options parameter to the parameter list of each event
  # in each class.
  #
  # But only does so when :ext4_events option is set to true or the
  # code itself is detected as being writted in Ext4 style.
  class Ext4Events
    def initialize(classes, opts={})
      @classes = classes
      @opts = opts
    end

    def process_all!
      if @opts[:ext4_events] == true || (@opts[:ext4_events] == nil && ext4_style_code?)
        @classes.each_value {|cls| process(cls) }
      end
    end

    # Are we dealing with code looking like ExtJS 4?
    # True if any of the classes is defined with Ext.define()
    def ext4_style_code?
      @classes.values.any? {|cls| cls[:code_type] == :ext_define }
    end

    def process(cls)
      cls[:members].each do |m|
        m[:params] << OPTIONS if m[:tagname] == :event
      end
    end

    OPTIONS = {
      :tagname => :param,
      :name => "eOpts",
      :type => "Object",
      :doc => "The options object passed to {@link Ext.util.Observable#addListener}."
    }

  end

end
+2 −2
Original line number Diff line number Diff line
require "jsduck/aggregator"
require "jsduck/source/file"
require "jsduck/ext4_events"

describe JsDuck::Aggregator do
  def parse(string)
    agr = JsDuck::Aggregator.new
    agr.aggregate(JsDuck::Source::File.new(string))
    agr.append_ext4_event_options if agr.ext4?
    JsDuck::Ext4Events.new(agr.classes).process_all!
    agr.result
  end

@@ -84,4 +85,3 @@ describe JsDuck::Aggregator do
  end

end