lib/ass_launcher/support/shell.rb in ass_launcher-0.1.1.alpha vs lib/ass_launcher/support/shell.rb in ass_launcher-0.2.0

- old
+ new

@@ -29,11 +29,11 @@ yield(config) end # Configuration for {AssLauncher} class Configuration - attr_accessor :logger + attr_reader :logger def initialize @logger = Loggining.default_logger end @@ -111,21 +111,46 @@ # @option options [Boolean] :capture_assout capture assoutput. # Default true # @option options [Boolean]:silent_mode run 1C with # /DisableStartupDialogs and /DisableStartupMessages parameters. # Default true + # @raise [ArgumentError] when +capture_assout: true+ and +args+ + # include +/OUT+ parameter def initialize(cmd, args = [], options = {}) @options = DEFAULT_OPTIONS.merge(options).freeze @cmd = cmd @args = args + validate_args @args += _silent_mode @ass_out_file = _ass_out_file end + def validate_args + fail ArgumentError, + 'Duplicate of /OUT parameter.'\ + ' Delete /OUT from args or set option capture_assout: false' if\ + duplicate_param_out? + end + private :validate_args + + def duplicate_param_out? + capture_assout? && args_include?(%r{\A\/OUT\z}i) + end + private :duplicate_param_out? + + def args_include?(regex) + args.grep(regex).size > 0 + end + private :args_include? + + def capture_assout? + options[:capture_assout] + end + # @return [true] if command was already running def running? - ! process_holder.nil? + !process_holder.nil? end # Run command # @param options [Hash] options for Process.spawn # @return [ProcessHolder] @@ -149,11 +174,11 @@ out_file end private :_out_ass_argument def _ass_out_file - if options[:capture_assout] + if capture_assout? out_file = AssOutFile.new(options[:assout_encoding]) _out_ass_argument out_file else StringIO.new end @@ -278,11 +303,11 @@ # @api private class RunAssResult class UnexpectedAssOut < StandardError; end class RunAssError < StandardError; end attr_reader :out, :assout, :exitstatus, :err - attr_accessor :expected_assout + attr_reader :expected_assout def initialize(exitstatus, out, err, assout) @err = err @out = out @exitstatus = exitstatus @assout = assout @@ -297,12 +322,14 @@ fail UnexpectedAssOut, cut_assout unless expected_assout? fail RunAssError, "#{err}#{cut_assout}" unless success? self end + CUT_ASSOUT_LENGTH = 640 + def cut_assout - return assout if assout.size <= 80 - "#{assout[0, 80]}..." + return assout if assout.size <= CUT_ASSOUT_LENGTH + "#{assout[0, CUT_ASSOUT_LENGTH].strip}..." end private :cut_assout # @api public def success?