[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: World's simplest code generator in ruby ?

Gavin Kistner

9/13/2006 3:40:00 PM

From: Mischa Kroon [mailto:www@bloggingabout.net]
> There is an .asp application on the internet which calls itself the
> World's simplest code generator it can be found here:
> http://secretgeek.ne...

Here's my hackish implementation in Ruby:

require 'erb'
require 'csv'

data = <<ENDDATA
tim, fruit, veg, he
sally, whiskey, cigars, she
jimmy, lager, crisps, he
jenny, fightin', cussin', she
ENDDATA

pattern = <<ENDPATTERN
$1 loves $2, but $4 hates $3
%if $2=="whiskey" then
(Hey $1, i also love $2!!!)
%end
ENDPATTERN

# Output all variables that are at the start of the line
template = pattern.gsub( /^\$(\d+)/, '<%=line[\\1-1]%>' )

# Output all variables that are in the middle of a line
while template.gsub!( /^([^%].*)\$(\d+)/, '\\1<%=line[\\2-1]%>' )
end

# Output all variables left over (in ruby code)
template.gsub!( /\$(\d+)/, 'line[\\1-1]' )

# Create the ERB template
template = ERB.new( template, nil, '%' )

# Clean up the data to be true csv
data.gsub!( /,\s+/, ',' )

# Run the template once for each line
output = ""
CSV::Reader.parse( data ){ |line|
output << template.result( binding )
}

puts output
#=> tim loves fruit, but he hates veg
#=> sally loves whiskey, but she hates cigars
#=> (Hey sally, i also love whiskey!!!)
#=> jimmy loves lager, but he hates crisps
#=> jenny loves fightin', but she hates cussin'