[#33161] Call/CC and Ruby iterators. — olczyk@... (Thaddeus L Olczyk)

Reading about call/cc in Scheme I get the impression that it is very

11 messages 2002/02/05

[#33242] favicon.ico — Dave Thomas <Dave@...>

19 messages 2002/02/06
[#33256] Re: favicon.ico — Leon Torres <leon@...> 2002/02/06

[#33435] Reg: tiny contest: who's faster? (add_a_gram) — grady@... (Steven Grady)

> My current solution works correctly with various inputs.

17 messages 2002/02/08

[#33500] Ruby Embedded Documentation — William Djaja Tjokroaminata <billtj@...>

Hi,

24 messages 2002/02/10
[#33502] Re: Ruby Embedded Documentation — "Lyle Johnson" <ljohnson@...> 2002/02/10

> Now, I am using Ruby on Linux, and I have downloaded Ruby version

[#33615] Name resolution in Ruby — stern@... (Alan Stern)

I've been struggling to understand how name resolution is supposed to

16 messages 2002/02/11

[#33617] choice of HTML templating system — Paul Brannan <paul@...>

I am not a web developer, nor do I pretend to be one.

23 messages 2002/02/11

[#33619] make first letter lowercase — sebi@... (sebi)

hello,

20 messages 2002/02/11
[#33620] Re: [newbie] make first letter lowercase — Tobias Reif <tobiasreif@...> 2002/02/11

sebi wrote:

[#33624] Re: [newbie] make first letter lowercase — "Jeff 'japhy' Pinyan" <jeffp@...> 2002/02/11

On Feb 11, Tobias Reif said:

[#33632] Re: [newbie] make first letter lowercase — Mathieu Bouchard <matju@...> 2002/02/12

[#33731] simple XML parsing (greedy / non-greedy — Ron Jeffries <ronjeffries@...>

Suppose I had this text

14 messages 2002/02/13

[#33743] qualms about respond_to? idiom — David Alan Black <dblack@...>

Hi --

28 messages 2002/02/13
[#33751] Re: qualms about respond_to? idiom — Dave Thomas <Dave@...> 2002/02/13

David Alan Black <dblack@candle.superlink.net> writes:

[#33754] Re: qualms about respond_to? idiom — David Alan Black <dblack@...> 2002/02/13

Hi --

[#33848] "Powered by Ruby" banner — Yuri Leikind <YuriLeikind@...>

Hello Ruby folks,

78 messages 2002/02/14
[#33909] Re: "Powered by Ruby" banner — Leon Torres <leon@...> 2002/02/14

On Thu, 14 Feb 2002, Yuri Leikind wrote:

[#33916] RE: "Powered by Ruby" banner — "Jack Dempsey" <dempsejn@...> 2002/02/15

A modest submission:

[#33929] Re: "Powered by Ruby" banner — yet another bill smith <bigbill.smith@...> 2002/02/15

Kent Dahl wrote:

[#33932] OT Netscape 4.x? was Re: "Powered by Ruby" banner — Chris Gehlker <gehlker@...> 2002/02/15

On 2/15/02 5:54 AM, "yet another bill smith" <bigbill.smith@verizon.net>

[#33933] RE: OT Netscape 4.x? was Re: "Powered by Ruby" banner — "Jack Dempsey" <dempsejn@...> 2002/02/15

i just don't understand why it didn't show up! dhtml/javascript, ok, but a

[#33937] Re: OT Netscape 4.x? was Re: "Powered by Ruby" banner — Chris Gehlker <gehlker@...> 2002/02/15

On 2/15/02 7:16 AM, "Jack Dempsey" <dempsejn@georgetown.edu> wrote:

[#33989] Re: OT OmniWeb [was: Netscape 4.x?] — Sean Russell <ser@...> 2002/02/16

Chris Gehlker wrote:

[#33991] Re: OT OmniWeb [was: Netscape 4.x?] — Rob Partington <rjp@...> 2002/02/16

In message <3c6e5e01_1@spamkiller.newsgroups.com>,

[#33993] Re: OT OmniWeb [was: Netscape 4.x?] — Thomas Hurst <tom.hurst@...> 2002/02/16

* Rob Partington (rjp@browser.org) wrote:

[#33925] Re: "Powered by Ruby" banner — Martin Maciaszek <mmaciaszek@...> 2002/02/15

In article <3C6CFCCA.5AD5CA67@scnsoft.com>, Yuri Leikind wrote:

[#33956] Re: "Powered by Ruby" banner — Leon Torres <leon@...> 2002/02/15

On Fri, 15 Feb 2002, Martin Maciaszek wrote:

[#33851] Ruby and .NET — Patrik Sundberg <ps@...>

I have been reading a bit about .NET for the last couple of days and must say

53 messages 2002/02/14

[#34024] Compiled companion language for Ruby? — Erik Terpstra <erik@...>

Hmmm, seems that my previous post was in a different thread, I'll try

12 messages 2002/02/16

[#34036] The GUI Returns — "Horacio Lopez" <vruz@...>

Hello all,

33 messages 2002/02/17

[#34162] Epic4/Ruby — Thomas Hurst <tom.hurst@...>

Rejoice, for you no longer have to put up with that evil excuse for a

34 messages 2002/02/18

[#34185] Operator overloading and multiple arguments — ptkwt@...1.aracnet.com (Phil Tomson)

I'm trying to overload the '<=' operator in a class in order to use it for

10 messages 2002/02/18

[#34217] Ruby for web development — beripome@... (Billy)

Hi all,

21 messages 2002/02/19

[#34350] FAQ for comp.lang.ruby — "Hal E. Fulton" <hal9000@...>

RUBY NEWSGROUP FAQ -- Welcome to comp.lang.ruby! (Revised 2001-2-18)

15 messages 2002/02/20

[#34375] Setting the Ruby continued — <jostein.berntsen@...>

Hi,

24 messages 2002/02/20
[#34384] Re: Setting the Ruby continued — Paulo Schreiner <paulo@...> 2002/02/20

Also VERY important:

[#34467] recursive require — Ron Jeffries <ronjeffries@...>

I'm having a really odd thing happen with two files that mutually

18 messages 2002/02/21

[#34503] special characters — Tobias Reif <tobiasreif@...>

Hi all,

13 messages 2002/02/22

[#34517] Windows Installer Ruby 166-0 available — Andrew Hunt <andy@...>

16 messages 2002/02/22

[#34597] rdoc/xml questions — Dave Thomas <Dave@...>

24 messages 2002/02/23

[#34631] Object/Memory Management — "Sean O'Dell" <sean@...>

I'm new to Ruby and the community here (I've been learning Ruby for a grand

44 messages 2002/02/23

[#34682] duplicate method name — Ron Jeffries <ronjeffries@...>

I just found a case in a test file where i had two tests of the same

16 messages 2002/02/24
[#34687] Re: duplicate method name — s@... (Stefan Schmiedl) 2002/02/24

Hi Ron.

[#34791] Style Question — Ron Jeffries <ronjeffries@...>

So I'm building this set theory library. The "only" object is supposed

13 messages 2002/02/25

[#34912] RCR?: parallel to until: as_soon_as — Tobias Reif <tobiasreif@...>

Hi,

18 messages 2002/02/26

[#34972] OT A Question on work styles — Chris Gehlker <gehlker@...>

As a Mac baby I just had to step through ruby in GDB *from the command line*

20 messages 2002/02/28

[#35015] Time Comparison — "Sean O'Dell" <sean@...>

I am using the time object to compare times between two files and I'm

21 messages 2002/02/28

Re: ruby-mda

From: Matt Armstrong <matt@...>
Date: 2002-02-06 17:04:42 UTC
List: ruby-talk #33246
Thomas Hurst <tom.hurst@clara.net> writes:

> After seeing the huge ugly mess of procmail's code, I'm feeling a
> compulsion to change.

http://www.lickey.com/rubymail/ is the result of similar feelings on
my part.  It is a work in progress.

Another Ruby solution is Scarlet.  It is much more mature but is
mainly documented in Japanese so I don't know too many details.  :-)
It does lack one thing I like about my solution -- in RubyMail the
mail filter script is written in pure Ruby.


> The most "standard" alternative seems to be maildrop, which at least
> looks fairly clean and has a much more readable filter language.

True, but it is a crippled little filtering language akin to procmail.
I.e. to do anything complex you have to shell out to an external
command.


> But it still lacks some features I want, such as the ability to
> queue messages and perform higher level comparisons on them to, for
> instance, intelligently deal with dupes in group replies (try
> filtering on X-Mailing-List: headers and tell me to use formail and
> a message id cache..)

Yeah, this is often the kind of stuff you often want or need a "real"
language to do.


> Then I started thinking about how to use ruby as a filter language;

[...]

> queue = Queue.new(20, '3 min')
> queue.prune_dupes
> queue.run do |mail|

Not sure what you mean here...does this read form your inbox or
something?

>         mail.cc('Backup')
>         if list = MailingList.filter(mail)
>                 mail.deliver('lists/' + list)
>         end
>         mail.filter('/usr/local/bin/spamassassin -P')
>         if mail.header.match(/^X-Spam-Flag: Yes/)
>                 mail.deliver('SPAM')
>         end
>         mail.deliver('Inbox')

Yeah, I have basic mail handling classes (Mail::Message,
Mail::Header), basic classes use to parse messages (Mail::Parser) and,
soon, a basic class used to print a message to an output stream
(Mail::Printer -- class name is undecided!).  In the design of these
classes I'm finding I'm stealing lots of ideas from Python's email
library and to a lesser extent Perl's Mail::Internet and MIME-tools
packages, and Ruby's TMail.

Then I have a Mail::LDA (local delivery agent) class that makes it
easy to write mail filters without worrying about a random exception
in your code causing a bounce.

Then there is an rdeliver.rb script that uses Mail::LDA and friends to
parse a message from stdin.  It then creates a Deliver class, and
evals the user's ~/.rdeliver file within the context of that class,
which is responsible for defining Deliver#main.  The script then
instantiates a Deliver object can calls Deliver#main.

The simplest possible .rdeliver file is:

    def main
        lda.save("inbox")
    end

This defines a Deliver#main method that saves the message to a unix
mbox file called "inbox" in the user's home directory.

Here is some snippets from my .rdeliver file.  There is some stuff
here that could be factored out into nicer pieces/modules.  But you'll
get the idea.  Remember, this is evaluated in the context of the
Deliver class, so each def here adds a method to the Deliver class.

def spool_save(folder, continue = false)
  lda.save(".incoming/#{folder}.spool", continue)
end

def save_if_list(list, folder)
  name, domain = list.split(/@/).collect { |s| Regexp.quote(s) }
  if h.match?(/^((Resent-)?Sender|Errors-To|X-Loop|(X-)?Mailing-List)$/i, /(owner-)?#{name}(-request|-help|-admin|-bounce|-errors|-owner)?@#{domain}/im) ||
      h.match?(/(List-Id|X-Mailing-List)$/i, /<#{name}.#{domain}>/im) ||
      h.match?("x-ml-name", /^\s*#{name}([^ \t]|$)/im) ||
      h.match?(/^(to|cc)$/i, /#{name}@#{domain}/im)
    spool_save("list.#{folder}")
  end
end

# This function checks if a given +ip+ is listed by the indicated DNS
# blackhole list +service+.  It returns a text string indicating why
# the ip was blocked if listed, or nil if not listed.
#
# This function relies on the 'host' external command.
def dnsbl(ip, service)
  if ip =~ /\A\d+\.\d+\.\d+\.\d+\z/
    ip.untaint
  end
  raise "bad ip #{ip.inspect}" if ip.tainted?
  query = ip.split(/\./).reverse.join('.') + '.' + service
  result = `host -t txt #{query} 2> /dev/null`
  return nil unless $? == 0
  unless result =~ /\"(.*)\"/m
    raise "can't find text record in ${result.inspect}"
  end
  return "#{service} lists ip #{ip}: " + $1
end

def main

[...]

  save_if_list('briefs@lists.freeswan.org', 'freeswan')
  save_if_list('announce@lists.freeswan.org', 'freeswan')
[...]
  save_if_list('zsh-workers@sunsite.dk', 'zsh')
  save_if_list('zsh-users@sunsite.dk', 'zsh')

  # backup everything
  lda.save('.incoming/backup-' + Time.now.strftime('%Y-%V'), true)

  # Check if we got this through bigfoot and bounce it if it looks
  # suspicious.
  if h.match?('delivered-to', /matt\+bigfoot@lickey\.com/im) &&
      h.match?('received', /from.*by.*bigfoot\.com.*LiteMail/im)
    temp = h.match('received', /from.*by.*bigfoot\.com.*LiteMail/im)[0]
    if temp =~ /\(\[([\d\.]+)\]\)/
      ip = $1
      raise if defined? blocked
      lda.log(1, "bigfoot ip is #{ip}")
      blocked ||= dnsbl(ip, 'relays.ordb.org')
      blocked ||= dnsbl(ip, 'inputs.orbz.org')
      blocked ||= dnsbl(ip, 'bl.spamcop.net')
      lda.reject(blocked) unless blocked.nil?
    end
  end

[...]

  if h.match?('from', /matt@lickey\.com/im) &&
      h.match?('subject', /testme bounce/im)
    lda.reject("You want to test a bounce?  I'll give you a bounce!")
  end

[...]

  if h.match?('from', /Cron Daemon|root@lickey\.com|uucp@lickey\.com|cfengine@lickey\.com/im)
    spool_save("daemons")
  end

  # FIXME: need a forward mechanism
  if h.match?('from', /relaytest@lickey.com/im) &&
      h.match?('subject', /open relay test for/im)
    lda.pipe("/usr/sbin/sendmail -oi qspam@orbz.org relays@ordb.org")
  end

[...]

  spool_save("inbox")
end


-- 
matt

In This Thread