Module: Julewire::GCP::SourceLocation

Defined in:
lib/julewire/gcp/source_location.rb

Class Method Summary collapse

Class Method Details

.call(options) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/julewire/gcp/source_location.rb', line 10

def call(options)
  values = Core::Integration::Values::Shape
  location = {}
  values.append_field(location, "file", string_value(options[:file]))
  values.append_field(location, "line", line_value(options[:line]))
  values.append_field(location, "function", string_value(options[:function]))
  location unless location.empty?
end

.from_backtrace_line(line) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/julewire/gcp/source_location.rb', line 29

def from_backtrace_line(line)
  match = BACKTRACE_PATTERN.match(line.to_s)
  return unless match

  call(
    file: match[:file],
    line: match[:line],
    function: match[:quoted] || match[:plain]
  )
end

.from_error(error) ⇒ Object



19
20
21
22
23
24
25
26
27
# File 'lib/julewire/gcp/source_location.rb', line 19

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



46
47
48
49
# File 'lib/julewire/gcp/source_location.rb', line 46

def line_value(value)
  string = value.to_s
  string if string.match?(/\A\d+\z/)
end

.string_value(value) ⇒ Object



40
41
42
43
44
# File 'lib/julewire/gcp/source_location.rb', line 40

def string_value(value)
  return if Core::Integration::Values::Read.blank?(value)

  value.to_s
end