2008-06-25
ruby で unix mbox 形式のメールの処理
mbox に溜まったメールを処理したい時、基本的に逐一処理してって、意図しないときだけ mbox に残しておきたい。そんなときは TMail を使って処理するのが一般的?検索してもでてこないや。
TMail::UNIXMbox.create_from_line がバグっていてうまく new_port できないのでオーバーライドして処理。
あれれ、明示的に port#remove されないと消えないよなぁ。何だったんだろ…。
require 'tmail'
module TMail
module TextUtils
module_function :time2str
end
class UNIXMbox
def UNIXMbox.create_from_line( port )
# bug fix
sprintf 'From %s %s',
fromaddr(port), TextUtils::time2str(File.mtime(port.filename))
end
end
end
include TMail
mbox = UNIXMbox.new('/var/spool/mail/gorou')
mbox.each do |port|
begin
mail = Mail.new(port)
if %w(hotchpotch@example.com).include? mail.to
# メールをよしなに処理する
else
# 処理をしない
puts mail.to
port.move_to mbox.new_port
end
rescue Exception
# 例外時はメールを保持したまま
port.move_to mbox.new_port
end
end
mbox.close
なんかもっとうまい方法がある気がするんだけど。この方法だと mbox が巨大すぎると時間がかかりすぎる。
rails.vim のソースで良いところ
- 関数名が解りやすい
- コピペで機能実装が可能
何にも知らなくても軽く読んですぐ機能追加できる。抽象化具合も、無理矢理 OOP してなくて、vimscript っぽく関数べた書き、しかしながら解ほとんどの機能は関数に分離されているのでわかりやすい。
rails.vim で :Rconfig
:Rconfig env[tab]
:Rconfig rout[tab]
とかで移動したいな、と数十回は思ったので作成。そろそろ本家にパッチ送りたい。あああ github ならば…(ギッハブ厨オツ)
diff --git a/autoload/rails.vim b/autoload/rails.vim
index df01f96..e046f6f 100644
--- a/autoload/rails.vim
+++ b/autoload/rails.vim
@@ -1784,6 +1784,7 @@ function! s:BufFinderCommands()
call s:addfilecmds("javascript")
call s:addfilecmds("task")
call s:addfilecmds("lib")
+ call s:addfilecmds("config")
call s:addfilecmds("plugin")
endfunction
@@ -1976,6 +1977,15 @@ function! s:libList(A,L,P)
return s:autocamelize(all,a:A)
endfunction
+function! s:configList(A,L,P)
+ let all = s:relglob('config/',s:recurse)
+ if RailsFilePath() =~ '\
+ let path = s:sub(RailsFilePath(),'
+ let all = s:relglob(path,s:recurse) . "\n" . all
+ endif
+ return s:autocamelize(all,a:A)
+endfunction
+
function! s:Command(bang,...)
if a:bang
let str = ""
@@ -2399,6 +2409,16 @@ function! s:libEdit(bang,cmd,...)
endif
endfunction
+function! s:configEdit(bang,cmd,...)
+ let extra = ""
+ if RailsFilePath() =~ '\
+ let extra = s:sub(RailsFilePath(),'
+ endif
+ if a:0
+ call s:EditSimpleRb(a:bang,a:cmd,"task",a:0? a:1 : "",extra."config/","")
+ endif
+endfunction
+
" }}}1
" Alternate/Related {{{1
github ieize
javascript:document.body.innerHTML=document.body.innerHTML.split(/\d+/).join('NaN');focus();