このフォルダ以下のメールを既読にする - Beckrb用Rubyスクリプトその1

| コメント(2) | トラックバック(0)
先日bkbsfilterのネタを書きましたが、その時にインストールしたBecky!上でRubyを動かす、Beckrb用のスクリプトを書いてみました。Rubyでまともにプログラムするのは初めてなので、これでいいんかいな的な感じで作ってるので変なとこあったらコメント下さい。

作成したのは表題の通り、「このフォルダ以下のメールを既読にする」スクリプトです。選択されているフォルダ以下にあるすべてのメールを既読にしてくれます。また下の階層にフォルダがあれば、その中も再帰的に見るようになっています。 これをmark_as_read.rbとか(まぁファイル名はなんでもいいけど)で保存して、スクリプトの割当てで右クリックメニューに出すようにしておくと便利。でもそんなしょっちゅう必要になる機能ではないかもね...。

require "nkf"

def mark_as_read folder
	# set current folder
	Becky.set_current_folder(folder.folder_id)
	
	Becky.each_mail { |mail, sel|
		begin
			if (mail.status & Becky::MESSAGE_READ) == 0 # mark if unread
				if /^subject\:(.*)$/i =~ mail.headers.gsub(/\r\n\s+/, " ") then
					subject = NKF.nkf('-s', Becky.mime_decode($1)[0].strip)
					Becky.status = 'processing... ' + subject
				end
				mail.set_status(Becky::MESSAGE_READ)
			end
		rescue ArgumentError
		end
	}
end

def crawl_folder folder
	Becky.set_current_folder(folder.folder_id) # set current folder
	mark_as_read(folder) # mark_as_read
	
	folder.each_child { |child_folder|
		if child_folder.unread > 0
			mark_as_read(child_folder) # mark_as_read
		end
		crawl_folder(child_folder) # crawl folder
	}
end

crawl_folder(Becky.current_folder)
Becky.status = 'marked as read.'

そんなに詳しくドキュメントを見ないで書いているので変数のスコープとか変なとことかありそう。てかRubyにはPerlで言うところのmyみたいなのないのかな?(そういうのいらねーよとかいう設計なのかな?)

あと変数にPerlで言うところの$fooとか@fooが付いてないのでscalarなのかarrayなのかすぐにわからじ。でもいくつかrubyのスクリプトの例を見たら@fooっていうのがあるなーと思ったら、これは配列ではなくクラスのインスタンス変数らしい。ふむふむ。

といくつかPerlとの違い的なことを書いてみましたが、文法的にPerlっぽいところもありPerl書く人には入りやすいのかなとか思ったりする。

トラックバック(0)

トラックバックURL: http://blog.clouder.jp/mt/mt-tb.cgi/541

コメント(2)

はじめまして。通りすがりでコメントします。自分もそれほどしっかりおぼえているわけではありませんが(汗)

rubyは一文字目で変数の種類を見分けてます。

大文字から始まるのが定数で、
小文字から始まるのがローカル変数
@から始まるのがインスタンス変数で、
@@から始まるのがクラス変数です。

ということでスコープははっきり分かれていますので、my宣言のようなものは必要ないと思いますw
それからローカル変数を代入前に参照しようとするとエラーが起きて強制終了してくれます。

> あと変数にPerlで言うところの$fooとか@fooが付いてないのでscalarなのかarrayなのかすぐにわからじ。

最初は戸惑いましたが、自分は配列なら変数名を複数形にするなどで対応しています。(foos → 配列, foo → ローカル変数)

なるほど、そんなルールがあるんですね。
参考にしたいと思います。ありがとうございます!

コメントする

検索

広告

月別 アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.12