Module: RuboCop::SortedMethodsByCall::Compare
- Defined in:
- lib/rubocop/sorted_methods_by_call/compare.rb
Overview
RuboCop::SortedMethodsByCall::Compare provides helpers to compare definition orders and call orders using “ordered subsequence” semantics. It’s used by the cop to check that called methods appear in the same relative order as they are defined (not necessarily contiguously).
Class Method Summary collapse
-
.hashes_ordered_equal?(actual, expected) ⇒ Boolean
Check that each scope’s call list is an ordered subsequence of its definition list.
-
.subsequence?(arr, sub) ⇒ Boolean
Check if
subappears as an ordered (not necessarily contiguous) subsequence ofarr.
Class Method Details
.hashes_ordered_equal?(actual, expected) ⇒ Boolean
Check that each scope’s call list is an ordered subsequence of its definition list.
16 17 18 19 20 21 22 23 24 |
# File 'lib/rubocop/sorted_methods_by_call/compare.rb', line 16 def hashes_ordered_equal?(actual, expected) return false unless actual.is_a?(Hash) && expected.is_a?(Hash) (actual.keys | expected.keys).all? do |k| defs = Array(actual[k]) calls = Array(expected[k]) (calls - defs).empty? && subsequence?(defs, calls) end end |
.subsequence?(arr, sub) ⇒ Boolean
Check if sub appears as an ordered (not necessarily contiguous) subsequence of arr.
31 32 33 34 35 36 37 38 39 |
# File 'lib/rubocop/sorted_methods_by_call/compare.rb', line 31 def subsequence?(arr, sub) return true if sub.nil? || sub.empty? i = 0 sub.all? do |el| i += 1 while i < arr.length && arr[i] != el (i < arr.length).tap { i += 1 } end end |