module Services::Base::CallLogger

Public Class Methods

prepended(mod) click to toggle source
# File lib/services/modules/call_logger.rb, line 4
def self.prepended(mod)
  mod.extend ClassMethods
  mod.instance_eval do
    def inherited(subclass)
      subclass.extend ClassMethods
      subclass.disable_call_logging if self.call_logging_disabled
    end
  end
end

Public Instance Methods

call(*args, **kwargs) click to toggle source
Calls superclass method
# File lib/services/modules/call_logger.rb, line 30
def call(*args, **kwargs)
  unless self.class.call_logging_disabled
    log "START with args: #{args}, kwargs: #{kwargs}", caller: caller
    start = Time.now
  end
  begin
    result = super
  rescue => e
    log exception_message(e), {}, 'error'
    raise e
  ensure
    log 'END', duration: (Time.now - start).round(2) unless self.class.call_logging_disabled
    result
  end
end
inherited(subclass) click to toggle source
# File lib/services/modules/call_logger.rb, line 7
def inherited(subclass)
  subclass.extend ClassMethods
  subclass.disable_call_logging if self.call_logging_disabled
end

Private Instance Methods

caller() click to toggle source
# File lib/services/modules/call_logger.rb, line 57
def caller
  caller_location = caller_locations(1, 10).detect do |location|
    location.path !~ /\A#{Regexp.escape File.expand_path('../..', __FILE__)}/
  end
  if caller_location.nil?
    nil
  else
    caller_path = caller_location.path
    caller_path = caller_path.sub(%r(\A#{Regexp.escape Rails.root.to_s}/), '') if defined?(Rails)
    [caller_path, caller_location.lineno].join(':')
  end
end
exception_message(e) click to toggle source
# File lib/services/modules/call_logger.rb, line 48
def exception_message(e)
  message = "#{e.class}: #{e.message}"
  e.backtrace.each do |line|
    message << "\n  #{line}"
  end
  message << "\ncaused by: #{exception_message(e.cause)}" if e.respond_to?(:cause) && e.cause
  message
end