Sha256: 656d9ca8cb51b454a7f5c7c04ba355419db8c1283f90b58df8e722c272f8ce6b

Contents?: true

Size: 1.69 KB

Versions: 2

Compression:

Stored size: 1.69 KB

Contents

module JsDuck

  # Creates list of all members in all classes that is used by the
  # searching feature in UI.
  class Members
    # Given list of class documentation objects returns an array of
    # hashes describing all the members.
    def create(docs)
      list = []
      docs.each do |cls|
        list << class_node(cls)
        [:cfg, :property, :method, :event].each do |type|
          cls.members(type).each do |m|
            # skip inherited items and constructors
            if m[:member] == cls.full_name && m[:name] != cls.short_name
              list << member_node(m, cls)
            end
          end
        end
      end
      list
    end

    # Creates structure representing one class
    def class_node(cls)
      return {
        :cls => cls.full_name,
        :member => cls.short_name,
        :type => :cls,
        :doc => short_desc(cls[:doc])
      }
    end

    # Creates structure representing one member
    def member_node(member, cls)
      return {
        :cls => cls.full_name,
        :member => member[:name],
        :type => member[:tagname],
        :doc => short_desc(member[:doc])
      }
    end

    def short_desc(str)
      tagless = first_sentence(strip_tags(strip_links(str)))
      if tagless.length > 120
        short_doc = tagless[0..116]
        ellipsis = tagless.length > short_doc.length ? "..." : ""
        tagless[0..116] + ellipsis
      else
        tagless
      end
    end

    def strip_tags(str)
      str.gsub(/<.*?>/, "")
    end

    def strip_links(str)
      str = str.gsub(/\{@link +(\S*?)(?: +(.+?))?\}/, "\\1")
      str = str.gsub(/#/, ".")
    end

    def first_sentence(str)
      str.sub(/\A(.+?\.)\s.*\Z/m, "\\1")
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jsduck-0.6.1 lib/jsduck/members.rb
jsduck-0.6 lib/jsduck/members.rb