Class: MrBump::RegexTemplate::Generator

Inherits:
Mustache::Generator
  • Object
show all
Defined in:
lib/mr_bump/regex_template.rb

Instance Method Summary collapse

Instance Method Details

#compile(exp) ⇒ Object



29
30
31
# File 'lib/mr_bump/regex_template.rb', line 29

def compile(exp)
  "'#{compile!(exp)}'"
end

#ev(s) ⇒ Object



26
27
28
# File 'lib/mr_bump/regex_template.rb', line 26

def ev(s)
  "' + (#{s}) + '"
end

#make_group(names, regex) ⇒ Object



33
34
35
36
# File 'lib/mr_bump/regex_template.rb', line 33

def make_group(names, regex)
  return regex if names.empty?
  "(?<#{names.join('.')}>#{regex})"
end

#on_etag(name, _offset) ⇒ Object



38
39
40
# File 'lib/mr_bump/regex_template.rb', line 38

def on_etag(name, _offset)
  make_group(name[2], ev(compile!(name).to_s))
end

#on_inverted_section(name, _offset, content, _raw, _delims) ⇒ Object



51
52
53
54
# File 'lib/mr_bump/regex_template.rb', line 51

def on_inverted_section(name, _offset, content, _raw, _delims)
  one_repeat = ev("v = #{compile!(name)}; ctx.push(v); r = '#{compile!(content)}'; ctx.pop; r;")
  make_group( name[2], "(#{one_repeat})?")
end

#on_section(name, _offset, content, _raw, _delims) ⇒ Object



46
47
48
49
# File 'lib/mr_bump/regex_template.rb', line 46

def on_section(name, _offset, content, _raw, _delims)
  one_repeat = ev("v = #{compile!(name)}; ctx.push(v); r = '#{compile!(content)}'; ctx.pop; r;")
  make_group(name[2], "(#{one_repeat})*")
end

#on_utag(name, _offset) ⇒ Object



42
43
44
# File 'lib/mr_bump/regex_template.rb', line 42

def on_utag(name, _offset)
  make_group(name[2], ev(compile!(name).to_s))
end

#str(s) ⇒ Object



22
23
24
# File 'lib/mr_bump/regex_template.rb', line 22

def str(s)
  Regexp.escape(super)
end