lib/har/viewer.rb in har-0.0.1.dev vs lib/har/viewer.rb in har-0.0.1
- old
+ new
@@ -1,62 +1,87 @@
require "webrick"
require "launchy"
+require "optparse"
module HAR
class Viewer
attr_reader :options, :har
def initialize(args)
@running = false
@options = parse(args)
- hars = create_archives args
- @har = merge hars
+ @har = merge archives_from(args)
end
def show
s = server(create_root)
launch_browser
s.join
end
private
- def create_archives(hars)
+ def archives_from(hars)
hars = hars.map { |path| Archive.from_file(path) }
- hars.each { |h| h.validate! }
+
+ if @options[:validate]
+ progress("Validating archives...") do
+ hars.each { |h| h.validate! }
+ end
+ end
+
+ hars
end
def create_root
- viewer = File.expand_path("../viewer", __FILE__)
- tmp_dir = Dir.mktmpdir("harviewer")
+ progress("Creating viewer...") {
+ viewer = File.expand_path("../viewer", __FILE__)
+ tmp_dir = Dir.mktmpdir("harviewer")
- at_exit { FileUtils.rm_rf tmp_dir }
- FileUtils.cp_r viewer, tmp_dir
+ at_exit { FileUtils.rm_rf tmp_dir }
+ FileUtils.cp_r viewer, tmp_dir
- har.save_to File.join(tmp_dir, 'viewer', url_friendly(@har.uri))
+ har.save_to File.join(tmp_dir, 'viewer', url_friendly(@har.uri))
- tmp_dir
+ tmp_dir
+ }
end
def merge(hars)
- har = hars.shift or raise Error, "no HARs given"
+ progress("Merging hars...") {
+ har = hars.shift or raise Error, "no HARs given"
- unless hars.empty?
- hars.each { |h| har.merge! h }
- end
+ unless hars.empty?
+ hars.each { |h| har.merge! h }
+ end
- har
+ har
+ }
end
DEFAULT_OPTIONS = {
- :port => 9292
+ :port => 9292,
+ :validate => false
}
def parse(args)
- # TODO: parse command line
- DEFAULT_OPTIONS.dup
+ options = DEFAULT_OPTIONS.dup
+
+ OptionParser.new do |opts|
+ opts.banner = "Usage: har [options] [files]"
+
+ opts.on "-p", "--port PORT", Integer do |int|
+ options[:port] = int
+ end
+
+ opts.on "-v", "--validate" do
+ options[:validate] = true
+ end
+ end.parse!(args)
+
+ options
end
def url
"http://localhost:#{port}/viewer/index.html?path=#{url_friendly @har.uri}"
end
@@ -73,11 +98,11 @@
lambda { @running = true }
end
def server(root)
Thread.new do
- puts "Starting HAR Viewer Server..."
+ puts "Starting server..."
puts "Type ^C to exit\n\n"
server = WEBrick::HTTPServer.new(:Port => port,
:DocumentRoot => root,
:StartCallback => start_hook)
@@ -91,9 +116,17 @@
end
def launch_browser
sleep 0.1 until @running
Launchy.open url
+ end
+
+ def progress(msg, &blk)
+ print msg
+ res = yield
+ puts "done."
+
+ res
end
end # Viewer
end # HAR
\ No newline at end of file