diff --git a/assets/tests/ruby/promise_runtime_error.rb b/assets/tests/ruby/promise_runtime_error.rb index 09f5aa7..52715ce 100644 --- a/assets/tests/ruby/promise_runtime_error.rb +++ b/assets/tests/ruby/promise_runtime_error.rb @@ -1,5 +1,5 @@ def test_func - rust_func.and_then lambda { |x| + rust_func.and_then do |x| print('abc' + 5) - } + end end diff --git a/assets/tests/ruby/return_via_promise.rb b/assets/tests/ruby/return_via_promise.rb index fcffa83..c1ec94b 100644 --- a/assets/tests/ruby/return_via_promise.rb +++ b/assets/tests/ruby/return_via_promise.rb @@ -3,7 +3,7 @@ $state = { } def test_func - rust_func.and_then lambda { |x| + rust_func.and_then do |x| $state['x'] = x - } + end end diff --git a/src/runtimes/ruby.rs b/src/runtimes/ruby.rs index c27933a..7a9022b 100644 --- a/src/runtimes/ruby.rs +++ b/src/runtimes/ruby.rs @@ -127,9 +127,13 @@ unsafe impl TypedData for Promise<(), RubyValue> { } } -fn then(r_self: magnus::Value, callback: magnus::Value) -> magnus::Value { +fn then(r_self: magnus::Value) -> magnus::Value { let promise: &Promise<(), RubyValue> = TryConvert::try_convert(r_self).unwrap(); - promise.clone().then(RubyValue::new(callback)).into_value() + let ruby = Ruby::get().unwrap(); + promise + .clone() + .then(RubyValue::new(ruby.block_proc().unwrap().as_value())) + .into_value() } impl Default for RubyRuntime { @@ -147,7 +151,7 @@ impl Default for RubyRuntime { // TODO: maybe put promise in a module , maybe do so for other runtimes too let promise = ruby.define_class("Promise", ruby.class_object()).unwrap(); promise - .define_method("and_then", magnus::method!(then, 1)) + .define_method("and_then", magnus::method!(then, 0)) .unwrap(); })); // TODO: add test for those types for every runtime