40
My First Ruby by Murray Steele (aged 31 1 / 2 )

My First Ruby

Embed Size (px)

Citation preview

My FirstRubyby Murray Steele (aged 31 1/2)

Me in 2010Passport photo: Employed by:

Codes mostly in:

Me in 2003Passport photo: Employed by:

Codes mostly in:

I FORSAKE JAVA! I RENOUNCE C++! ALL HAIL the Mighty RUBY!!

Riddle:2.upto(100) { |num|

print "ruby is #{num} times better that java or c++"

}

Work it out...

.... if you dare.

CANCEL

LED

CANCEL

LED

I am all dressed up ready to code me some Ruby. YEAH!!!

You don’t even know Ruby, I’ll make sure you do it right.

@ -24,8 +24,8 @@ class Config < Hash } end - def initialize(name)- self[Config::Name] = name+ def initialize(name=nil)+ self[Config::Name] = name if name != nil end end

@ -24,8 +24,8 @@

- def initialize(name)- self[Config::Name] = name+ def initialize(name=nil)+ self[Config::Name] = name if name != nil

public Config(String name) { if (name != null) { this.put(Config.NAME, name) }}

public Config() { super(null);}

def initialize(name=nil) self[Config::Name] = name↩if name != nilend

For frequent strong language

FUCKNUT

def handleMessage(message) sender = @users.findByEmail(message.header.from[0]) if (sender == nil) return end

message.header.delete('From') message.header['From'] = sender.preferredFromAddress processSubject(message) # modify the subject addListHeaders(message) # add the list headers archive(message) # archive the mail processAttachments(message) # modify attachments sendToMembers(message) # send it out.end

def processSubject(message) sub = message.header.subject.dup prefix = "[" + @config.listHeaders["List"] + "]" i = sub.index(prefix) sub.slice!(i..(i+prefix.length)) if (i != nil) found = 0 re_str = "re: " i = sub.downcase().index(re_str) while (i != nil) sub.slice!(i,re_str.length) i = sub.downcase().index(re_str) found = 1 end prefix = "Re: "+prefix if (found == 1) message.header.subject = prefix + " " + subend

def processSubject(message) sub = message.header.subject.dup prefix = "[" + @config.listHeaders["List"] + "]"

sub.gsub!(/#{Regexp.escape(prefix)}/,'')

if sub =~ /re\:\ /i sub.gsub!(/re\:\ /i, '') prefix = "Re: "+prefix end

message.header.subject = prefix + " " + subend

# this is a loosely extended Hash with some little# things to make it's use more convenientclass ListConfiguration < Hash

# this method is a bit overkill, but by caching # the actual list header object instead of having # to get it from the main config hash each time# we should save some overhead. the ListHeaders # part is the most frequently accessed, because# it contains a lot of varied list info.def listHeaders if @listHeaders.id != self[ListHeaders].id puts "recaching" @listHeaders = self[ListHeaders] end @listHeadersend

@config[ListHeaders]

def listHeaders self[ListHeaders]end

def listHeaders if @listHeaders.id != self[ListHeaders].id puts "recaching" @listHeaders = self[ListHeaders] end @listHeadersend

# these just resolve to unique strings, # used as keys within the config hashName = "name"ListHeaders = "listheaders"

# this is the root directoryBaseDir = "basedir"

log("looking at \"#{part.header.media_type}\"")if !TypesToKeep.include?(part.header.media_type) md = name_regex.match(part.header["Content-Type"]) filename = "null" if md != nil filename = newUniqueFile(AttachmentDir, md[3]) { |f| f.write(part.decode()) } saveAttachmentMetaData(filename, message) else log("error getting filename from \"#{part.header["Content-Type"]}\"") end size = File.size(File.join( base_dir, @config[AttachmentDir], filename ))

def handleMessage(message) sender = @users.findByEmail(message.header.from[0]) if (sender == nil) return end

message.header.delete('From') message.header['From'] = sender.preferredFromAddress processSubject(message) # modify the subject addListHeaders(message) # add the list headers archive(message) # archive the mail processAttachments(message) # modify attachments sendToMembers(message) # send it out.end

#!/home/room206/bin/narffucknut_home = '/home/room206/fucknut'$: << fucknut_home # add our library path to the search path

require 'web'

AddHandler cgi-script .rb

RewriteEngine on

RewriteRule ^(.*)/archives/(.*)$ /handler.rb?↩ listname=$1&mode=archive&$2

listname = Web['listname']if listname != nil and listname != "" # main processing when we have a listname paramelse lists = Config.possible lists = lists.collect { |i| {'name' => i, 'value' => i} } if lists != [] Web.print_template("what_list.html", {'listname' => listname, 'listnamevalues' => lists}) else Web.print_template("generalerror.html", {'error' => "No lists defined, get a better admin"}) endendWeb.flush

<html> <head> <title>Login to {$listname}</title> <link href="/arse.css" rel="stylesheet" type="text/css"> </head> <body> <h1>Error during login to {$listname}</h1> <p>{$error}</p> <narf:form formname="tryagain" method="POST"> <narf:hidden name="listname"> <input type="submit" value="Try Again"> </narf:form> </body></html>

class LoginHandler LoginTemplate = "login.html" LogoutTemplate = "login.html" LoginCommand = "login" LogoutCommand = "logout" def showLogin() @web.print_template( *loginTemplateArgs() ) end def loginTemplateArgs() [LoginTemplate, {"listname" => @web['listname'], "cmd" => LoginCommand}] endend

def showLogin() @web.print_template(LoginTemplate, loginTemplateParams() )end def loginTemplateParams() {"listname" => @web['listname'], "cmd" => LoginCommand}end

def showLogin() @web.print_template(LoginTemplate, {"listname" => @web['listname'], "cmd" => LoginCommand}end

errors = ""commalist = @web['addresses'].gsub(/\n/, ",")list = RMail::Address.parse(commalist)if list.empty? errors += "<br><h2>no valid email addresses given in list</h2>"enduser.addresses = list

sendTo = RMail::Address.parse(@web['sendto'])[0]sendToString = @web['sendto']if nil == sendTo errors += "<br><h2>Send To Address is not valid</h2>" sendToString = "INVALID: " + sendToStringelse sendToString = sendTo.format.to_s user.sendTo = sendToend

/archives/<year>/<month>/<message_id>.msg

if @config[StartYear] < lastyear.year lastyear = "<a href=\"#{baseurl}year=#{lastyear.year}&month=#{lastyear.month}\">&lt;&lt;</a>"elsif @config[StartYear] == lastyear.year if @config[StartMonth] <= lastyear.month lastyear = "<a href=\"#{baseurl}year=#{lastyear.year}&month=#{lastyear.month}\">&lt;&lt;</a>" else lastyear = "&lt;&lt;" endelse lastyear = "&lt;&lt;"end

The End