class RegexpExamples::OrGroup
A boolean “or” group. The implementation is to pass in 2 set of (repeaters of) groups. The simplest example is: /a|b/ If you have more than one boolean “or” operator, then this is initially parsed as an OrGroup
containing another OrGroup
. However, in order to avoid probability distribution issues in Regexp#random_example, this then gets simplified down to one OrGroup
containing 3+ repeaters.
Attributes
repeaters_list[R]
Public Class Methods
new(left_repeaters, right_repeaters)
click to toggle source
# File lib/regexp-examples/groups.rb, line 147 def initialize(left_repeaters, right_repeaters) @repeaters_list = [left_repeaters, *merge_if_orgroup(right_repeaters)] end
Public Instance Methods
random_result()
click to toggle source
# File lib/regexp-examples/groups.rb, line 155 def random_result result_by_method(:random_result).sample(1) end
result()
click to toggle source
# File lib/regexp-examples/groups.rb, line 151 def result result_by_method(:result) end
Private Instance Methods
merge_if_orgroup(repeaters)
click to toggle source
# File lib/regexp-examples/groups.rb, line 171 def merge_if_orgroup(repeaters) if repeaters.size == 1 && repeaters.first.is_a?(OrGroup) repeaters.first.repeaters_list else [repeaters] end end
result_by_method(method)
click to toggle source
# File lib/regexp-examples/groups.rb, line 161 def result_by_method(method) max_results_limiter = MaxResultsLimiterBySum.new repeaters_list .map { |repeaters| RegexpExamples.generic_map_result(repeaters, method) } .map { |result| max_results_limiter.limit_results(result) } .inject(:concat) .map { |result| GroupResult.new(result) } .uniq end