lib/trailblazer/finder/utils/deep_locate.rb in trailblazer-finder-0.1.2 vs lib/trailblazer/finder/utils/deep_locate.rb in trailblazer-finder-0.1.3

- old
+ new

@@ -1,37 +1,22 @@ module Trailblazer class Finder module Utils module DeepLocate - def self.deep_locate(comparator, object) - comparator = _construct_key_comparator(comparator, object) unless comparator.respond_to?(:call) - - _deep_locate(comparator, object) - end - - def self._construct_key_comparator(search_key, object) - search_key = search_key.to_s if defined?(::ActiveSupport::HashWithIndifferentAccess) && object.is_a?(::ActiveSupport::HashWithIndifferentAccess) - search_key = search_key.to_s if object.respond_to?(:indifferent_access?) && object.indifferent_access? - - lambda do |non_callable_object| - ->(key, _, _) { key == non_callable_object } - end.call(search_key) - end - - def self._deep_locate(comparator, object, result = []) + def self.deep_locate(comparator, object, result = []) if object.is_a?(::Enumerable) - if object.any? { |value| _match_comparator?(value, comparator, object) } + if object.any? { |value| match_comparator?(value, comparator, object) } result.push object end (object.respond_to?(:values) ? object.values : object.entries).each do |value| - _deep_locate(comparator, value, result) + deep_locate(comparator, value, result) end end result end - def self._match_comparator?(value, comparator, object) + def self.match_comparator?(value, comparator, object) if object.is_a?(::Hash) key, value = value else key = nil end