#!/usr/bin/env ruby
#
# This script let you expand an ERB template from the command line
# while optionally passing variables that will be expanded in the
# template.
#
# Joint copyright:
# Copyright 2012, Antoine "hashar" Musso
# Copyright 2012, Wikimedia Foundation
# Command line option parsing library
require 'optparse'
require 'erb'
require 'ostruct'
# Filename of the ERB template we are going to expand
$filename = nil
# Parsing the options
optparse = OptionParser.new do |opts|
opts.banner = "Usage: expanderb.rb -f FILENAME [key=val [key2=val]]"
opts.on( '-f', '--filename FILENAME', 'ERB filename to expand') do |f|
$filename = f
end
opts.on_tail( '-h', '--help', 'Show this message' ) do
puts opts
exit
end
end
# Parse command line options.
begin
# -f is mandatory
optparse.parse!
if $filename.nil?
puts "You must specify an ERB filename."
puts optparse
exit
end
rescue
# Catch all
puts $!.to_s
puts optparse
exit
end
template_values = {}
ARGV.each do |val|
key, value = val.split( '=' )
template_values[key] = value
end
p template_values
def render_erb(template, locals)
# Make sure we can render templates with -%> closing tags.
# Note that this does not actually remove newlines after -%>, it just
# avoids a syntax error.
ERB.new(template, nil, '%<>-').result(OpenStruct.new(locals).instance_eval { binding })
end
# Parse template
begin
puts render_erb(File.read($filename), template_values)
rescue
p "Something went wrong, usually because you are missing a variable."
p $!.to_s
end