class Rsec::RepeatRange

repeat from range.begin.abs to range.end.abs <br/> note: range's max should always be > 0<br/>

see also helpers

Public Class Methods

[](base, range) click to toggle source
# File lib/rsec/parsers/repeat.rb, line 23
def self.[] base, range
  self.new base, range
end
new(base, range) click to toggle source
# File lib/rsec/parsers/repeat.rb, line 27
def initialize base, range
  @base = base
  @at_least = range.min.abs
  @optional = range.max - @at_least
end

Public Instance Methods

_parse(ctx) click to toggle source
# File lib/rsec/parsers/repeat.rb, line 33
def _parse ctx
  rp_node = []
  @at_least.times do
    res = @base._parse ctx
    return INVALID if INVALID[res]
    rp_node.push res
  end
  @optional.times do
    save = ctx.pos
    res = @base._parse ctx
    if INVALID[res]
      ctx.pos = save
      break
    end
    rp_node.push res
  end
  rp_node
end