diff options
-rw-r--r-- | lib/hashie/extensions/deep_fetch.rb | 2 | ||||
-rw-r--r-- | spec/hashie/extensions/deep_fetch_spec.rb | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/lib/hashie/extensions/deep_fetch.rb b/lib/hashie/extensions/deep_fetch.rb index d8746cb..a441934 100644 --- a/lib/hashie/extensions/deep_fetch.rb +++ b/lib/hashie/extensions/deep_fetch.rb @@ -18,7 +18,7 @@ module Hashie begin arg = Integer(arg) if obj.kind_of? Array obj.fetch(arg) - rescue ArgumentError, IndexError => e + rescue ArgumentError, IndexError, NoMethodError => e break block.call(arg) if block raise UndefinedPathError, "Could not fetch path (#{args.join(' > ')}) at #{arg}", e.backtrace end diff --git a/spec/hashie/extensions/deep_fetch_spec.rb b/spec/hashie/extensions/deep_fetch_spec.rb index 3459042..3fd4b1d 100644 --- a/spec/hashie/extensions/deep_fetch_spec.rb +++ b/spec/hashie/extensions/deep_fetch_spec.rb @@ -11,6 +11,7 @@ module Hashie { title: 'Call of the Wild' }, { title: 'Moby Dick' } ], + shelves: nil, location: { address: '123 Library St.' } @@ -62,6 +63,19 @@ module Hashie ) end end + + context 'when the nested object is nil' do + it 'raises an UndefinedPathError' do + expect do + instance.deep_fetch(:library, :shelves, :address) + end.to( + raise_error( + DeepFetch::UndefinedPathError, + 'Could not fetch path (library > shelves > address) at address' + ) + ) + end + end end end end |