module LapisLazuli::WorldModule::Error
Module with error handling related functionality
Public Instance Methods
error(settings=nil)
click to toggle source
Throw an error based on some settings
Examples: ll.error(“Simple message”) => “Simple message” ll.error(:message => “Simple message”) => “Simple message” ll.error(:env => “test”) => “Environment setting 'test' not found” ll.error(:env => “test”, :exists => true) => “Environment setting 'test' found” ll.error(:screenshot => true, :message => “Simple”) => “Simple”, and screenshot is taken with the message name included.
# File lib/lapis_lazuli/world/error.rb, line 23 def error(settings=nil) # Default message message = nil groups = nil # Default actions screenshot = false exception = nil # Do we have settings if not settings.nil? # Simple string input if settings.is_a? String message = settings elsif settings.is_a? Hash if settings.has_key? :message message = settings[:message] end # Environment errors if settings.has_key? :env # Does the value exist or not? exists = "" if not (settings.has_key?(:exists) or settings[:exists]) exists = ' not' end message = "Environment setting '#{settings[:env]}'" + exists + " found" end if settings.has_key? :scenario message = "Scenario failed: #{settings[:scenario]}" elsif settings.has_key? :not_found message = "Not found: #{settings[:not_found]}" end # Grouping of errors if settings.has_key? :groups grouping = settings[:groups] if grouping.is_a? String groups = [grouping] elsif grouping.is_a? Array groups = grouping end end # Exception message shouldn't get lost if settings.has_key? :exception and not settings[:exception].nil? exception = settings[:exception] if message.nil? message = settings[:exception].message else message = "#{message} - #{settings[:exception].message}" end elsif message.nil? message = "An unknown error occurred." end # Check if we want to take a screenshot if settings.has_key? :screenshot screenshot = !!settings[:screenshot] end end end # Include URL if we have a browser if self.has_browser? message += "\n---[ #{self.browser.url} ]---" end # Add the groups to the message if not groups.nil? message = "[#{groups.join("][")}] #{message}" end # Write the error to the log if self.log self.log.error(message) end # Take screenshot, if necessary if screenshot self.browser.take_screenshot(message) end # Start debugger, if necessary if self.env_or_config("breakpoint_on_error") self.start_debugger end # Raise the message if not exception.nil? # message already contains ex.message here - or it should raise exception.class, message, exception.backtrace else raise message end end
start_debugger()
click to toggle source
If byebug (ruby >= 2.0) or debugger (ruby < 2.0) are installed, start the debugger now.
# File lib/lapis_lazuli/world/error.rb, line 124 def start_debugger # First try the more modern 'byebug' begin require "byebug" byebug rescue LoadError # If that fails, try the older debugger begin require 'debugger' debugger rescue LoadError self.log.info "No debugger found, can't break on failures." end end end