class JsDuck::InlineExamples

Extracts inline examples from formatted docs and writes to file

Public Class Methods

new() click to toggle source
# File lib/jsduck/inline_examples.rb, line 8
def initialize
  @begin_example_re = /<pre class='inline-example ([^']*)'><code>/
  @end_example_re = /<\/code><\/pre>/
  @examples = []
end

Public Instance Methods

add_classes(relations) click to toggle source

Extracts inline examples from classes

# File lib/jsduck/inline_examples.rb, line 15
def add_classes(relations)
  relations.each do |cls|
    extract(cls[:doc]).each_with_index do |ex, i|
      @examples << {
        :id => cls[:name] + "-" + i.to_s,
        :name => cls[:name] + " example #" + (i+1).to_s,
        :href => '#!/api/' + cls[:name],
        :code => ex[:code],
        :options => ex[:options],
      }
    end
  end

  self
end
add_guides(guides) click to toggle source

Extracts inline examples from guides

# File lib/jsduck/inline_examples.rb, line 32
def add_guides(guides)
  guides.each_item do |guide|
    extract(guide[:html]).each_with_index do |ex, i|
      @examples << {
        :id => guide["name"] + "-" + i.to_s,
        :name => guide["title"] + " example #" + (i+1).to_s,
        :href => '#!/guide/' + guide["name"],
        :code => ex[:code],
        :options => ex[:options],
      }
    end
  end

  self
end
extract(html) click to toggle source

Extracts inline examples from HTML

# File lib/jsduck/inline_examples.rb, line 54
def extract(html)
  examples = []

  s = StringScanner.new(html)
  while !s.eos? do
    if s.check(/</)
      if s.check(@begin_example_re)

        s.scan(@begin_example_re) =~ @begin_example_re
        options = build_options_hash($1)

        ex = s.scan_until(@end_example_re).sub(@end_example_re, '')

        examples << {
          :code => Util::HTML.unescape(Util::HTML.strip_tags(ex)),
          :options => options,
        }
      else
        s.skip(/</)
      end
    else
      s.skip(/[^<]+/)
    end
  end

  examples
end
write(filename) click to toggle source

Writes all found examples to .js file

# File lib/jsduck/inline_examples.rb, line 49
def write(filename)
  Util::Json.write_jsonp(filename, "__inline_examples__", @examples)
end

Private Instance Methods

build_options_hash(css_classes) click to toggle source
# File lib/jsduck/inline_examples.rb, line 84
def build_options_hash(css_classes)
  hash = {}
  css_classes.split(/ +/).each do |k|
    hash[k] = true
  end
  hash
end