From d24ce55d56beedb601c3718d036a6b22a97231cc Mon Sep 17 00:00:00 2001 From: Kyrylo Silin Date: Mon, 10 Jun 2024 14:04:15 +0300 Subject: [PATCH] Rename Notice to Report --- lib/telebugs.rb | 2 +- lib/telebugs/backtrace.rb | 4 +- lib/telebugs/notifier.rb | 2 +- lib/telebugs/{notice.rb => report.rb} | 27 +++---------- test/{test_notice.rb => test_report.rb} | 50 ++++++++++++------------- 5 files changed, 35 insertions(+), 50 deletions(-) rename lib/telebugs/{notice.rb => report.rb} (68%) rename test/{test_notice.rb => test_report.rb} (52%) diff --git a/lib/telebugs.rb b/lib/telebugs.rb index 2b99af2..31e561b 100644 --- a/lib/telebugs.rb +++ b/lib/telebugs.rb @@ -10,7 +10,7 @@ require_relative "telebugs/notifier" require_relative "telebugs/sender" require_relative "telebugs/wrapped_error" -require_relative "telebugs/notice" +require_relative "telebugs/report" require_relative "telebugs/error_message" require_relative "telebugs/backtrace" require_relative "telebugs/file_cache" diff --git a/lib/telebugs/backtrace.rb b/lib/telebugs/backtrace.rb index ecd1fb7..edbacf6 100644 --- a/lib/telebugs/backtrace.rb +++ b/lib/telebugs/backtrace.rb @@ -7,9 +7,9 @@ module Telebugs module Backtrace module Patterns # The pattern that matches standard Ruby stack frames, such as - # ./spec/notice_spec.rb:43:in `block (3 levels) in ' + # ./spec/report_spec.rb:43:in `block (3 levels) in ' RUBY = %r{\A - (?.+) # Matches './spec/notice_spec.rb' + (?.+) # Matches './spec/report_spec.rb' : (?\d+) # Matches '43' :in\s diff --git a/lib/telebugs/notifier.rb b/lib/telebugs/notifier.rb index 0d3e4fc..c2cab9e 100644 --- a/lib/telebugs/notifier.rb +++ b/lib/telebugs/notifier.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Telebugs - # Notifier is reponsible for sending notices to Telebugs. + # Notifier is reponsible for sending reports to Telebugs. class Notifier class << self attr_writer :instance diff --git a/lib/telebugs/notice.rb b/lib/telebugs/report.rb similarity index 68% rename from lib/telebugs/notice.rb rename to lib/telebugs/report.rb index 4d62f03..456f224 100644 --- a/lib/telebugs/notice.rb +++ b/lib/telebugs/report.rb @@ -3,7 +3,7 @@ module Telebugs # Represents a piece of information that will be sent to Telebugs API to # report an error. - class Notice + class Report # The list of possible exceptions that might be raised when an object is # converted to JSON JSON_EXCEPTIONS = [ @@ -13,32 +13,17 @@ class Notice Encoding::UndefinedConversionError ].freeze - # The maxium size of the JSON payload in bytes - MAX_NOTICE_SIZE = 64000 + # The maxium size of the JSON data in bytes + MAX_REPORT_SIZE = 64000 + + attr_reader :data def initialize(error) - @payload = { + @data = { errors: errors_as_json(error) } end - # Converts the notice to JSON. Calls +to_json+ on each object inside - # notice's payload. Truncates notices, JSON representation of which is - # bigger than {MAX_NOTICE_SIZE}. - def to_json(*_args) - loop do - begin - json = @payload.to_json - rescue *JSON_EXCEPTIONS - # TODO - else - return json if json && json.bytesize <= MAX_NOTICE_SIZE - end - - break if truncate == 0 - end - end - private def errors_as_json(error) diff --git a/test/test_notice.rb b/test/test_report.rb similarity index 52% rename from test/test_notice.rb rename to test/test_report.rb index 3aabe78..45508a8 100644 --- a/test/test_notice.rb +++ b/test/test_report.rb @@ -2,7 +2,7 @@ require "test_helper" -class TestNotice < Minitest::Test +class TestReport < Minitest::Test def fixture_path(filename) File.expand_path(File.join("test", "fixtures", filename)) end @@ -21,35 +21,35 @@ def teardown Telebugs::Config.instance.reset end - def test_to_json_with_nested_errors + def test_as_json_with_nested_errors begin raise StandardError.new("error 1") rescue => _ begin raise StandardError.new("error 2") rescue => e2 - n = Telebugs::Notice.new(e2) + r = Telebugs::Report.new(e2) end end - json = JSON.parse(n.to_json) - error1 = json["errors"][0] - error2 = json["errors"][1] + d = r.data + error1 = d[:errors][0] + error2 = d[:errors][1] - assert_equal "StandardError", error1["type"] - assert_equal "error 2", error1["message"] - assert error1.key?("backtrace") - assert error1["backtrace"].size > 0 - assert_nil error1["backtrace"][0]["code"] + assert_equal "StandardError", error1[:type] + assert_equal "error 2", error1[:message] + assert error1.key?(:backtrace) + assert error1[:backtrace].size > 0 + assert_nil error1[:backtrace][0][:code] - assert_equal "StandardError", error2["type"] - assert_equal "error 1", error2["message"] - assert error2.key?("backtrace") - assert error2["backtrace"].size > 0 - assert_nil error2["backtrace"][0]["code"] + assert_equal "StandardError", error2[:type] + assert_equal "error 1", error2[:message] + assert error2.key?(:backtrace) + assert error2[:backtrace].size > 0 + assert_nil error2[:backtrace][0][:code] end - def test_to_json_code + def test_as_json_code error = RuntimeError.new error.set_backtrace([ "#{project_root_path("code.rb")}:18:in `start'", @@ -57,16 +57,16 @@ def test_to_json_code "#{project_root_path("vendor/bundle/ignored_file.rb")}:2:in `ignore_me'" ]) - n = Telebugs::Notice.new(error) - json = JSON.parse(n.to_json) - backtrace = json["errors"][0]["backtrace"] + r = Telebugs::Report.new(error) + d = r.data + backtrace = d[:errors][0][:backtrace] assert_equal 3, backtrace.size assert_equal( { - "start_line" => 16, - "lines" => [ + start_line: 16, + lines: [ " end", "", " def start", @@ -74,10 +74,10 @@ def test_to_json_code " print \"You: \"" ] }, - backtrace[0]["code"] + backtrace[0][:code] ) - assert_nil backtrace[1]["code"] - assert_nil backtrace[2]["code"] + assert_nil backtrace[1][:code] + assert_nil backtrace[2][:code] end end