操作
機能 #1172
未完了mikutterが返すディレクトリパスは積極的にPathnameを利用する
開始日:
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)
toshi_a 初音 さんが6年以上前に更新
- 対象バージョン を 3.7 から 4.0 に変更
現状、 String#+ や String#start_with? の引数にパス文字列を与えているケースが散見され、Pathnameに変えるとクラッシュすることがわかった。
思ったより簡単ではなく互換性を損なう危険性が高いため4.0で再検討する。
操作