class Rhino::JSError

Public Class Methods

new(native) click to toggle source
Calls superclass method
# File lib/rhino/error.rb, line 5
def initialize(native)
  @native = native # NativeException wrapping a Java Throwable
  if ( value = self.value(true) ) != nil
    super value.is_a?(Exception) ? "#{value.class.name}: #{value.message}" : value
  else
    super cause ? cause.details : @native
  end
end

Public Instance Methods

backtrace() click to toggle source

The backtrace is constructed using javascript_backtrace + the Ruby part.

Calls superclass method
# File lib/rhino/error.rb, line 60
def backtrace
  if js_backtrace = javascript_backtrace
    js_backtrace.push(*super)
  else
    super
  end
end
cause() click to toggle source

Returns the (nested) cause of this error if any, most likely a #Rhino::JS::JavaScriptException instance.

# File lib/rhino/error.rb, line 26
def cause
  return @cause if defined?(@cause)
  if @native.respond_to?(:cause) && @native.cause
    @native.cause
  else
    @native.is_a?(JS::RhinoException) ? @native : nil
  end
end
inspect() click to toggle source
# File lib/rhino/error.rb, line 14
def inspect
  "#<#{self.class.name}: #{message}>"
end
javascript_backtrace(keep_elements = false) click to toggle source

Returns the JavaScript back-trace part for this error (the script stack).

# File lib/rhino/error.rb, line 69
def javascript_backtrace(keep_elements = false)
  if cause.is_a?(JS::RhinoException)
    cause.getScriptStack.map do |element| # ScriptStackElement[]
      keep_elements ? element : element.to_s
    end
  else
    nil
  end
end
message() click to toggle source

Returns the error message, in case of a native JavaScript value, will return that value converted to a String.

Calls superclass method
# File lib/rhino/error.rb, line 20
def message
  super.to_s # since 1.9.x message is expected to allways be a string
end
unwrap() click to toggle source

Attempts to unwrap the (native) JavaScript/Java exception.

# File lib/rhino/error.rb, line 36
def unwrap
  return @unwrap if defined?(@unwrap)
  cause = self.cause
  if cause && cause.is_a?(JS::WrappedException) 
    e = cause.getWrappedException
    if e && e.is_a?(Java::OrgJrubyExceptions::RaiseException)
      @unwrap = e.getException
    else
      @unwrap = e
    end
  else
    @unwrap = nil
  end
end
value(unwrap = false) click to toggle source

Return the thown (native) JavaScript value.

# File lib/rhino/error.rb, line 52
def value(unwrap = false)
  return @value if defined?(@value) && ! unwrap
  @value = get_value unless defined?(@value)
  return @value.unwrap if unwrap && @value.respond_to?(:unwrap)
  @value
end

Private Instance Methods

get_value() click to toggle source
# File lib/rhino/error.rb, line 83
def get_value
  if ( cause = self.cause ) && cause.respond_to?(:value)
    cause.value  # e.g. JavaScriptException.getValue
  elsif ( unwrap = self.unwrap ) && unwrap.respond_to?(:value)
    unwrap.value
  else
    nil
  end
end