Method: DeepEnumerable#deep_intersect
- Defined in:
- lib/deep_enumerable.rb
#deep_intersect(other, &block) ⇒ Object
Describes the similarities between two DeepEnumerables.
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/deep_enumerable.rb', line 167 def deep_intersect(other, &block) (shallow_keys + other.shallow_keys).each_with_object(empty) do |key, res| s_val = (self[key] rescue nil) #TODO don't rely on rescue o_val = (other[key] rescue nil) comparator = block || :==.to_proc if s_val.respond_to?(:deep_intersect) && o_val.respond_to?(:deep_intersect) int = s_val.deep_intersect(o_val, &block) res[key] = int if int.any? elsif comparator.call(s_val, o_val) res[key] = s_val end end end |