--XIu4kVBgsyR9WyVUdvE
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

My solution is attached (It's also at http://rubyurl.com/mgX but I know
these messages are archived so I included it here). It's a pretty short
thing and not the cleanest code but this was one of those 'just get it
written' things for me :)

Synopsis:
  cat2rafb.rb [-nNickname] [-dDesc] [-lLanguage] [-cConvtabs] [-r]
              [[-tText] | [FILES, ...]]

Options:
  -n    - Specify nickname to paste with 
          (default: ENV['USER'] || 'unknown')
  -d    - Description of paste (default: none)
  -l    - Language for syntax highlighting 
          (default: Ruby unless -R option is passed: then Plain Text)
  -c    - Convert tabs to specified number of spaces (default: No)
  -r    - Display only rubyurl for this paste 
          (default: both rafb & rubyurl)
  -R    - Rafb only - don't get a rubyurl for this paste
  -t    - Specify text on commandline, rather than reading files.
          If no -t or filenames are supplied, STDIN is read.
          -t precludes reading of any file.

  To get a list of valid language and tab-conversion lengths, you can
  just pass the appropriate option with no value, e.g.

    ./cat2rafb.rb -l
    ./cat2rafb.rb -c

Examples:
  ./cat2rafb.rb somefile.txt
  ./cat2rafb.rb -nMyNick -lC++ -R myfile.c
  ./cat2rafb.rb -n'Long Nick' -d'Ruby code' -t'print if ~/^\d+:/' -r
  ./cat2rafb.rb -c2 -lruby -nmetoo -d'From stdin'

Thanks for another interesting quiz, a rafb paster seems like a good
thing to have :)

-- 
Ross Bamford - rosco / roscopeco.REMOVE.co.uk

--XIu4kVBgsyR9WyVUdvE
Content-Disposition: attachment; filename=cat2rafb.rb
Content-Type: text/plain; name=cat2rafb.rb; charset=utf-8
Content-Transfer-Encoding: 7bit

#!/usr/local/bin/ruby
require 'net/http'
require 'uri'

LANG  w{C89 C C++ C# Java Pascal Perl PHP PL/I Python Ruby Scheme SQL VB XML 
          Plain\ Text}
TABS  w{No 2 3 4 5 6 8}
RAFB, RURL  w{http://rafb.net/paste/paste.php
                http://rubyurl.com/rubyurl/create}.map { |u| URI.parse(u) }

rurlmode  ARGV.delete('-R') and output_ofs  ARGV.delete('-r') ? -1 : 0)
(form  'lang' (rurlmode ? 'Ruby' : 'Plain Text'), 
         'nick' ENV['USER'] || 'unknown', 
         'desc' '', 
         'cvt_tabs' 'No',
         'text' nil}).keys.each do |key|
  ARGV.reject! { |a| form[key]  1 if a /-#{key[0,1]}.*)/ }
end
form['lang']  ANG.detect {|l| l.casecmp(form['lang']) 0} or
  raise "Unrecognized language (allowed values are #{LANG.inspect})" 
form['cvt_tabs']  ABS.detect {|l| l.casecmp(form['cvt_tabs']) 0} or
  raise "Unrecognized tab length (allowed values are #{TABS.inspect})" 
form['text'] || RGF.read

begin
  puts(((q  [RAFB, form]]).map do |url,form|
    if (res  et::HTTP.post_form(url,form)).is_a?(Net::HTTPRedirection)
      if (loc  es['location']) /\/rubyurl\/show\/(.*)/
        "http://rubyurl.com/#$1"
      else
        rfb  http://rafb.net#{loc}"
        q << [RURL, {'rubyurl[website_url]' rfb}] if rurlmode
        rfb
      end
    else
      res.error!
    end 
  end)[(output_ofs || 0)..-1].join("\n"))
rescue
  $!.set_backtrace([]) and raise
end


--XIu4kVBgsyR9WyVUdvE--