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