--=-LXIu4kVBgsyR9WyVUdvE
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
--=-LXIu4kVBgsyR9WyVUdvE
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'] = LANG.detect {|l| l.casecmp(form['lang']) == 0} or
raise "Unrecognized language (allowed values are #{LANG.inspect})"
form['cvt_tabs'] = TABS.detect {|l| l.casecmp(form['cvt_tabs']) == 0} or
raise "Unrecognized tab length (allowed values are #{TABS.inspect})"
form['text'] ||= ARGF.read
begin
puts(((q = [[RAFB, form]]).map do |url,form|
if (res = Net::HTTP.post_form(url,form)).is_a?(Net::HTTPRedirection)
if (loc = res['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
--=-LXIu4kVBgsyR9WyVUdvE--