class RShade::EventSerializer

Constants

SERIALIZE_CLASSES

Attributes

evt[R]
level[R]

Public Class Methods

new(evt, level) click to toggle source
# File lib/rshade/event_serializer.rb, line 6
def initialize(evt, level)
  @evt = evt
  @level = level
end

Public Instance Methods

call() click to toggle source
# File lib/rshade/event_serializer.rb, line 11
def call
  { level: @level, path: evt.path, lineno: evt.lineno, klass: evt.defined_class, method_name: evt.method_id, vars: process_locals(evt) }
end
process_locals(evt) click to toggle source
# File lib/rshade/event_serializer.rb, line 15
def process_locals(evt)
  vars = {}
  evt.binding.local_variables.each do |var|
    local_var = evt.binding.local_variable_get var
    if SERIALIZE_CLASSES.any? { |klass| local_var.is_a?(klass) }
      vars[var] = local_var
    elsif local_var.is_a?(Hash)
      vars[var] = shallow_copy_of_hash(local_var)
    else
      class_name =  local_var.is_a?(Class) ? local_var.to_s : local_var.class.to_s
      vars[var] = "FILTERED[#{class_name}]"
    end
  end
  vars
end
shallow_copy_of_hash(hash) click to toggle source

TODO: work on more efficient way to serialize hash

# File lib/rshade/event_serializer.rb, line 32
def shallow_copy_of_hash(hash)
  {}.tap do |new_hash|
    hash.each do |k,v|
      new_hash[k] = v.to_s
    end
    new_hash
  end
end