Class: MrBump::RegexTemplate::Generator
- Inherits:
-
Mustache::Generator
- Object
- Mustache::Generator
- MrBump::RegexTemplate::Generator
- Defined in:
- lib/mr_bump/regex_template.rb
Instance Method Summary collapse
- #compile(exp) ⇒ Object
- #ev(s) ⇒ Object
- #make_group(names, regex) ⇒ Object
- #on_etag(name, _offset) ⇒ Object
- #on_inverted_section(name, _offset, content, _raw, _delims) ⇒ Object
- #on_section(name, _offset, content, _raw, _delims) ⇒ Object
- #on_utag(name, _offset) ⇒ Object
- #str(s) ⇒ Object
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 |