Module: Angelo

Defined in:
lib/angelo.rb,
lib/angelo/base.rb,
lib/angelo/main.rb,
lib/angelo/stash.rb,
lib/angelo/server.rb,
lib/angelo/version.rb,
lib/angelo/tilt/erb.rb,
lib/angelo/responder.rb,
lib/angelo/templates.rb,
lib/angelo/params_parser.rb,
lib/angelo/minitest/helpers.rb,
lib/angelo/responder/websocket.rb,
lib/angelo/responder/eventsource.rb

Overview

require ‘ruby-prof’

RubyProf.start RubyProf.pause

Defined Under Namespace

Modules: Minitest, ParamsParser, Stash, Templates, Tilt Classes: Base, FormEncodingError, HALT_STRUCT, RequestError, Responder, Server, SymHash

Constant Summary collapse

GET =
'GET'
PATCH =
'PATCH'
POST =
'POST'
PUT =
'PUT'
DELETE =
'DELETE'
OPTIONS =
'OPTIONS'
HTTPABLE =
[:get, :patch, :post, :put, :delete, :options]
STATICABLE =
[:get, :head]
POST_OVERRIDABLE =
[:patch, :put, :delete]
ACCEPT_REQUEST_HEADER_KEY =
'Accept'
POST_OVERRIDE_REQUEST_HEADER_KEY =
'X-Angelo-PostOverride'
REAL_IP_REQUEST_HEADER_KEY =
'X-Real-IP'
CONTENT_TYPE_HEADER_KEY =
'Content-Type'
CONTENT_DISPOSITION_HEADER_KEY =
'Content-Disposition'
CONTENT_LENGTH_HEADER_KEY =
'Content-Length'
ATTACHMENT_CONTENT_DISPOSITION =
'attachment; filename="%s"'
ETAG_HEADER_KEY =
'ETag'
IF_NONE_MATCH_HEADER_KEY =
'If-None-Match'
LOCATION_HEADER_KEY =
'Location'
SSE_HEADER =
{ CONTENT_TYPE_HEADER_KEY => 'text/event-stream' }
HTML_TYPE =
'text/html'
JSON_TYPE =
'application/json'
FORM_TYPE =
'application/x-www-form-urlencoded'
FILE_TYPE =
'application/octet-stream'
JS_TYPE =
'application/javascript'
XML_TYPE =
'application/xml'
DEFAULT_ADDR =
'127.0.0.1'
DEFAULT_PORT =
4567
DEFAULT_VIEWS_DIR =
'views'
DEFAULT_PUBLIC_DIR =
'public'
DEFAULT_LOG_LEVEL =
::Logger::INFO
DEFAULT_RESPONSE_LOG_LEVEL =
:info
DEFAULT_RESPONSE_HEADERS =
{
  CONTENT_TYPE_HEADER_KEY => HTML_TYPE
}
NOT_FOUND =
'Not Found'
LOG_FORMAT =
'%s - - "%s %s HTTP/%s" %d %s'
DEFAULT_PING_TIME =
30
UNDERSCORE =
'_'
DASH =
'-'
EMPTY_STRING =
''
NEWLINE =
"\n"
SEMICOLON =
';'
EQUALS =
'='
AMPERSAND =
'&'
SSE_DATA_TEMPLATE =
"data: %s\n\n"
SSE_EVENT_TEMPLATE =
"event: %s\ndata: %s\n\n"
VERSION =
'0.5.1'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.response_log_levelObject



81
82
83
# File 'lib/angelo.rb', line 81

def response_log_level
  @response_log_level ||= DEFAULT_RESPONSE_LOG_LEVEL
end

Class Method Details

.log(meth, connection, request, socket, status, body_size = '-') ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/angelo.rb', line 87

def self.log meth, connection, request, socket, status, body_size = '-'

  remote_ip = case
              when request.headers[REAL_IP_REQUEST_HEADER_KEY]
                request.headers[REAL_IP_REQUEST_HEADER_KEY]
              when socket
                socket.peeraddr(false)[3]
              else
                connection.remote_ip rescue 'unknown'
              end

  Celluloid::Internals::Logger.__send__ Angelo.response_log_level, LOG_FORMAT % [
    remote_ip,
    (meth && meth.upcase) || request.method,
    request.url,
    request.version,
    Symbol === status ? HTTP::Response::Status::SYMBOL_CODES[status] : status,
    body_size
  ]

end