module RegexpExamples

A common helper used throughout various parser methods

Gem version

Constants

IllegalSyntaxError
VERSION

Public Class Methods

generic_map_result(repeaters, method) click to toggle source
# File lib/regexp-examples/helpers.rb, line 36
def self.generic_map_result(repeaters, method)
  permutations_of_strings(
    repeaters.map { |repeater| repeater.public_send(method) }
  )
end
join_preserving_capture_groups(result) click to toggle source
# File lib/regexp-examples/helpers.rb, line 24
def self.join_preserving_capture_groups(result)
  # Only save the LAST group from repeated capture groups, because
  # e.g. /([ab]){2} \1/.examples should NOT include "ab a"
  # (Hence the need for "reverse"!)
  subgroups = result
              .flat_map(&:all_subgroups)
              .reverse
              .uniq(&:group_id)

  GroupResult.new(result.join, nil, subgroups)
end
permutations_of_strings(arrays_of_strings, max_results_limiter = MaxResultsLimiterByProduct.new) click to toggle source

Given an array of arrays of strings, returns all possible perutations for strings, created by joining one element from each array

For example: permutations_of_strings [ [‘a’], [‘b’], [‘c’, ‘d’, ‘e’] ] #=> [‘abc’, ‘abd’, ‘abe’] permutations_of_strings [ [‘a’, ‘b’], [‘c’, ‘d’] ] #=> [ ‘ac’, ‘ad’, ‘bc’, ‘bd’ ]

Edge case: permutations_of_strings [ [] ] #=> nil (For example, ths occurs during /[^dD]/.examples #=> [])

# File lib/regexp-examples/helpers.rb, line 13
def self.permutations_of_strings(arrays_of_strings,
                                 max_results_limiter = MaxResultsLimiterByProduct.new)
  partial_result = max_results_limiter.limit_results(arrays_of_strings.shift)
  return partial_result if arrays_of_strings.empty?
  partial_result.product(
    permutations_of_strings(arrays_of_strings, max_results_limiter)
  ).map do |result|
    join_preserving_capture_groups(result)
  end
end