Class: ExceptionSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/javonet-ruby-sdk/core/exceptions/exception_serializer.rb,
lib/javonet-ruby-sdk/Binaries/Ruby/Linux/X64/core/exceptions/exception_serializer.rb,
lib/javonet-ruby-sdk/Binaries/Ruby/MacOs/X64/core/exceptions/exception_serializer.rb,
lib/javonet-ruby-sdk/Binaries/Ruby/Windows/X64/core/exceptions/exception_serializer.rb

Class Method Summary collapse

Class Method Details

.append_to_string(string, value) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/javonet-ruby-sdk/core/exceptions/exception_serializer.rb', line 43

def self.append_to_string(string, value)
  if value.nil?
    string << "undefined"
  else
    string << value
  end
end

.get_exception_code(exception_name) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/javonet-ruby-sdk/core/exceptions/exception_serializer.rb', line 71

def self.get_exception_code(exception_name)
  case exception_name
  when "Exception"
    return ExceptionType::EXCEPTION
  when "IOError"
    return ExceptionType::IO_EXCEPTION
  when "Errno::ENOENT"
    return ExceptionType::FILE_NOT_FOUND_EXCEPTION
  when "RuntimeError"
    return ExceptionType::RUNTIME_EXCEPTION
  when "ZeroDivisionError"
    return ExceptionType::ARITHMETIC_EXCEPTION
  when "ArgumentError"
    return ExceptionType::ILLEGAL_ARGUMENT_EXCEPTION
  when "IndexError"
    return ExceptionType::INDEX_OUT_OF_BOUNDS_EXCEPTION
  when "TypeError"
    return ExceptionType::NULL_POINTER_EXCEPTION
  else
    return exception_name
  end
end

.parse_stack_frame(stack_frame) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/javonet-ruby-sdk/core/exceptions/exception_serializer.rb', line 51

def self.parse_stack_frame(stack_frame)
  # Extract the file path, line number, and method name using regular expressions
  match = /(.+):(\d+):in `(.+)'/.match(stack_frame)

  # Extract the name of the file without the full path
  file_name = File.basename(match[1])

  # Extract the class name and method name
  method_name = match[3]
  file_name = File.basename(match[1], ".rb")
  class_name = file_name.split('_').map(&:capitalize).join('')
  if method_name =~ /(.+)#(.+)/
    class_name = $1.split('::')[-1]
    method_name = $2
  end

  # Return the four variables as an array
  [match[1], class_name, match[2], method_name]
end

.serialize_exception(exception, command) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/javonet-ruby-sdk/core/exceptions/exception_serializer.rb', line 5

def self.serialize_exception(exception, command)
  exception_command = Command.new(RuntimeName::RUBY, CommandType::EXCEPTION, [])

  stack_trace = exception.backtrace
  exception_message = exception.message
  exception_name = exception.class
  stack_classes = ""
  stack_methods = ""
  stack_lines = ""
  stack_files = ""
  stack_trace.each_with_index do |value, index|
    stack_file, stack_class, stack_line, stack_method = parse_stack_frame(value)
    unless stack_file.include?("javonet-ruby-sdk") or stack_file.include?("Binaries/Ruby")
      append_to_string(stack_classes, stack_class)
      append_to_string(stack_methods, stack_method)
      append_to_string(stack_lines, stack_line)
      append_to_string(stack_files, stack_file)
      if index != stack_trace.length() - 1
        append_to_string(stack_classes, "|")
        append_to_string(stack_methods, "|")
        append_to_string(stack_lines, "|")
        append_to_string(stack_files, "|")
      end
    end
  end

  exception_command = exception_command.add_arg_to_payload(get_exception_code(exception_name.to_s))
  exception_command = exception_command.add_arg_to_payload(command.to_string)
  exception_command = exception_command.add_arg_to_payload(exception_name.to_s)
  exception_command = exception_command.add_arg_to_payload(exception_message)
  exception_command = exception_command.add_arg_to_payload(stack_classes)
  exception_command = exception_command.add_arg_to_payload(stack_methods)
  exception_command = exception_command.add_arg_to_payload(stack_lines)
  exception_command = exception_command.add_arg_to_payload(stack_files)

  return exception_command
end