Class: TextInterpolator

Inherits:
Object
  • Object
show all
Defined in:
lib/text_interpolator/version.rb,
lib/text_interpolator/text_interpolator.rb

Constant Summary collapse

VERSION =
"1.0.3"

Instance Method Summary collapse

Instance Method Details

#interpolate(object, env = {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
# File 'lib/text_interpolator/text_interpolator.rb', line 3

def interpolate object, env={}
  if object.kind_of? String
    interpolate_string object, env
  elsif object.kind_of? IO
    interpolate_io object, env
  elsif object.kind_of? Hash
    interpolate_hash object
  else
    object
  end
end

#interpolate_hash(hash) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/text_interpolator/text_interpolator.rb', line 33

def interpolate_hash hash
  hash.each do |key, value|
    new_value = interpolate_env_vars value

    hash[key] = new_value if new_value
  end

  env = hash.reduce({}) do |result, value|
    result[value[0]] = value[1]

    result
  end

  begin
    substitutions = false

    hash.each do |key, value|
      if value.index(/\#\{/)
        substitutions = true

        value = value.gsub(/\#{/, '%{')

        hash[key] = StringIO.new(value).read % env
      end
    end
  end while substitutions

  hash
end

#interpolate_io(io, env = {}) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/text_interpolator/text_interpolator.rb', line 22

def interpolate_io io, env={}
  result = ''

  io.each do |line|
    result += interpolate_string(line, env)
    result += '\n' unless io.eof?
  end

  result
end

#interpolate_string(string, env = {}) ⇒ Object



15
16
17
18
19
20
# File 'lib/text_interpolator/text_interpolator.rb', line 15

def interpolate_string string, env={}
  string = interpolate_env_vars string
  string = string.gsub(/\#{/, '%{') if string.index(/\#\{/)

  StringIO.new(string).read % env
end