Class: ABNF::Parser::RuleList

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.commonObject



58
59
60
61
# File 'lib/abnf/parser/rule_list.rb', line 58

def self.common
  abnf = Common.to_s
  Compiler.(abnf)
end

Instance Method Details

#==(other_rule_list) ⇒ Object



4
5
6
7
8
# File 'lib/abnf/parser/rule_list.rb', line 4

def == other_rule_list
  return false unless other_rule_list.is_a? self.class

  rules == other_rule_list.rules
end

#[](rule_name) ⇒ Object



10
11
12
# File 'lib/abnf/parser/rule_list.rb', line 10

def [] rule_name
  rules[rule_name]
end

#[]=(rule_name, rule) ⇒ Object



14
15
16
# File 'lib/abnf/parser/rule_list.rb', line 14

def []= rule_name, rule
  rules[rule_name] = rule
end

#apply(rule_name, io) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/abnf/parser/rule_list.rb', line 18

def apply rule_name, io
  rule = fetch rule_name

  call_method = rule.method :call

  io = StringIO.new io if io.is_a? String

  rules[rule_name].(io, self)
end

#fetch(rule_name) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/abnf/parser/rule_list.rb', line 28

def fetch rule_name
  rule = rules[rule_name]

  unless rule
    raise Error.new "Rule not found: #{rule_name.inspect}"
  end

  rule
end

#namesObject



38
39
40
# File 'lib/abnf/parser/rule_list.rb', line 38

def names
  rules.keys
end

#replace(rule_name, regexp, max_octets) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/abnf/parser/rule_list.rb', line 42

def replace rule_name, regexp, max_octets
  existing_rule = fetch rule_name
  abnf = existing_rule

  rule = Rules::RegexpPattern.new regexp, abnf, max_octets
  rules[rule_name] = rule
end

#rulesObject



50
51
52
# File 'lib/abnf/parser/rule_list.rb', line 50

def rules
  @rules ||= {}
end

#update(additional_rules) ⇒ Object



54
55
56
# File 'lib/abnf/parser/rule_list.rb', line 54

def update additional_rules
  rules.update additional_rules
end