class Lux::Error

default error handler for lux e = Lux::Error.new 404 e.code => 404 e.message => 'Not Found'

e = Lux::Error.not_found('foo') e.code => 404 e.message => foo

Attributes

message[RW]

Public Class Methods

inline(name, error=nil) click to toggle source

render error inline or break in production

# File lib/lux/error/error.rb, line 114
    def inline name, error=nil
      error ||= $!

      unless Lux.config(:dump_errors)
        key = log error
        render "Lux inline error: %s\n\nkey: %s" % [error.message, key]
      end

      name ||= 'Undefined name'
      msg    = error.message.to_s.gsub('","',%[",\n "]).gsub('<','&lt;')

      dmp = split_backtrace error

      dmp[0] = dmp[0].map { |_| _ = _.split(':', 3); '<b>%s</b> - %s - %s' % _ }

      log error

      <<~TEXT
        <pre style="color:red; background:#eee; padding:10px; font-family:'Lucida Console'; line-height:15pt; font-size:11pt;">
        <b style="font-size:110%;">#{name}</b>

        <b>#{error}: #{msg}</b>

        #{dmp[0].join("\n")}

        #{dmp[1].join("\n")}
        </pre>
      TEXT
    end
log(error) click to toggle source
# File lib/lux/error/error.rb, line 150
def log error
  Lux.config.error_logger.call error
end
new(code_num, message=nil) click to toggle source
# File lib/lux/error/error.rb, line 173
def initialize code_num, message=nil
  self.code = code_num
  @message = message || CODE_LIST[code_num][:name]
end
render(text, status=500) click to toggle source

template to show full error page

# File lib/lux/error/error.rb, line 107
def render text, status=500
  Lux.current.response.status status
  Lux.current.response.body Lux.config.server_error_template.call(text)
  throw :done
end
report(code, msg=nil) click to toggle source
# File lib/lux/error/error.rb, line 144
def report code, msg=nil
  e = Integer === code ? Lux::Error.new(code) : Lux::Error.send(code)
  e.message = msg if msg
  raise e
end
split_backtrace(error) click to toggle source
# File lib/lux/error/error.rb, line 154
def split_backtrace error
  # split app log rest of the log
  dmp = [[], []]

  root = Lux.root.to_s

  error.backtrace.each do |line|
    line = line.sub(root, '.')
    dmp[line[0,1] == '.' ? 0 : 1].push line
  end

  dmp
end

Public Instance Methods

code() click to toggle source
# File lib/lux/error/error.rb, line 178
def code
  # 400 is a default
  @code || 400
end
code=(num) click to toggle source
# File lib/lux/error/error.rb, line 183
def code= num
  @code = num.to_i

  raise 'Status code %s not found' % @code unless CODE_LIST[@code]
end
render() click to toggle source
# File lib/lux/error/error.rb, line 189
def render
  self.class.render message, code
end