I've developed systems all these years (since 1999) using various programming languages (VB, Delphi, PHP, Java Swing, J2EE, python, ruby). It is exciting to discover new system or new programming techniques or even new frameworks. But when it comes to the real job, you have to decide which technology is suite for you. Since human (mostly) is not a patient being, so I need a fast programing technique to quickly produce the requested system application.
Back in 2005 I created generator for Java Swing using J2SE. The result is fast. I can develop a desktop based application in 5 minutes or less. But writing the generator is painful, it was a long codes.
Today I created a generator using ruby language for php web based application. Even though it's not complete yet...but I'm satisfied because writing the generator codes is shorter, faster and the result is much faster. I'm newbie in Ruby, but I think I'm loving it.
Here is the code snippet:
********************************************
require 'mysql'
#puts "Enter host: "
#host = gets.chomp!
#puts "Enter username: "
#user = gets.chomp!
#puts "Enter password: "
#pass = gets.chomp!
#puts "Enter database: "
#db = gets.chomp!
puts "Generating files..."
conn = Mysql::new("localhost", "ruby", "", "clinic")
begin
res = conn.query("SHOW TABLES");
res.each do |row|
view = File.new("generated/"+row[0]+"_view.php", "w")
form = File.new("generated/"+row[0]+"_form.php", "w")
action = File.new("generated/"+row[0]+"_action.php", "w")
#Creating View++++++++++++++++++++++++++++++++++++
view.write("<? include('header.php'); ?>\n\n")
view.write("
<table width=\"100%\" class=\"frm\">
<tr><td class=\"pagetitle\">"+row[0]+"</td></tr>
</table><br>
<p align=\"left\"><a href=\""+row[0]+"_form.php?comm=create\">Data Baru</a></p>
<table class=\"frm\" align=\"left\">
<tr><th>No.</th>")
res2 = conn.query("DESC "+row[0])
res2.each do |row2|
if row2[0]!="id":
view.write("<th>"+row2[0]+"</th>")
end
end
view.write("<th> </th></tr>
<?
include(\"connection.php\");
$sql = \"SELECT * FROM "+row[0]+"\";
$query = mysql_query($sql);
$row = mysql_fetch_row($query);
$count = 1;
do{
list(")
res2 = conn.query("DESC "+row[0])
res2.each do |row2|
view.write("$"+row2[0]+",")
end
view.write(")=$row;
echo \"
<tr><td>$count</td>")
res2 = conn.query("DESC "+row[0])
res2.each do |row2|
if row2[0]!="id":
view.write("
<td>$"+row2[0]+"</td>")
end
end
view.write("
<td><a href='"+row[0]+"_form.php?comm=update&id=$id'>Edit</a> |
<a href='"+row[0]+"_action.php?id=$id' title='Anda yakin ?'>Hapus</a></td>
</tr>\";
$count++;
}while($row = mysql_fetch_row($query));
?>
</table>
\n")
view.write("\n<? include('footer.php'); ?>\n")
#Creating Form+++++++++++++++++++++++++++++++++++++++++++
form.write("<?\n include('header.php');\n include(\"connection.php\");\n?>\n")
form.write("
<p> </p>
<?
if(isset($_GET['comm'])){
$comm = $_GET['comm'];
echo \"<form method='post' action='"+row[0]+"_action.php'><table class='frm'>
<tr><th colspan='2'>"+row[0]+"</th></tr>\";
if($comm==\"create\"){
echo \"")
res3 = conn.query("DESC "+row[0])
res3.each do |row3|
if row3[0]!='id':
form.write("
<tr>
<td>"+row3[0]+"</td>
<td><input type='text' name='txt"+row3[0]+"'></td>
</tr>\n")
end
end
form.write("
<tr><td colspan='2' align='right'>
<input type='submit' name='submit' value='Simpan'>
<input type='submit' name='submit' value='Batal'>
</td></tr>\";
}elseif($comm==\"update\"){
$id = $_GET['id'];
$sql = \"SELECT * FROM "+row[0]+" WHERE id='$id'\";
$q = mysql_query($sql);
$r = mysql_fetch_row($q);
list(")
res2 = conn.query("DESC "+row[0])
res2.each do |row2|
form.write("$"+row2[0]+",")
end
form.write(")=$r;
echo \"")
res2 = conn.query("DESC "+row[0])
res2.each do |row2|
if row2[0]!='id':
form.write("
<tr>
<td>"+row2[0]+"</td>
<td><input type='text' name='txt"+row2[0]+"' value='$"+row2[0]+"'></td>
</tr>\n")
end
end
form.write("
<tr><td colspan='2' align='right'>
<input type='submit' name='submit' value='Edit'>
<input type='submit' name='submit' value='Batal'>
<input type='hidden' name='id' value='$id'>
</td></tr>\";
}
echo \"</table></form>\";
}
?>\n")
form.write("<? include('footer.php'); ?>\n")
#Creating Action+++++++++++++++++++++++++++++++++++++++++++
action.write("<?
include(\"connection.php\");
if(isset($_POST['submit'])){
$command = $_POST['submit'];\n")
res2 = conn.query("DESC "+row[0])
res2.each do |row2|
action.write(" $"+row2[0]+" = $_POST['txt"+row2[0]+"'];")
action.write("\n")
end
action.write("
if($command==\"Simpan\"){
$sql = \"INSERT INTO "+row[0]+" VALUES('', ")
res2 = conn.query("DESC "+row[0])
rescount = conn.affected_rows()
count = 1
puts row[0].to_s+": "+rescount.to_s
res2.each do |row2|
if row2[0]!="id":
if count == rescount:
action.write("'$"+row2[0]+"'")
else
action.write("'$"+row2[0]+"', ")
end
end
count = count + 1
end
action.write(")\";
if(mysql_query($sql)){
header(\"Location:"+row[0]+"_view.php\");
}else{
echo $sql;
}
}elseif($command==\"Edit\"){
$id = $_POST['id'];
$sql = \"UPDATE "+row[0]+" SET ")
res2 = conn.query("DESC "+row[0])
rescount = conn.affected_rows()
count = 1
res2.each do |row2|
if row2[0]!="id":
if count == rescount:
action.write(row2[0]+"='$"+row2[0]+"'")
else
action.write(row2[0]+"='$"+row2[0]+"', ")
end
end
count = count + 1
end
action.write(" WHERE id='$id'\";
if(mysql_query($sql)){
header(\"Location:"+row[0]+"_view.php\");
}else{
echo $sql;
}
}elseif($command==\"Batal\"){
header(\"Location:"+row[0]+"_view.php\");
}
}else{
$id = $_GET['id'];
if(mysql_query(\"DELETE FROM "+row[0]+" WHERE id=$id\")){
header(\"Location:"+row[0]+"_view.php\");
}else{
echo \"<p>Warning: cannot delete data! Please contact your administrator</p>\";
}
}
?>")
end
rescue SystemCallError
puts "File Exist"
end
puts "done."
********************************************
Maybe there is someone out there wants to correct it, make it more flexible, pluggable, or whatever, please notice me by e-mail.