class Asciidoctor::Cli::Invoker - asciidoctor-1.5.6.2 Documentation

# class Asciidoctor::Cli::Invoker

Public Invocation class for starting Asciidoctor via CLI

### Attributes

code[R]
documents[R]
options[R]

### Public Class Methods

new(*options) click to toggle source

    # File lib/asciidoctor/cli/invoker.rb, line 9
    def initialize *options
      @documents = []
      @out = nil
      @err = nil
      @code = 0
      options = options.flatten
      case (first_option = options[0])
      when Options
        @options = first_option
      when ::Hash
        @options = Options.new options
      else
        if ::Integer === (result = Options.parse! options)
          @code = result
          @options = nil
        else
          @options = result
        end
      end
    end

### Public Instance Methods

document() click to toggle source

    # File lib/asciidoctor/cli/invoker.rb, line 134
    def document
      @documents[0]
    end

invoke!() { |: STDIN| ... } click to toggle source

    # File lib/asciidoctor/cli/invoker.rb, line 30
    def invoke!
      old_verbose = -1
      return unless @options

      old_verbose = $VERBOSE
      opts = {}
      infiles = []
      outfile = nil
      err = @err || $stderr
      show_timings = false

      @options.map do |key, val|
        case key
        when :input_files
          infiles = val
        when :output_file
          outfile = val
        when :destination_dir
          opts[:to_dir] = val if val
        when :attributes
          # NOTE processor will dup attributes internally
          opts[:attributes] = val
        when :timings
          show_timings = val
        when :trace
          # currently does nothing
        when :verbose
          case val
          when 0
            $VERBOSE = nil
          when 1
            $VERBOSE = false
          when 2
            $VERBOSE = true
          end
        else
          opts[key] = val unless val.nil?
        end
      end

      stdin = if infiles.size == 1
        if (infile0 = infiles[0]) == '-'
          outfile ||= infile0
          true
        elsif ::File.pipe? infile0
          outfile ||= '-'
          nil
        end
      end

      tofile = if outfile == '-'
        @out || $stdout
      elsif outfile
        opts[:mkdirs] = true
        outfile
      else
        opts[:mkdirs] = true
        nil # automatically calculate outfile based on infile
      end

      if stdin
        # allows use of block to supply stdin, particularly useful for tests
        input = block_given? ? yield : STDIN
        input_opts = opts.merge :to_file => tofile
        if show_timings
          @documents << (::Asciidoctor.convert input, (input_opts.merge :timings => (timings = Timings.new)))
          timings.print_report err, '-'
        else
          @documents << (::Asciidoctor.convert input, input_opts)
        end
      else
        infiles.each do |infile|
          input_opts = opts.merge :to_file => tofile
          if show_timings
            @documents << (::Asciidoctor.convert_file infile, (input_opts.merge :timings => (timings = Timings.new)))
            timings.print_report err, infile
          else
            @documents << (::Asciidoctor.convert_file infile, input_opts)
          end
        end
      end
    rescue ::Exception => e
      if ::SignalException === e
        @code = e.signo
        # add extra endline if Ctrl+C is used
        err.puts if ::Interrupt === e
      else
        @code = (e.respond_to? :status) ? e.status : 1
        if @options[:trace]
          raise e
        else
          if ::RuntimeError === e
            err.puts %Q(#{e.message} (#{e.class}))
          else
            err.puts e.message
          end
          err.puts '  Use --trace for backtrace'
        end
      end
      nil
    ensure
      $VERBOSE = old_verbose unless old_verbose == -1
    end

read_error() click to toggle source

    # File lib/asciidoctor/cli/invoker.rb, line 147
    def read_error
      @err ? @err.string : ''
    end

read_output() click to toggle source

    # File lib/asciidoctor/cli/invoker.rb, line 143
    def read_output
      @out ? @out.string : ''
    end

redirect_streams(out, err = nil) click to toggle source

    # File lib/asciidoctor/cli/invoker.rb, line 138
    def redirect_streams out, err = nil
      @out = out
      @err = err
    end

reset_streams() click to toggle source

    # File lib/asciidoctor/cli/invoker.rb, line 151
    def reset_streams
      @out = nil
      @err = nil
    end