From: Mark Thomas Date: 2009-04-28T02:10:06+09:00 Subject: Re: Generating a report from an ugly log file On Apr 27, 6:35 am, Srijayanth Sridhar wrote: > [Note:  parts of this message were removed to make it a legal post.] > > Hello, > > I have the following problem. > > There exists a really ugly debug log file which has mysql query statements. > Looking through the log makes it hard to understand esp while providing > reports to bosses/mgrs etc. so I have decided to make it more "English". I > have over 40 queries, each that can be called in different ways, for > instance: > > 1) select foo1, foo2 from foo where foo1=... etc > 2) select foo1 from foo where foo1= etc > > The basic parsing would be /select(.*)\s+from\s+(.*)(?:\s+where\s+(.*)$)/ # > its a bit more advanced, but its solved and hence not a problem > > #captures[1] will be the table name > > 1) Each table/view is its own class with a to_english method that does the > translation Do you really need this? It may be overkill if the only thing you will do in each of these classes is a to_english method. You could perhaps use a singleton class that contains all the translations. > 2) An abstract class that parses a line from the log file, extracts the > table or view (in this case foo) from the match and generates an object > using eval "#{table.capitalize}.new captures" To avoid eval, use Kernel.const_get(table.capitalize).send(:to_english) where to_english is a class method.