summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/hashie/extensions/deep_fetch.rb2
-rw-r--r--spec/hashie/extensions/deep_fetch_spec.rb14
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