Sha256: ef9e914001ff6e5c60b7d2a3d2f7cb9e3e19d96d847f511f4204a216b7298e10
Contents?: true
Size: 1.99 KB
Versions: 1
Compression:
Stored size: 1.99 KB
Contents
# encoding: utf-8 require 'open3' require 'shellwords' require 'metric_fu' MetricFu.lib_require { 'logging/mf_debugger' } MetricFu.lib_require { 'gem_version' } module MetricFu class GemRun attr_reader :output, :gem_name, :library_name, :version, :arguments def initialize(arguments={}) @gem_name = arguments.fetch(:gem_name) @library_name = arguments.fetch(:metric_name) @version = arguments.fetch(:version) { MetricFu::GemVersion.for(library_name) } args = arguments.fetch(:args) @arguments = args.respond_to?(:scan) ? Shellwords.shellwords(args) : args @output = '' @errors = [] end def summary "RubyGem #{gem_name}, library #{library_name}, version #{version}, arguments #{arguments}" end def run @output = execute end def execute mf_debug "Running #{summary}" captured_output = '' captured_errors = '' Open3.popen3("#{library_name}", *arguments) do |stdin, stdout, stderr, wait_thr| captured_output << stdout.read.chomp captured_errors << stderr.read.chomp end STDERR.puts MetricFu::AnalysisError.new(captured_errors) unless captured_errors.empty? rescue StandardError => run_error handle_run_error(run_error) rescue SystemExit => system_exit handle_system_exit(system_exit) ensure print_errors return captured_output end def handle_run_error(run_error) @errors << "ERROR: #{run_error.inspect}" end def handle_system_exit(system_exit) status = system_exit.success? ? "SUCCESS" : "FAILURE" message = "#{status} with code #{system_exit.status}: " << "#{system_exit.message}: #{system_exit.backtrace.inspect}" if status == 'SUCCESS' mf_debug message else @errors << message end end def print_errors return if @errors.empty? STDERR.puts "ERRORS running #{summary}" @errors.each do |error| STDERR.puts "\t" << error end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
metric_fu-4.10.0 | lib/metric_fu/gem_run.rb |