Class: MiniErb
- Inherits:
-
Object
- Object
- MiniErb
- Defined in:
- lib/mini_erb.rb,
lib/mini_erb/version.rb
Overview
A simplified, streamlined erb replacement.
Constant Summary collapse
- VERSION =
"0.1.3".freeze
- DESCRIPTION =
"mini_erb: A simplified, streamlined erb replacement.".freeze
Instance Attribute Summary collapse
-
#filename ⇒ Object
The optional file name used when the mini_erb code is run.
-
#lineno ⇒ Object
The optional line number used when the mini_erb code is run.
-
#src ⇒ Object
readonly
The Ruby code generated by mini erb.
Instance Method Summary collapse
-
#compile(string) ⇒ Object
Compile the mini erb input.
-
#initialize(string, safe_level = nil, _ = nil, eoutvar = '_erbout') ⇒ MiniErb
constructor
Create a mini_erb object.
-
#location=(filename, lineno) ⇒ Object
Set the file name and optional line number associated with the compiled code.
-
#result(evaluator = new_toplevel) ⇒ Object
Return the mini erb text with embedded Ruby results.
-
#run(evaluator = new_toplevel) ⇒ Object
Generate results and print them.
Constructor Details
#initialize(string, safe_level = nil, _ = nil, eoutvar = '_erbout') ⇒ MiniErb
Create a mini_erb object. Spurious parameter is for erb compatibility.
22 23 24 25 26 |
# File 'lib/mini_erb.rb', line 22 def initialize(string, safe_level=nil, _=nil, eoutvar='_erbout') @safe_level, @eoutvar = safe_level, eoutvar @filename, @lineno = "(mini_erb)", 0 @src = compile(string) end |
Instance Attribute Details
#filename ⇒ Object
The optional file name used when the mini_erb code is run.
10 11 12 |
# File 'lib/mini_erb.rb', line 10 def filename @filename end |
#lineno ⇒ Object
The optional line number used when the mini_erb code is run.
13 14 15 |
# File 'lib/mini_erb.rb', line 13 def lineno @lineno end |
#src ⇒ Object (readonly)
The Ruby code generated by mini erb.
7 8 9 |
# File 'lib/mini_erb.rb', line 7 def src @src end |
Instance Method Details
#compile(string) ⇒ Object
Compile the mini erb input
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/mini_erb.rb', line 29 def compile(string) buffer, suppress = [], false until string.empty? text, code, string = string.partition(/<%.*?%>/m) text.sub!(/\A$\r?\n?/, "") if suppress buffer << "#{@eoutvar}<<#{text.inspect};" unless text.empty? unless code.empty? end_point = (suppress = code[-3] == "-") ? -3 : -2 unless code[2] == "#" if code[2] == "=" buffer << "#{@eoutvar}<<(#{code[3...end_point]}).to_s;" else buffer << "#{code[2...end_point]};" end end end end @eoutvar + "=String.new;" + buffer.join + @eoutvar end |
#location=(filename, lineno) ⇒ Object
Set the file name and optional line number associated with the compiled code.
16 17 18 19 |
# File 'lib/mini_erb.rb', line 16 def location=((filename, lineno)) @filename = filename @lineno = lineno if lineno end |
#result(evaluator = new_toplevel) ⇒ Object
Return the mini erb text with embedded Ruby results.
55 56 57 58 59 60 61 |
# File 'lib/mini_erb.rb', line 55 def result(evaluator = new_toplevel) if @safe_level proc {$SAFE = @safe_level; eval(@src, evaluator, @filename, @lineno)}.call else eval(@src, evaluator, @filename, @lineno) end end |
#run(evaluator = new_toplevel) ⇒ Object
Generate results and print them.
64 65 66 |
# File 'lib/mini_erb.rb', line 64 def run(evaluator = new_toplevel) print result(evaluator) end |