Actions
機能 #1172
openmikutterが返すディレクトリパスは積極的にPathnameを利用する
Start date:
2018-02-14
Due date:
% Done:
0%
プラグイン名:
Description
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)
Updated by toshi_a 初音 over 6 years ago
- Target version changed from 3.7 to 4.0
現状、 String#+ や String#start_with? の引数にパス文字列を与えているケースが散見され、Pathnameに変えるとクラッシュすることがわかった。
思ったより簡単ではなく互換性を損なう危険性が高いため4.0で再検討する。
Actions