class Sgfa::Web::Base

Shared utilities for Web classes to inherit

Constants

HtmlBody
HtmlMessage
HtmlPage

Public Instance Methods

_escape(txt) click to toggle source

Escape URL

# File lib/sgfa/web/base.rb, line 167
def _escape(txt)
  Rack::Utils.escape(txt)
end
_escape_html(txt) click to toggle source

Escape HTML

# File lib/sgfa/web/base.rb, line 160
def _escape_html(txt)
  Rack::Utils.escape_html(txt)
end
_escape_path(txt) click to toggle source

Escape URL using only percent encoding

# File lib/sgfa/web/base.rb, line 174
def _escape_path(txt)
  Rack::Utils.escape_path(txt)
end
_escape_un(txt) click to toggle source

Unescape URL

# File lib/sgfa/web/base.rb, line 181
def _escape_un(txt)
  Rack::Utils.unescape(txt)
end
_navbar(env, act, tabs, base) click to toggle source

Generate a navbar

# File lib/sgfa/web/base.rb, line 143
def _navbar(env, act, tabs, base)
  txt = ''
  tabs.each do |name, url|
    cl = (name == act) ? 'active' : 'link'
    if url
      txt << "<div class='%s'><a href='%s/%s'>%s</a></div>\n" %
        [cl, base, url, name]
    else
      txt << "<div class='other'>%s</div>\n" % name
    end
  end
  return txt
end
_trans(env) click to toggle source

Create a binder transaction

# File lib/sgfa/web/base.rb, line 188
def _trans(env)
  tr = { :user => env['sgfa.user'], :groups => env['sgfa.groups'] }
  tr[:jacket] = env['sgfa.jacket.name'] if env['sgfa.jacket.name']
  return tr
end
response(env) click to toggle source

Generate a response HTML page

# File lib/sgfa/web/base.rb, line 53
def response(env)
  
  # response code
  code = case env['sgfa.status']
    when :badreq; 400
    when :ok; 200
    when :notfound; 404
    when :deny; 402
    when :conflict; 409
    when :servererror; 500
    else; raise 'Response not set'
  end

  # returning a file
  if env['sgfa.file']
    return [code, env['sgfa.headers'], env['sgfa.file']]
  end

  # build the page and headers
  body = HtmlBody % env['sgfa.html']
  msg = env['sgfa.message'] ? (HtmlMessage % env['sgfa.message']) : ''
  html = HtmlPage % [
    env['sgfa.title'],
    env['sgfa.css'],
    env['sgfa.title'],
    _escape_html(env['sgfa.user']),
    env['sgfa.navbar'],
    msg, body
  ]
  head = {
    'Content-Type' => 'text/html; charset=utf-8',
    'Content-Length' => html.bytesize.to_s,
  }

  return [code, head, [html]]
end