Class: ABNF::Parser::Rules::Repetition

Inherits:
Object
  • Object
show all
Defined in:
lib/abnf/parser/rules/repetition.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rule, range, abnf) ⇒ Repetition

Returns a new instance of Repetition.



9
10
11
12
13
# File 'lib/abnf/parser/rules/repetition.rb', line 9

def initialize rule, range, abnf
  @abnf = abnf
  @rule = rule
  @range = range
end

Instance Attribute Details

#abnfObject (readonly)

Returns the value of attribute abnf.



5
6
7
# File 'lib/abnf/parser/rules/repetition.rb', line 5

def abnf
  @abnf
end

#rangeObject (readonly)

Returns the value of attribute range.



7
8
9
# File 'lib/abnf/parser/rules/repetition.rb', line 7

def range
  @range
end

#ruleObject (readonly)

Returns the value of attribute rule.



6
7
8
# File 'lib/abnf/parser/rules/repetition.rb', line 6

def rule
  @rule
end

Instance Method Details

#==(other_rule) ⇒ Object



15
16
17
18
# 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) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 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

#maximumObject



36
37
38
# File 'lib/abnf/parser/rules/repetition.rb', line 36

def maximum
  range.last
end

#minimumObject



40
41
42
# File 'lib/abnf/parser/rules/repetition.rb', line 40

def minimum
  range.first
end