lib/command.rb in dev_commands-0.0.22 vs lib/command.rb in dev_commands-0.0.23

- old
+ new

@@ -1,129 +1,129 @@ -require 'open3' -require_relative('./array.rb') -require_relative('./hash.rb') -require_relative('./timer.rb') - -class Command < Hash - def initialize command - - self[:input] = '' - self[:timeout] = 0 - self[:directory] = '' - self[:exit_code] = 0 - self[:output] = '' - self[:error] = '' - self[:machine] = '' - self[:user] = '' - self[:start_time] = nil - self[:end_time] = nil - - if(command.kind_of?(String)) - self[:input] = command - end - - if(command.kind_of?(Hash)) - command.each{|k,v| - self[k.to_sym]=v - } - end - end - - def execute - puts "#{self[:input]}" - pwd=Dir.pwd - Dir.chdir(self[:directory]) if(self.has_key?(:directory) && File.exists?(self[:directory])) - self[:directory] = pwd if(self[:directory].length==0) - - self[:machine] = Command.machine - self[:user] = Command.user - - self[:start_time]=Time.now - timer=Timer.new - if self[:input].include?('<%') && self[:input].include?('%>') - ruby = self[:input].gsub("<%","").gsub("%>","") - - begin - self[:output]=eval(ruby) - rescue - self[:exit_code]=1 - self[:error]="unable to eval(#{ruby})" - end - - self[:elapsed] = timer.elapsed_str - self[:end_time] = Time.now - else - begin - self[:output],self[:error],status= Open3.capture3(self[:input]) - self[:exit_code]=status.to_i - self[:elapsed] = timer.elapsed_str - self[:end_time] = Time.now - rescue Exception => e - self[:elapsed] = timer.elapsed_str - self[:end_time] = Time.now - self[:error] = "Exception: " + e.to_s - self[:exit_code]=1 - end - end - - Dir.chdir(pwd) if pwd != Dir.pwd - - if(self[:exit_code] != 0) - puts ' ' - puts "exit_code=#{self[:exit_code]}" - puts ' ' - puts self[:output] - puts self[:error] - puts ' ' - if(!self.has_key?(:ignore_failure) || !self[:ignore_failure]) - raise "#{self[:input]} failed" - end #unless (self.has_key?(:ignore_failure) && self[:ignore_failure]==true) - end - end - - def self.machine - if !ENV['COMPUTERNAME'].nil? - return ENV['COMPUTERNAME'] - end - - machine = `hostname` - machine = machine.split('.')[0] if machine.include?('.') - return machine.strip - end - - def self.user - ENV['USER'].nil? ? ENV['USERNAME'] : ENV['USER'] - end - - def self.exit_code command - cmd = Command.new(command) - cmd[:ignore_failure]=true - cmd.execute - cmd[:exit_code] - end - - def self.output command - cmd = Command.new(command) - cmd[:ignore_failure]=true - cmd.execute - cmd[:output] - end - - def to_html - if self[:exit_code] == 0 - [ - '<div><table><tr><td width="20"></td><td><pre>', - self[:input], - '</pre></td></tr></table></div>' - ].join - else - [ - '<div><table><tr><td width="20"></td><td><pre>', - self[:input], - '</pre><table><tr><td width="20"></td><td><table>', - map { |k, v| ["<tr><td><strong>#{k}</strong></td>", v.respond_to?(:to_html) ? v.to_html : "<td><span><pre>#{v}</pre></span></td></tr>"] }, - '</table>', - '</td></tr></table></td></tr></table></div>' - ].join - end - end +require 'open3' +require_relative('./array.rb') +require_relative('./hash.rb') +require_relative('./timer.rb') + +class Command < Hash + def initialize command + + self[:input] = '' + self[:timeout] = 0 + self[:directory] = '' + self[:exit_code] = 0 + self[:output] = '' + self[:error] = '' + self[:machine] = '' + self[:user] = '' + self[:start_time] = nil + self[:end_time] = nil + + if(command.kind_of?(String)) + self[:input] = command + end + + if(command.kind_of?(Hash)) + command.each{|k,v| + self[k.to_sym]=v + } + end + end + + def execute + puts "#{self[:input]}" + pwd=Dir.pwd + Dir.chdir(self[:directory]) if(self.has_key?(:directory) && File.exists?(self[:directory])) + self[:directory] = pwd if(self[:directory].length==0) + + self[:machine] = Command.machine + self[:user] = Command.user + + self[:start_time]=Time.now + timer=Timer.new + if self[:input].include?('<%') && self[:input].include?('%>') + ruby = self[:input].gsub("<%","").gsub("%>","") + + begin + self[:output]=eval(ruby) + rescue + self[:exit_code]=1 + self[:error]="unable to eval(#{ruby})" + end + + self[:elapsed] = timer.elapsed_str + self[:end_time] = Time.now + else + begin + self[:output],self[:error],status= Open3.capture3(self[:input]) + self[:exit_code]=status.to_i + self[:elapsed] = timer.elapsed_str + self[:end_time] = Time.now + rescue Exception => e + self[:elapsed] = timer.elapsed_str + self[:end_time] = Time.now + self[:error] = "Exception: " + e.to_s + self[:exit_code]=1 + end + end + + Dir.chdir(pwd) if pwd != Dir.pwd + + if(self[:exit_code] != 0) + puts ' ' + puts "exit_code=#{self[:exit_code]}" + puts ' ' + puts self[:output] + puts self[:error] + puts ' ' + if(!self.has_key?(:ignore_failure) || !self[:ignore_failure]) + raise "#{self[:input]} failed" + end #unless (self.has_key?(:ignore_failure) && self[:ignore_failure]==true) + end + end + + def self.machine + if !ENV['COMPUTERNAME'].nil? + return ENV['COMPUTERNAME'] + end + + machine = `hostname` + machine = machine.split('.')[0] if machine.include?('.') + return machine.strip + end + + def self.user + ENV['USER'].nil? ? ENV['USERNAME'] : ENV['USER'] + end + + def self.exit_code command + cmd = Command.new(command) + cmd[:ignore_failure]=true + cmd.execute + cmd[:exit_code] + end + + def self.output command + cmd = Command.new(command) + cmd[:ignore_failure]=true + cmd.execute + cmd[:output] + end + + def to_html + if self[:exit_code] == 0 + [ + '<div><table><tr><td width="20"></td><td><pre>', + self[:input], + '</pre></td></tr></table></div>' + ].join + else + [ + '<div><table><tr><td width="20"></td><td><pre>', + self[:input], + '</pre><table><tr><td width="20"></td><td><table>', + map { |k, v| ["<tr><td><strong>#{k}</strong></td>", v.respond_to?(:to_html) ? v.to_html : "<td><span><pre>#{v}</pre></span></td></tr>"] }, + '</table>', + '</td></tr></table></td></tr></table></div>' + ].join + end + end end \ No newline at end of file