lib/hotch.rb in hotch-0.0.3 vs lib/hotch.rb in hotch-0.1.0

- old
+ new

@@ -2,14 +2,16 @@ require 'tmpdir' require 'hotch/monkey_patches' class Hotch - attr_reader :name + attr_reader :name, :viewer, :filter - def initialize(name) + def initialize(name, viewer: nil, filter: nil) @name = name + @viewer = viewer + @filter = filter @reports = [] end def start(*args) StackProf.start(*args) unless StackProf.running? @@ -43,21 +45,22 @@ svg = convert_svg(dir, dot, "profile.svg") yield svg end - def report_at_exit(viewer=ENV['HOTCH_VIEWER']) + def report_at_exit return if defined? @at_exit_installed at_exit do stop report do |svg| - puts "Profile SVG: #{svg}" - if viewer + puts "Profile SVG: #{svg}" Kernel.system viewer, svg + else + puts "Profile SVG: view #{svg} # no HOTCH_VIEWER set" end end end @at_exit_installed = true @@ -78,11 +81,11 @@ end def report_dot(report, dir, file) path = File.join(dir, file) File.open(path, 'wb') do |fh| - report.print_graphviz(nil, fh) + report.print_graphviz(filter && Regexp.new(filter), fh) end path end def convert_svg(dir, dot, file) @@ -90,15 +93,15 @@ system("dot", "-Tsvg", "-o", svg, dot) or raise "dot failed" svg end end -def Hotch(aggregate: true) +def Hotch(name: $0, aggregate: true, viewer: ENV['HOTCH_VIEWER'], filter: ENV['HOTCH_FILTER']) hotch = if aggregate - $hotch ||= Hotch.new($0) + $hotch ||= Hotch.new(name, viewer: viewer, filter: filter) else caller = Kernel.caller_locations(1).first - Hotch.new("#$0:#{caller.path}:#{caller.lineno}") + Hotch.new("#{name}:#{caller.path}:#{caller.lineno}", viewer: viewer, filter: filter) end hotch.report_at_exit hotch.run do yield