class ABNF::Parser::Rules::Repetition

Attributes

abnf[R]
range[R]
rule[R]

Public Class Methods

new(rule, range, abnf) click to toggle source
# File lib/abnf/parser/rules/repetition.rb, line 9
def initialize rule, range, abnf
  @abnf = abnf
  @rule = rule
  @range = range
end

Public Instance Methods

==(other_rule) click to toggle source
# File lib/abnf/parser/rules/repetition.rb, line 15
def == other_rule
  return false unless other_rule.is_a? self.class
  rule == other_rule.rule and range == other_rule.range
end
call(io, rule_list=nil) click to toggle source
# File lib/abnf/parser/rules/repetition.rb, line 20
def call io, rule_list=nil
  node = Node.repetition abnf

  (0...maximum).each do
    child = rule.(io, rule_list) or break
    node << child
  end

  if node.child_count >= minimum
    node
  else
    io.seek -node.octets, IO::SEEK_CUR
    nil
  end
end
maximum() click to toggle source
# File lib/abnf/parser/rules/repetition.rb, line 36
def maximum
  range.last
end
minimum() click to toggle source
# File lib/abnf/parser/rules/repetition.rb, line 40
def minimum
  range.first
end