lib/polyfill/v2_3/struct.rb in polyfill-0.6.0 vs lib/polyfill/v2_3/struct.rb in polyfill-0.7.0
- old
+ new
@@ -1,9 +1,28 @@
-require_relative 'struct/instance'
-
module Polyfill
module V2_3
module Struct
- include Instance
+ def dig(head, *rest)
+ [head, *rest].reduce(self) do |value, accessor|
+ next_value =
+ case value
+ when ::Array
+ value.at(accessor)
+ when ::Hash
+ value[accessor]
+ when ::Struct
+ value[accessor] if value.members.include?(accessor)
+ else
+ begin
+ break value.dig(*rest)
+ rescue NoMethodError
+ raise TypeError, "#{value.class} does not have a #dig method"
+ end
+ end
+
+ break nil if next_value.nil?
+ next_value
+ end
+ end
end
end
end