Class: MiniErb

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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

#filenameObject

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

#linenoObject

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

#srcObject (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