class Middleman::PreviewServer

def initialize_new_app

def initialize_new_app
  opts = @options.dup
  ::Middleman::Logger.singleton(
    opts[:debug] ? 0 : 1,
    opts[:instrumenting] || false
  )
  app = ::Middleman::Application.new do
    config[:environment] = opts[:environment].to_sym if opts[:environment]
    config[:watcher_disable] = opts[:disable_watcher]
    config[:watcher_force_polling] = opts[:force_polling]
    config[:watcher_latency] = opts[:latency]
    config[:port] = opts[:port] if opts[:port]
    config[:bind_address]    = opts[:bind_address]
    config[:server_name]     = opts[:server_name]
    config[:https]           = opts[:https] unless opts[:https].nil?
    config[:ssl_certificate] = opts[:ssl_certificate] if opts[:ssl_certificate]
    config[:ssl_private_key] = opts[:ssl_private_key] if opts[:ssl_private_key]
    ready do
      match_against = [
        %r{^config\.rb$},
        %r{^environments/[^\.](.*)\.rb$},
        %r{^lib/[^\.](.*)\.rb$},
        %r{^#{config[:helpers_dir]}/[^\.](.*)\.rb$}
      ]
      # config.rb
      watcher = files.watch :reload,
                            path: root,
                            only: match_against
      # Hack around node_modules in root.
      watcher.listener.ignore(/^node_modules/)
      # Hack around sass cache in root.
      watcher.listener.ignore(/^\.sass-cache/)
      # Hack around bundler cache in root.
      watcher.listener.ignore(/^vendor\/bundle/)
    end
  end
  # store configured port to make a check later on possible
  configured_port = app.config[:port]
  # Use configuration values to set `bind_address` etc. in
  # `server_information`
  server_information.use app.config
  app.logger.warn format('== The Middleman uses a different port "%s" then the configured one "%s" because some other server is listening on that port.', server_information.port, configured_port) unless app.config[:port] == configured_port
  @environment = app.config[:environment]
  @ssl_certificate = app.config[:ssl_certificate]
  @ssl_private_key = app.config[:ssl_private_key]
  app.files.on_change :reload do
    $mm_reload = true
    @webrick.stop
  end
  # Add in the meta pages application
  meta_app = Middleman::MetaPages::Application.new(app)
  app.map '/__middleman' do
    run meta_app
  end
  app
end