module Mergeable def merge(text) q = %(") s = %(\\) text = text.dup text.gsub!('#{', '#{self.') #sanitize text.gsub!(/#\{([^}]*)([^}\w\.])([^}]*)\}/, '') text.gsub!(q, s+q) eval(q + text + q) end endrequire 'ostruct'
# Could be an ActiveRecord Model instead
class MergeStruct < OpenStruct
include Mergeable
endperson = MergeStruct.new({"first_name" => "Kyle", "last_name" => "Maxwell"})
letter = '
Subject: Self-affirmation
Dear #{first_name},
You are cool.
Sincerely,
#{first_name} #{last_name}'.strip
puts person.merge(letter)
Comments