lib/cryptosphere/app.rb
require 'cryptosphere'
require 'cryptosphere/git'
require 'cryptosphere/resources/asset'
require 'cryptosphere/resources/home'
module Cryptosphere
# Default address of the webapp
APP_ADDR = "127.0.0.1"
# Default port of the webapp
APP_PORT = 7890
# The Cryptosphere webapp
App = Webmachine::Application.new do |app|
app.routes do
# Git-related routes
# TODO: factor these elsewhere
add ['repos', :repo_id, 'info', 'refs'], Git::Resources::Refs
add ['repos', :repo_id, 'git-receive-pack'], Git::Resources::ReceivePack
# Base web application routes
add ['assets', '*'], Resources::Asset
add ['*'], Resources::Home
end
app.configure do |config|
config.ip = APP_ADDR
config.port = APP_PORT
config.adapter = :Reel
end
end
class RequestLogger
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]
uri = URI(request.uri)
# Translate extended HTTP verbs via the magical query parameter
if request.method == "POST" && request.query['_method']
method = request.query['_method']
else
method = request.method
end
Cryptosphere.logger.info "\"%s %s\" %d %.1fms (%s)" % [
method, uri.path, code, event.duration, resource
]
end
end
Webmachine::Events.subscribe('wm.dispatch', RequestLogger.new)
end