From 0dcead0b9475a6f763c843a32f4d20f3401f018e Mon Sep 17 00:00:00 2001 From: Marcel Eeken Date: Wed, 5 Nov 2025 16:42:58 +0100 Subject: [PATCH] Add the ability to use compound matchers in the RSpec matchers Before you could only match on exact values, but by using the `values_match?` helper from RSpec it allows the user to use compound matchers provided by RSpec. --- lib/dry/monads/extensions/rspec.rb | 2 +- spec/extensions/rspec_spec.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/dry/monads/extensions/rspec.rb b/lib/dry/monads/extensions/rspec.rb index 261ff53..f901735 100644 --- a/lib/dry/monads/extensions/rspec.rb +++ b/lib/dry/monads/extensions/rspec.rb @@ -61,7 +61,7 @@ module Matchers elsif Undefined.equal?(expected) true elsif exact_match - extract_value.call(actual) == expected + values_match? expected, extract_value.call(actual) else false end diff --git a/spec/extensions/rspec_spec.rb b/spec/extensions/rspec_spec.rb index 796242b..7184e49 100644 --- a/spec/extensions/rspec_spec.rb +++ b/spec/extensions/rspec_spec.rb @@ -11,22 +11,29 @@ expect(Success(1)).to be_success expect(Success(1)).to be_a_success expect(Success(1)).to be_success(1) + expect(Success(1)).to be_success(an_instance_of(Integer)) expect(Success(1)).not_to be_success(2) expect(Success(1)).not_to be_a_success(2) + expect(Success(1)).not_to be_success(an_instance_of(String)) expect(Failure(1)).to be_failure expect(Failure(1)).to be_a_failure expect(Failure(1)).to be_failure(1) + expect(Failure(1)).to be_failure(an_instance_of(Integer)) expect(Failure(1)).not_to be_failure(2) expect(Failure(1)).not_to be_a_failure(2) + expect(Failure(1)).not_to be_failure(an_instance_of(String)) expect(Some(1)).to be_some expect(Some(1)).to be_success expect(Some(1)).to be_some(1) + expect(Some(1)).to be_some(an_instance_of(Integer)) expect(Some(1)).not_to be_some(2) + expect(Some(1)).not_to be_some(an_instance_of(String)) expect(None()).to be_none expect(None()).not_to be_success expect(None()).to be_failure expect(None()).not_to be_some expect(None()).not_to be_some(1) + expect(None()).not_to be_some(an_instance_of(Integer)) expect(List[]).to be_empty expect(List[1, 2, 3]).not_to be_empty end