class SiteDiff::Webserver::ResultServer

SiteDiff Result Server.

Public Class Methods

new(port, dir, opts = {}) click to toggle source

Creates a Result Server.

Calls superclass method SiteDiff::Webserver::new
# File lib/sitediff/webserver/resultserver.rb, line 72
def initialize(port, dir, opts = {})
  unless File.exist?(File.join(dir, Report::SETTINGS_FILE))
    raise SiteDiffException,
          "Please run 'sitediff diff' before running 'sitediff serve'"
  end

  @settings = YAML.load_file(File.join(dir, Report::SETTINGS_FILE))
  puts @settings
  @cache = opts[:cache]
  super(port, [dir], opts)
end

Public Instance Methods

open_in_browser(url) click to toggle source

Opens a URL in a browser.

# File lib/sitediff/webserver/resultserver.rb, line 116
def open_in_browser(url)
  commands = %w[xdg-open open]
  cmd = commands.find { |c| which(c) }
  system(cmd, url) if cmd
  cmd
end
server(opts) click to toggle source

TODO: Document what this method does.

Calls superclass method SiteDiff::Webserver#server
# File lib/sitediff/webserver/resultserver.rb, line 86
def server(opts)
  dir = opts.delete(:DocumentRoot)
  srv = super(opts)
  srv.mount_proc('/') do |req, res|
    if req.path == '/'
      res.set_redirect(WEBrick::HTTPStatus::Found,
                       "/files/#{Report::REPORT_FILE_HTML}")
    else
      res.set_redirect(WEBrick::HTTPStatus::TemporaryRedirect,
                       "#{@settings['after']}#{req.path}")
    end
  end

  srv.mount('/files', WEBrick::HTTPServlet::FileHandler, dir, true)
  srv.mount('/cache', CacheServlet, @cache)
  srv.mount('/sidebyside', SideBySideServlet, @cache, @settings)
  srv
end
setup() click to toggle source

Sets up the server.

Calls superclass method SiteDiff::Webserver#setup
# File lib/sitediff/webserver/resultserver.rb, line 107
def setup
  super
  root = uris.first
  puts "Serving at #{root}"
  open_in_browser(root) if @opts[:browse]
end
which(cmd) click to toggle source

TODO: Document what this method does.

# File lib/sitediff/webserver/resultserver.rb, line 125
def which(cmd)
  ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
    file = File.join(path, cmd)
    return file if File.executable?(file)
  end
  nil
end