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 0c47ff4..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. @@ -11,5 +14,10 @@ class << self def configure yield Telebugs::Config.instance end + + def notify(error:) + Telebugs::Promise.new(error) do + end + 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/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_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 4bdc367..3170d26 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 Telebugs::Promise, future + end end