# CGI and Methods?

**URL:** <https://www.ruby-forum.com/t/cgi-and-methods/132218>\
**Category:** Ruby\
**Created:** [March 18, 2008, 12:26am UTC](https://www.ruby-forum.com/t/cgi-and-methods/132218 "2008-03-18T00:26:07Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![tonydm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/e495f1/32.png) [@tonydm](https://www.ruby-forum.com/u/tonydm)\
**Post date:** [March 18, 2008, 12:26am UTC](https://www.ruby-forum.com/t/cgi-and-methods/132218/1 "2008-03-18T00:26:07Z")

</div>

Hi all,

I’m trying my hand at scripting cgi in ruby. At the same time I’m  
looking at Rails. So far I love ruby. Still reserving comments on  
Rails. I have a question though. When coding a cgi script, is it  
possible to have methods as I would say in a n my\_app.rb or rails app?  
Below is a script I’m working on to provide a web interface to our  
syslog servers logs for our tech support dept. I would like to DRY this  
up a bit. I’m repeating entirely too much code. I would welcome not  
only a response to my question, but any other suggestions/criticism to  
aid me in my learning process. Thank you very much.

tonyd

#!/usr/local/bin/ruby -w

# 

# Filename: syssearch.cgi

# 

# Description:

# Open log(s) file and do our searching before we begin to send

# data back to the browser. This way we don’t cause the browser to time

out

# (in theory…)

# 

# Inputs: none

require ‘cgi’

cgi = CGI.new

# Our search params passed

search\_string = cgi[‘searchit’]  
slogtype = cgi[‘logtype’]  
smethod = cgi[‘method’]

# Do we have something to search on?

if search\_string.empty?  
puts “Content-type: text/plain\r\n\r\n\n\nCommSpeed  
Log Search\n\n\n”  
puts “

# Please enter a search criteria
”  
puts “\n\n”  
exit  
end
# A hash of possible logs

logs = {‘smtp’ =\> ‘smtp’, ‘mail’ =\> ‘maillog’, ‘mx’ =\> ‘mx’, ‘spam’ =\>  
‘spam’, ‘Dial Up’ =\> ‘radius’, ‘DHCP’ =\> ‘dhcp’ }

if smethod == “CAT”

# Array to hold our search result matches

results = Array.new

# Open file and look for our search string

File.open("/var/log/"+logs[slogtype],  
‘r’).grep(/#{search\_string}/).each do |line|  
results.push(line) # append it to our results array  
end # file is automatically closed

if results.empty?  
# No matches found  
puts “Content-type:  
text/plain\r\n\r\n\n\nCommSpeed Log  
Search\n\n\n”  
puts “

# No DHCP Log Results Found!
”  
puts “\n\n”  
exit  
else  
# Now send results back to browser  
puts “Content-type:  
text/plain\r\n\r\n\n\nCommSpeed Log  
Search\n\n\n”  
puts “
# DHCP Log Results…
”

```
  # Print the results
  results.each do |line|
    puts line+"<br>"
  end

# Close HTML
puts "</BODY>\n</HTML>\n"
            exit

```

end  
end

if smethod == “TAIL”  
#TODO  
#Need to figure out how to tail a file with out search scope in place  
and feed it to the browser window.  
end
