Sha256: 7099a48b55dd4991ff1d290275b8c41ae3ffae140029230e54ccfd9d951d937f

Contents?: true

Size: 1.09 KB

Versions: 3

Compression:

Stored size: 1.09 KB

Contents

class WickedPdf
  module Progress
    require 'pty' if RbConfig::CONFIG['target_os'] !~ /mswin|mingw/ && RUBY_ENGINE != 'truffleruby' # no support for windows and truffleruby
    require 'English'

    def track_progress?(options)
      options[:progress] && !(on_windows? || RUBY_ENGINE == 'truffleruby')
    end

    def invoke_with_progress(command, options)
      output = []
      begin
        PTY.spawn(command.join(' ')) do |stdout, _stdin, pid|
          begin
            stdout.sync
            stdout.each_line("\r") do |line|
              output << line.chomp
              options[:progress].call(line) if options[:progress]
            end
          rescue Errno::EIO # rubocop:disable Lint/HandleExceptions
            # child process is terminated, this is expected behaviour
          ensure
            ::Process.wait pid
          end
        end
      rescue PTY::ChildExited
        puts 'The child process exited!'
      end
      err = output.join('\n')
      raise "#{command} failed (exitstatus 0). Output was: #{err}" unless $CHILD_STATUS && $CHILD_STATUS.exitstatus.zero?
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wicked_pdf-2.8.2 lib/wicked_pdf/progress.rb
wicked_pdf-2.8.1 lib/wicked_pdf/progress.rb
wicked_pdf-2.8.0 lib/wicked_pdf/progress.rb