Rubyで最近よく忘れて調べ直す項目のメモ

ちょっとしたツールを作る時に、あれ?と直ぐに思い出せなくていつも調べてしまうのでちょっとメモ。

対象は、Ruby1.9.3系(Pはいつくかに跨がってるので今回は無視)

絶対パス

指定したファイルの絶対パスを取得するには、File.expand_path(ファイル名)を利用するのが便利。Ruby1.8系でも使えるのでそこも都合つごうがいい(require "pathname"してからのPathname.newでもいいみたいだが、使ってない)。

プログラムのファイル名とパス

実行されているプログラム名を取得するには、以下の2つがある

  • __FILE__
  • $0

上記のどちらでもプログラムのファイル名が入っているが、$0はプログラムを実行する時に指定した値が入っている。__FILE__は現在実行中のプログラムの値が入っている点に注意。どちらも1つのプログラムファイルであれば、値は同じだが、requireされてる内部で使うと__FILE__はrequireされてるファイル自身を指し示してしまう。

実行されている、パス情報から、ディレクトリ名とファイル名を分離するには以下の通り

File::dirname("ファイルパス") => 最後に/が付かない状態で出てくる
File::basename("ファイルパス") => ファイル名だけが出てくる(拡張子付き)
File::extname("ファイルパス") => 拡張子だけを取り出す

ミリ秒取得

ミリ秒単位までの時刻が欲しい時には、以下の用にかけた。

time = Time.now
time.tv_usec

Webのフォーム送信(マルチパート)

httpclient (gemでインストール)がかなり便利だった
ちなみに。HTTPCLient.new(プロキシー)とかけるのもいい感じ

require "httpclient"
uri = "http://localhost:8888"
cln = HTTPClient.new
body = { 'keyword' => 'ruby', 'lang' => 'en' }
res = clnt.post(uri, body)

マルチパート版はこちら

require "httpclient"
uri = "http://localhost:8888"
cln = HTTPClient.new

File.open('/tmp/post_data') do |file|
  body = { 'upload' => file, 'user' => 'nahi' }
  res = clnt.post(uri, body)
end

公式サイトの説明が非常に分かりやすいので、細かい点はそこを見るのが吉 - Class: HTTPClient