Sha256: e18821503bf7a1af7880e83194895da455b7d176659d0906b5ab0b69c4551708

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

require 'gpg_status_parser/status_message'
require 'open3'

module GPGStatusParser

  # Parse a single line
  def self.parse_line(line)
    GPGStatusParser::StatusMessage.new(line.strip)
  end

  # Takes a file or string and optional block and either yields or
  # returns a list of status messages
  def self.parse(file_or_string, &block)
    if block
      file_or_string.each_line { |line| yield parse_line(line)}
    else
      file_or_string.each_line.map{ |line| parse_line(line)}
    end
  end

  # Run a gpg command, and take care of setting up and tearing down the
  # required temporary files.  Just pass in the arguments you want to send
  # to gpg:
  #
  #    GPGStatusParser.run_gpg("--verify foo.txt.asc foo.txt")
  #
  # and not:
  #
  #    GPGStatusParser.run_gpg("gpg --verify foo.txt.asc foo.txt")
  #
  # It is highly advised that you escape and/or scrub any user
  # generated input to make sure it is safe.  See Shellwords#shell_escape
  # in the ruby  standard library.
  def self.run_gpg args, data=nil, &block
    exit_status = nil
    status_file = Tempfile.new("status")

    full_gpg_command = "gpg --status-file #{status_file.path} #{args}"
    gpg_results = Open3.popen3(full_gpg_command) do |stdin, stdout, stderr, wait_thr|
      stdin.write data if data
      stdin.close
      exit_status = wait_thr.value
      parse(status_file, &block)
      out = stdout.read()
      err = stderr.read()
      {:status => exit_status, :stdout => out, :err => err}
    end
    gpg_results
  ensure
    status_file.close
    status_file.unlink
  end



end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gpg_status_parser-0.4.0 lib/gpg_status_parser.rb