From 492bbe2b55ce8861a9a158d2b387c8b1945ede61 Mon Sep 17 00:00:00 2001 From: Kyrylo Silin Date: Thu, 6 Jun 2024 12:51:55 +0300 Subject: [PATCH 1/2] Add #notify and return a future --- lib/telebugs.rb | 5 +++++ telebugs.gemspec | 3 +-- test/test_telebugs.rb | 6 ++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/telebugs.rb b/lib/telebugs.rb index 0c47ff4..41c0488 100644 --- a/lib/telebugs.rb +++ b/lib/telebugs.rb @@ -11,5 +11,10 @@ class << self def configure yield Telebugs::Config.instance end + + def notify(error:) + Concurrent::Promises.future do + end + end end end diff --git a/telebugs.gemspec b/telebugs.gemspec index f0ef706..d49d1f5 100644 --- a/telebugs.gemspec +++ b/telebugs.gemspec @@ -32,8 +32,7 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - # Uncomment to register a new dependency of your gem - # spec.add_dependency "example-gem", "~> 1.0" + spec.add_dependency "concurrent-ruby", "~> 1.3" # For more information and examples about making a new gem, check out our # guide at: https://bundler.io/guides/creating_gem.html diff --git a/test/test_telebugs.rb b/test/test_telebugs.rb index 4bdc367..4ce804a 100644 --- a/test/test_telebugs.rb +++ b/test/test_telebugs.rb @@ -16,4 +16,10 @@ def test_configure_configures_project_key assert_equal key, Telebugs::Config.instance.api_key end + + def test_notify_returns_a_future + future = Telebugs.notify(error: StandardError.new) + + assert_instance_of Concurrent::Promises::Future, future + end end From ea981f712d766a9ef60f1efb7a142670fe054fdf Mon Sep 17 00:00:00 2001 From: Kyrylo Silin Date: Thu, 6 Jun 2024 13:08:23 +0300 Subject: [PATCH 2/2] Add Telebugs::Promise and make Telebugs.notify return it --- .standard.yml | 1 + lib/telebugs.rb | 5 ++++- lib/telebugs/promise.rb | 15 +++++++++++++++ test/test_promise.rb | 11 +++++++++++ test/test_telebugs.rb | 2 +- 5 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 .standard.yml create mode 100644 lib/telebugs/promise.rb create mode 100644 test/test_promise.rb diff --git a/.standard.yml b/.standard.yml new file mode 100644 index 0000000..6b30e78 --- /dev/null +++ b/.standard.yml @@ -0,0 +1 @@ +ruby_version: 3.0 diff --git a/lib/telebugs.rb b/lib/telebugs.rb index 41c0488..354872c 100644 --- a/lib/telebugs.rb +++ b/lib/telebugs.rb @@ -1,7 +1,10 @@ # frozen_string_literal: true +require "concurrent" + require_relative "telebugs/version" require_relative "telebugs/config" +require_relative "telebugs/promise" module Telebugs # The general error that this library uses when it wants to raise. @@ -13,7 +16,7 @@ def configure end def notify(error:) - Concurrent::Promises.future do + Telebugs::Promise.new(error) do end end end diff --git a/lib/telebugs/promise.rb b/lib/telebugs/promise.rb new file mode 100644 index 0000000..8026658 --- /dev/null +++ b/lib/telebugs/promise.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Telebugs + # Wraps Concurrent::Promise to provide a consistent API for promises that we + # can control. + class Promise + def initialize(...) + @future = Concurrent::Promises.future(...) + end + + def value + @future.value + end + end +end diff --git a/test/test_promise.rb b/test/test_promise.rb new file mode 100644 index 0000000..b03f40c --- /dev/null +++ b/test/test_promise.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require "test_helper" + +class TestPromise < Minitest::Test + def test_future_value + promise = Telebugs::Promise.new { 1 + 1 } + + assert_equal 2, promise.value + end +end diff --git a/test/test_telebugs.rb b/test/test_telebugs.rb index 4ce804a..3170d26 100644 --- a/test/test_telebugs.rb +++ b/test/test_telebugs.rb @@ -20,6 +20,6 @@ def test_configure_configures_project_key def test_notify_returns_a_future future = Telebugs.notify(error: StandardError.new) - assert_instance_of Concurrent::Promises::Future, future + assert_instance_of Telebugs::Promise, future end end