lib/rollbar_helper.rb in rollbar_helper-1.0.0 vs lib/rollbar_helper.rb in rollbar_helper-1.1.0

- old
+ new

@@ -1,57 +1,67 @@ require 'rollbar' require 'rollbar_helper/version' module RollbarHelper LEVELS = [ - :critical, :debug, - :error, :info, :warning, - ] + :error, + :critical, + ].freeze class << self - def critical(obj, fingerprint: nil, **data) - log(:critical, obj, :callee => caller, fingerprint: fingerprint, **data) - end + LEVELS.each do |level| + define_method(level) do |*args| + message, exception, extra = extract_arguments(args) + extra = { callee: caller }.merge(extra) + data, exception, callee, fingerprint = split_extra_arg(extra, exception) - def debug(obj, fingerprint: nil, **data) - log(:debug, obj, :callee => caller, fingerprint: fingerprint, **data) - end + if !message.nil? && exception.nil? + exception = StandardError.new(message).tap do |e| + e.set_backtrace(callee) + end + message = nil + end - def error(obj, fingerprint: nil, **data) - log(:error, obj, :callee => caller, fingerprint: fingerprint, **data) + get_notifier(fingerprint).public_send(level, message, exception, data) + end end - def info(obj, fingerprint: nil, **data) - log(:info, obj, :callee => caller, fingerprint: fingerprint, **data) + def log(level, *args) + raise ArgumentError, 'Log level is not supported' unless LEVELS.include?(level.to_sym) + send(level, { callee: caller }, *args) end - def warn(obj, fingerprint: nil, **data) - log(:warning, obj, :callee => caller, fingerprint: fingerprint, **data) - end + private - def warning(obj, fingerprint: nil, **data) - log(:warning, obj, :callee => caller, fingerprint: fingerprint, **data) - end + def extract_arguments(args) + message = exception = nil + extra = {} - def log(level, obj, callee: caller, fingerprint: nil, **data) - level = level.to_sym - raise ArgumentError, 'Log level is not supported' unless LEVELS.include?(level) - e = nil - - if obj.is_a?(Exception) - e = obj - else - e = StandardError.new(obj.to_s) - e.set_backtrace(callee) + args.each do |arg| + if arg.is_a?(String) + message = arg + elsif arg.is_a?(Exception) + exception = arg + elsif arg.is_a?(Hash) + extra = extra.merge(arg) + end end - unless fingerprint.nil? - ::Rollbar.scope(:fingerprint => fingerprint).send(level, e, data) - else - ::Rollbar.send(level, e, data) - end + [message, exception, extra] + end + + def split_extra_arg(extra, exception) + exception ||= extra.delete(:e) # Core legacy support + callee = extra.delete(:callee) + fingerprint = extra.delete(:fingerprint) + [extra, exception, callee, fingerprint] + end + + def get_notifier(fingerprint) + return Rollbar if fingerprint.nil? + Rollbar.scope(fingerprint: fingerprint) end end end