diff --git a/lib/mocha/parameter_matchers/has_entry.rb b/lib/mocha/parameter_matchers/has_entry.rb index e511d2363..6bf9a22e6 100644 --- a/lib/mocha/parameter_matchers/has_entry.rb +++ b/lib/mocha/parameter_matchers/has_entry.rb @@ -42,20 +42,10 @@ module ParameterMatchers # def has_entry(*options) # rubocop:disable Naming/PredicateName case options.length + when 0 + raise ArgumentError, 'No arguments. Expecting at least one.' when 1 - case options[0] - when Hash - case options[0].length - when 0 - raise ArgumentError, 'Argument has no entries.' - when 1 - key, value = options[0].first - else - raise ArgumentError, 'Argument has multiple entries. Use Mocha::ParameterMatchers#has_entries instead.' - end - else - raise ArgumentError, 'Argument is not a Hash.' - end + key, value = parse_option(options[0]) when 2 key, value = options else @@ -85,5 +75,24 @@ def mocha_inspect "has_entry(#{@key.mocha_inspect} => #{@value.mocha_inspect})" end end + + private + + # @private + def parse_option(option) + case option + when Hash + case option.length + when 0 + raise ArgumentError, 'Argument has no entries.' + when 1 + option.first + else + raise ArgumentError, 'Argument has multiple entries. Use Mocha::ParameterMatchers#has_entries instead.' + end + else + raise ArgumentError, 'Argument is not a Hash.' + end + end end end diff --git a/test/unit/parameter_matchers/has_entry_test.rb b/test/unit/parameter_matchers/has_entry_test.rb index 8526620bb..feff6c40b 100644 --- a/test/unit/parameter_matchers/has_entry_test.rb +++ b/test/unit/parameter_matchers/has_entry_test.rb @@ -92,6 +92,11 @@ def test_should_raise_argument_error_if_no_entries_are_supplied assert_equal 'Argument has no entries.', e.message end + def test_should_raise_argument_error_if_no_arguments_are_supplied + e = assert_raises(ArgumentError) { has_entry } + assert_equal 'No arguments. Expecting at least one.', e.message + end + def test_should_raise_argument_error_if_multiple_entries_are_supplied e = assert_raises(ArgumentError) do has_entry(:key_1 => 'value_1', :key_2 => 'value_2')