require 'webmachine'
require 'time'
require 'logger'

class HelloResource < Webmachine::Resource
  def to_html
    "<html><head><title>Hello from Webmachine</title></head><body>Hello, world!</body></html>\n"
  end
end

class LogListener
  def call(*args)
    handle_event(Webmachine::Events::InstrumentedEvent.new(*args))
  end

  def handle_event(event)
    request = event.payload[:request]
    resource = event.payload[:resource]
    code = event.payload[:code]

    puts '[%s] method=%s uri=%s code=%d resource=%s time=%.4f' % [
      Time.now.iso8601, request.method, request.uri.to_s, code, resource,
      event.duration
    ]
  end
end

Webmachine::Events.subscribe('wm.dispatch', LogListener.new)

App = Webmachine::Application.new do |app|
  app.routes do
    add_route [], HelloResource
  end

  app.configure do |config|
    config.adapter = :WEBrick
    config.adapter_options = {AccessLog: [], Logger: Logger.new(File::NULL)}
  end
end

App.run