Module: Julewire::GCP::SourceLocation
- Defined in:
- lib/julewire/gcp/source_location.rb
Class Method Summary collapse
- .call(options) ⇒ Object
- .from_backtrace_line(line) ⇒ Object
- .from_error(error) ⇒ Object
- .line_value(value) ⇒ Object
- .normalize_function(function) ⇒ Object
- .quoted?(byte) ⇒ Boolean
- .split_file_and_line(location) ⇒ Object
- .string_value(value) ⇒ Object
Class Method Details
.call(options) ⇒ Object
11 12 13 14 15 16 17 18 |
# File 'lib/julewire/gcp/source_location.rb', line 11 def call() values = Core::Integration::Values::Shape location = {} values.append_field(location, "file", string_value([:file])) values.append_field(location, "line", line_value([:line])) values.append_field(location, "function", string_value([:function])) location unless location.empty? end |
.from_backtrace_line(line) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/julewire/gcp/source_location.rb', line 30 def from_backtrace_line(line) line = line.to_s index = line.rindex(FUNCTION_SEPARATOR) if index location = line[0, index] function = line[(index + FUNCTION_SEPARATOR.length)..] else location = line function = nil end file, line_number = split_file_and_line(location) return unless line_number call( file: file, line: line_number, function: normalize_function(function) ) end |
.from_error(error) ⇒ Object
20 21 22 23 24 25 26 27 28 |
# File 'lib/julewire/gcp/source_location.rb', line 20 def from_error(error) return unless error.is_a?(Hash) Array(error[:backtrace]).each do |line| location = from_backtrace_line(line) return location if location end nil end |
.line_value(value) ⇒ Object
56 57 58 59 |
# File 'lib/julewire/gcp/source_location.rb', line 56 def line_value(value) string = value.to_s string if string.match?(/\A\d+\z/) end |
.normalize_function(function) ⇒ Object
72 73 74 75 76 77 78 79 80 |
# File 'lib/julewire/gcp/source_location.rb', line 72 def normalize_function(function) return unless function if function.length >= 2 && quoted?(function.getbyte(0)) && quoted?(function.getbyte(-1)) function[1...-1] else function end end |
.quoted?(byte) ⇒ Boolean
82 83 84 |
# File 'lib/julewire/gcp/source_location.rb', line 82 def quoted?(byte) QUOTE_BYTES.include?(byte) end |
.split_file_and_line(location) ⇒ Object
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/julewire/gcp/source_location.rb', line 61 def split_file_and_line(location) index = location.rindex(":") return unless index file = location[0, index] line = location[(index + 1)..] return if file.empty? || !line.match?(/\A\d+\z/) [file, line] end |
.string_value(value) ⇒ Object
50 51 52 53 54 |
# File 'lib/julewire/gcp/source_location.rb', line 50 def string_value(value) return if Core::Integration::Values::Read.blank?(value) value.to_s end |