lib/command.rb in dev_commands-0.0.5 vs lib/command.rb in dev_commands-0.0.6
- old
+ new
@@ -1,5 +1,6 @@
+require 'open3'
require_relative('./array.rb')
require_relative('./hash.rb')
require_relative('./timer.rb')
class Command < Hash
@@ -24,10 +25,11 @@
}
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
@@ -39,22 +41,32 @@
ruby = self[:input].gsub("<%","").gsub("%>","")
begin
puts "eval(#{ruby})"
self[:output]=eval(ruby)
- rescue
+ rescue
puts "unable to eval(#{ruby})"
raise "unable to eval(#{ruby})"
end
self[:elapsed] = timer.elapsed_str
self[:end_time] = Time.now
else
- self[:output] = `#{self[:input]}`
- self[:elapsed] = timer.elapsed_str
- self[:end_time] = Time.now
- self[:exit_code]=$?.to_i
+ begin
+ self[:output],self[:error],self[:exit_code]= Open3.capture3(self[:input])
+
+
+ #self[:output] = `#{self[:input]}`
+ self[:elapsed] = timer.elapsed_str
+ self[:end_time] = Time.now
+ #self[:exit_code]=$?.to_i
+ 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
end
@@ -71,15 +83,23 @@
def self.user
ENV['USER'].nil? ? ENV['USERNAME'] : ENV['USER']
end
def to_html
+ if self[:exit_code] == 0
[
- '<h2>',
+ '<div><table><tr><td width="20"></td><td><pre>',
self[:input],
- '</h2>',
- '<ul>',
- map { |k, v| ["<li><strong>#{k}</strong>", v.respond_to?(:to_html) ? v.to_html : "<span>#{v}</span></li>"] },
- '</ul>'
+ '</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