プロジェクト

全般

プロフィール

機能 #1172

mikutterが返すディレクトリパスは積極的にPathnameを利用する

toshi_a 初音9ヶ月前に追加. 7ヶ月前に更新.

ステータス:
新規
優先度:
通常
担当者:
-
対象バージョン:
開始日:
2018-02-14
期日:
進捗率:

0%

プラグイン名:

説明

Environment::CONFROOT などは "/homedir/.mikutter/" のようなStringクラスのインスタンスだが、これを Pathname でwrapする。
前から思っていたけど思い出したのでメモしておく。

メリット

標準添付ライブラリで、Ruby on Railsなどでも利用されている

pathnameは標準添付ライブラリなので依存関係を替えずに利用できる。
Railsで Environment::CONFROOT に相当する Rails.root はPathnameを返している。

File.joinなどのパスを扱うためのテクニックのより直感的な代替が提供されている

文字列でディレクトリパスを連結する場合、末尾にスラッシュがあるか否かがバグの原因になるため、mikutterではすべての箇所で File#join を使って連結しているが、 Pathname#/ を使えば同じことができる。

num = 1
File.join(path, "dir#{num}" ) #=> "/path/to/dir1" 
path / "dir#{num}" # => Pathname(/path/to/dir1)

デメリット

互換性のないメソッド

Pathname#+ は String#+ とは異なる動きをする。こんなことをやっている場所はないと思うが、もしやっていたらこの部分のコードは修正する必要がある。1箇所くらいならいいが、サードパーティプラグインも含めて多く使われていたらこのチケットは見送るべきかもしれない。

num = 1
path + "dir" + num # "/path/to/dir1" or Pathname(/path/to/dir/1)

履歴

#1 toshi_a 初音7ヶ月前に更新

  • 対象バージョン3.7 から 4.0 に変更

現状、 String#+ や String#start_with? の引数にパス文字列を与えているケースが散見され、Pathnameに変えるとクラッシュすることがわかった。
思ったより簡単ではなく互換性を損なう危険性が高いため4.0で再検討する。

他の形式にエクスポート: Atom PDF