• G
    Deal with regex match groups in excerpt · 124f88ea
    Gareth Rees 提交于
    Original implementation has bugs if the regex contains a match group.
    
    Example:
    
        excerpt('This is a beautiful? morning', /\b(beau\w*)\b/i, :radius => 5)
        Expected: "...is a beautiful? mor..."
        Actual: "...is a beautifulbeaut..."
    
    The original phrase was being converted to a regex and returning the text
    either side of the phrase as expected:
    
        'This is a beautiful? morning'.split(/beautiful/i, 2)
        # => ["This is a ", "? morning"]
    
    When we have a match with groups the match is returned in the array.
    
    Quoting the ruby docs: "If pattern is a Regexp, str is divided where the
    pattern matches. [...] If pattern contains groups, the respective matches will
    be returned in the array as well."
    
        'This is a beautiful? morning'.split(/\b(beau\w*)\b/iu, 2)
        # => ["This is a ", "beautiful", "? morning"]
    
    If we assume we want to split on the first match – this fix makes that
    assumption – we can pass the already assigned `phrase` variable as the place
    to split (because we already know that a match exists from line 168).
    
    Originally spotted by Louise Crow (@crowbot) at
    https://github.com/mysociety/alaveteli/pull/1557
    124f88ea
text_helper_test.rb 20.8 KB