class Asciidoctor::DocTest::Asciidoc::ExamplesSuite

Subclass of {BaseExamplesSuite} for reference input examples.

@example Format of the example’s header

// .example-name
// Any text that is not the example's name or an option is considered
// as a description.
// :option_1: value 1
// :option_2: value 1
// :option_2: value 2
// :boolean_option:
The example's content in *AsciiDoc*.

NOTE: The trailing new line (below this) will be removed.

Public Class Methods

new(file_ext: '.adoc', **kwargs) click to toggle source
Calls superclass method
# File lib/asciidoctor/doctest/asciidoc/examples_suite.rb, line 27
def initialize(file_ext: '.adoc', **kwargs)
  super
end

Public Instance Methods

parse(input, group_name) click to toggle source
# File lib/asciidoctor/doctest/asciidoc/examples_suite.rb, line 31
def parse(input, group_name)
  examples = []
  current = create_example(nil)

  input.each_line do |line|
    case line.chomp!
    when %r{^//\s*\.([^ \n]+)}
      local_name = $1
      current.content.chomp!
      examples << (current = create_example([group_name, local_name]))
    when %r{^//\s*:([^:]+):(.*)}
      current[$1.to_sym] = $2.blank? ? true : $2.strip
    when %r{^//\s*(.*)\s*$}
      (current.desc ||= '').concat!($1, "\n")
    else
      current.content.concat!(line, "\n")
    end
  end

  examples
end
serialize(examples) click to toggle source
# File lib/asciidoctor/doctest/asciidoc/examples_suite.rb, line 53
def serialize(examples)
  Array(examples).map { |exmpl|
    Array.new.push(".#{exmpl.local_name}")
      .push(*exmpl.desc.lines.map(&:chomp))
      .push(*format_options(exmpl.opts))
      .map_send(:prepend, '// ')
      .push(exmpl.content.presence)
      .compact
      .join("\n")
      .concat("\n")
  }.join("\n")
end